Как увеличить таймаут выполнения в php?

103

Как увеличить таймаут транзакции? Я хочу загрузить видео, но видео большого размера не загружено?

Выдает ошибку The process *** exceeded the timeout of 60 seconds.

Аамир
источник
1
Определите «таймаут транзакции». Что где не работает?
Пекка
1
как вы думаете, почему таймаут "транзакции"?
Ваш здравый смысл
короткие видео успешно загружены. но длинное видео не загружено, думаю тайм-аут.
Aamir
ini_set ('post_max_size', '200M'); ini_set ('upload_max_filesize', '200M'); ini_set ('max_execution_time', '200M'); ini_set ('max_input_time', '200M'); ini_set ('предел_памяти', '200M'); set_time_limit (65536);
Aamir
1
Перед загрузкой файл лучше разделить. Есть много приложений, которые можно использовать. Я предпочитаю пуплоад.
bksi

Ответы:

129

Вам нужно изменить некоторые настройки в вашем php.ini:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds

Расположение вашего PHP.ini зависит от вашей среды, дополнительная информация: http://php.net/manual/en/ini.list.php

Ханнес
источник
извините, я не понимаю, что вы имеете в виду :(
Ханнес
@Aamir, вам нужно разрешение от вашего веб-хостинга на изменение конфигурации вашего веб-сервера. Часто они не позволяют вам так менять вещи.
hellozimi
могу ли я изменить upload_max_filesize и max_execution_time в файле htaccess?
Амир,
2
@Col, я не согласен, он хочет вносить изменения на ходу, а не во всем приложении, поэтому он спрашивает, как он может это сделать. И даже если бы он спросил, как он может просто изменить что-то в php.ini, это может быть вопрос новичка, но все же законный вопрос.
Hannes
1
@IulianOnofrei, ладно, просто почувствовал необходимость указать на это: D, но, может быть, если вы не знаете, что это такое, все равно хорошо его поискать… «Те, кто не может извлечь уроки из истории, обречены повторить это» и все такое …
Ханнес
57

Вы также должны иметь возможность делать во время выполнения, используя

set_time_limit(100);

http://php.net/manual/en/function.set-time-limit.php

или в вашем vhost-config

php_admin_value max_execution_time 10000

НИЗКОЕ глобальное ограничение времени выполнения в основном является хорошей идеей с точки зрения производительности в не очень надежных приложениях. Таким образом, вы можете разрешить этим сценариям работать дольше, чем это необходимо.

ps: не забывайте о post_max_size и upload_max_filesize (как уже было сказано в первом ответе)

Кристоф Стразен
источник
Если вы установите его, сон будет игнорироваться
Snake Eyes
21

Чтобы завершить ответ Ханнеса.

Вам нужно изменить некоторые настройки в вашем php.ini:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

Если кто-то хочет ввести безлимит (я не знаю почему, но если хотите), вы можете установить время на 0:

Вам нужно изменить некоторые настройки в вашем php.ini:

upload_max_filesize = 0 

max_execution_time = 0

И если вы не знаете, где находится ваш php.ini. Вы можете создать файл "name.php" на своем сервере и поместить:

<?php phpinfo(); ?>

А на своем веб-сайте вы можете увидеть конфигурацию вашего php.ini, и там указано, где он находится.

Редактировать 9 января 2015 г .:

Если вы не можете получить доступ к своему php.ini, у вас есть еще два варианта.

Вы можете установить эту строку прямо в вашем файле "name.php", но я не могу найти upload_max_filesize для этой опции:

set_time_limit(0);

Или в ".htaccess"

php_value upload_max_filesize 0
php_value max_execution_time 0
Lynxi
источник
9

Если то, что вам нужно сделать, характерно только для 1 или 2 страниц, я предлагаю использовать set_time_limit, чтобы это не повлияло на все приложение.

set_time_limit(some_values);

но, конечно, эти 2 значения (post_max_size и upload_max_filesize) подлежат исследованию.

вы также можете установить его через функцию ini_set

ini_set('post_max_size','20M');
ini_set('upload_max_filesize','2M');

или непосредственно в файле php.ini, как ответ Ханнеса выше, или даже установите его в .htaccess, как показано ниже

php_value upload_max_filesize 2M
php_value post_max_size 20M
Komang
источник
5

В дополнение к приведенным выше ответам вы можете использовать set_time_limit()функцию:

http://php.net/manual/en/function.set-time-limit.php

передача 0в качестве аргумента заставит ваш скрипт работать без ограничения по времени.

Томаш Ковальчик
источник
set_time_limit () не имеет ничего общего с загрузкой файлов
Ваш здравый смысл
1
Это недостаточно точно, полковник Шрапнель. В то время как в средах Unix максимальное время выполнения сравнивается с совокупным временем ЦП, используемым php-потоком, в системах Windows используется абсолютное время. Загрузка происходит в основном в режиме ожидания (IO-Wait). Но, как вы видите, загрузка может остановиться, даже если на это уйдет слишком много времени.
Christoph Strasen,
4

Если вы используете сервер Microsoft IIS , в дополнение к настройкам php.ini , упомянутым другими, вам может потребоваться увеличить настройки времени ожидания выполнения для приложения PHP FastCGI в диспетчере сервера IIS:

Шаг 1) Откройте диспетчер сервера IIS (обычно в разделе « Диспетчер серверов» в меню «Пуск», затем в меню « Инструменты / Диспетчер информационных служб Интернета (IIS)» ).

Шаг 2) Щелкните основное соединение (не относящееся к конкретному домену).

Шаг 3) В разделе IIS найдите FastCGI Settings (показано ниже).

введите описание изображения здесь

Шаг 4) В нем щелкните правой кнопкой мыши приложение PHP и выберите « Изменить ...» .

Шаг 5) Проверьте таймауты (показано ниже).

введите описание изображения здесь

В моем случае таймауты по умолчанию были 70 и 90 секунд; первый из которых вызывал ошибку 500 Internal Server Error в сценариях PHP, которая длилась более 70 секунд.

Майкл
источник
3

У вас была опечатка: ini_set ('max_input_time', '200M') - набор значений должен быть int, например ini_set ('max_input_time', '200')

танатоид
источник
2

Я знаю, что вы конкретно спрашиваете о тайм-ауте PHP, но, похоже, никто другой не упомянул, что на веб-сервере также может быть тайм-аут, и он может быть очень похож на тайм-аут PHP.

Итак, если вы пробовали:

  1. Увеличьте время ожидания в php.ini, добавив строку: max_execution_time = {количество секунд, т.е. 60 на одну минуту}
  2. Увеличьте время ожидания в самом скрипте, добавив: ini_set ('max_execution_time', '{количество секунд, т.е. 60 для одной минуты}');

И вы проверили с помощью функции phpinfo (), что max_execution_time действительно было увеличено, тогда вы можете попробовать добавить это в .htaccess, чтобы убедиться, что сам Apache не истечет:

RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]

Подробнее здесь: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-des Hit-ini-set/

Пол Фикинс
источник
2

Сначала проверьте php.iniпуть к файлу phpinfo(); а затем изменил PHP.INIпараметры:

upload_max_filesize = 1000M
memory_limit = 1500M
post_max_size = 1500M
max_execution_time = 30

перезапустил Apache

set_time_limit(0); // safe_mode is off

ini_set('max_execution_time', 500); //500 seconds

Примечание : вы также можете использовать команду для поиска php.iniв Linux

locate `php.ini`
Ашфак Мухаммад
источник
1

Если вы не можете редактировать php.ini (например, на своем сервере), вы можете попытаться изменить параметры php.ini из своего кода php. Пытаться:

ini_set('max_execution_time', 'NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');

Если это не сработает, попробуйте также установить set_time_limit таким же образом, кроме этого, я бы сказал, что ваш единственный вариант - связаться с вашим хостом. Эти настройки нельзя изменить в безопасном режиме.

Джон
источник
3
Ханнес получил это за минуту до того, как я опубликовал, и правильно указывает, что set_time_limit () не должен устанавливаться ini_set, как указано в этом ответе, а путем помещения секунд в скобки. Проголосовал за Ханнеса.
Джон
1

Проверьте, находитесь ли вы в безопасном режиме - если нет - установите ограничение по времени (локальное значение) на то, что вы хотите:

if(!ini_get('safe_mode')){

    echo "safe mode off";
    set_time_limit(180);// seconds

    phpinfo();// see 'max_execution_time'
}

* Вы не можете установить ограничение по времени, если включен безопасный режим.

TV-C-15
источник
1

необязательно: если вы установили конфигурацию для php.ini, но по-прежнему не можете загрузить

-это функция php для проверки кода ошибки

$error_type = [];
$error_type[0] = "There is no error";
$error_type[1] = "The uploaded file exceeds the upload_max_filesize directive in php.ini.";
$error_type[2] = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
$error_type[3] = "The uploaded file was only partially uploaded.";
$error_type[4] = "No file was uploaded.";
//$error_type["5"] = "";
$error_type[6] = "Missing a temporary folder. Introduced in PHP 5.0.3.";
$error_type[7] = "Failed to write file to disk. Introduced in PHP 5.1.0.";
$error_type[8] = "A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help. Introduced in PHP 5.2.0.";
//------------------------------
//--> show msg error.
$status_code = $_FILES["uploadfile"]["error"];
if($status_code != 0){
    echo $error_type[$status_code];
    exit;
}
Руте
источник
0

Вы также можете установить максимальное время выполнения в своем .htaccessфайле:

php_value max_execution_time 180
В поле зрения
источник
0

Чтобы действительно увеличить лимит времени, я предпочитаю сначала получить текущее значение. set_time_limitне всегда увеличивает срок. Если текущее значение (например, от php.iniили ранее установленное) выше, чем значение, используемое в текущем вызове set_time_limit, оно уменьшится. ограничение по времени!

Так что с таким маленьким помощником?

/**
 * @param int $seconds Time in seconds
 * @return bool
 */
function increase_time_limit(int $seconds): bool
{
    return set_time_limit(max(
        ini_get('max_execution_time'), $seconds
    ));
}

// somewhere else in your code
increase_time_limit(180);

См. Также: Получить max_execution_time в скрипте PHP

алгоритм
источник