Php максимальное время исполнения скрипта

Увеличить время выполнения скрипта (PHP)

Увеличить время выполнения скрипта можно четырьмя способами. Два способа при помощи PHP функций ( set_time_limit(int seconds) и ini_set(string varname, string newvalue)), при помощи настроек файла php.ini или использования файла .htaccess .

set_time_limit()

Самый простой и быстрый способ использовать вначале выполнения скрипта функции void set_time_limit( int seconds ) , которая меняет значение параметра max_execution_time , установленное в файле php.ini (Значение устанавливается в секундах, по-умолчанию 30 секунд).

ini_set()

Второй способ позволяет менять настройки файла php.ini — функция ini_set(string varname, string newvalue)) .

Примечание: функцию ini_set() не получится использовать, если PHP запущен в безопасном режиме.

php.ini

Если у вас есть доступ к настройкам файла php.ini , то в нем можно изменить настройку max_execution_time.

htaccess

Третий способ при помощи прописания параметров в файле .htaccess .

Заключение

На некоторых хостингах отключают возможность изменять значение max_execution_time , а вообще этот параметр лучше оставить в покое и хорошенько оптимизировать скрипты.

Категории

Читайте также

  • Как увеличить объем загружаемого файла (PHP)
  • Включить-отключить вывод ошибок (PHP)
  • Время выполнения скрипта (PHP)
  • Дата вчера сегодня завтра (PHP)
  • Конвертировать миллисекунды в time.Time (GoLang)
  • Первые N символов строки цифры (PHP)
  • Преобразовать дату в секунды (PHP)
  • isset vs array_key_exists (PHP)
  • Количество секунд от начала дня (PHP)
  • foreach vs array_walk (PHP)
  • Singleton Trait (PHP)
  • Редирект (PHP)

Комментарии

у меня не открывается игра контра сити

Вход на сайт

Введите данные указанные при регистрации:

Социальные сети

Вы можете быстро войти через социальные сети:

Источник

Php максимальное время исполнения скрипта

Поведение этих функций зависит от установок в php.ini .

Настройки PHP/Параметры конфигурации информации

Имя По умолчанию Место изменения Список изменений
assert.active «1» PHP_INI_ALL
assert.bail «0» PHP_INI_ALL
assert.warning «1» PHP_INI_ALL
assert.callback NULL PHP_INI_ALL
assert.quiet_eval «0» PHP_INI_ALL Удалено в PHP 8.0.0
assert.exception «0» PHP_INI_ALL
enable_dl «1» PHP_INI_SYSTEM Эта возможность устарела и будет обязательно удалена в будущем.
max_execution_time «30» PHP_INI_ALL
max_input_time «-1» PHP_INI_PERDIR
max_input_nesting_level «64» PHP_INI_PERDIR
max_input_vars 1000 PHP_INI_PERDIR
zend.enable_gc «1» PHP_INI_ALL

Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных директив.

Включение выполнение assert() . zend.assertions следует использовать вместо этого для управления поведением функции assert() .

Читайте также:  Android java sdk reference

Завершение работы скрипта при провале проверки утверждений.

Вызов предупреждений PHP для каждой проваленной проверки утверждения.

Пользовательская функция, вызываемая при провале проверки утверждений.

Данная функциональность была УДАЛЕНА, начиная с PHP 8.0.0.

Используйте эту настройку функции error_reporting() во время выполнения проверки утверждений. При включении настройки сообщения об ошибках во время проверки утверждений показываться не будут (неявный вызов error_reporting(0)). Если настройка выключена, ошибки будут выдаваться в соответствии с настройками error_reporting()

Генерирует исключение AssertionError для неудачной проверки утверждения.

Директива позволяет включать и выключать динамическую подгрузку модулей PHP с помощью функции dl() .

Главной причиной, по которой требуется выключение динамической загрузки, является безопасность. С помощью динамической загрузки можно обойти все open_basedir ограничения. По умолчанию динамическая загрузка разрешена.

Эта директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, парсер завершает работу скрипта. Этот механизм помогает предотвратить зависание сервера из-за плохо написанного скрипта. По умолчанию на загрузку даётся 30 секунд. Если PHP запущен из командной строки, это значение по умолчанию равно 0 .

В системах, отличных от Windows, на максимальное время выполнения не влияют системные вызовы, потоковые операции и т.п. За дополнительной информацией обращайтесь к документации к функции set_time_limit() .

Веб-серверы обычно имеют свои настройки времени ожидания, по превышении которого сами завершают выполнение скрипта PHP. В Apache есть директива Timeout , в IIS есть функция CGI timeout. В обоих случаях по умолчанию установлено 300 секунд. Точные значения можно узнать из документации к веб-серверу.

Эта директива задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные данные, переданные запросами вроде POST или GET. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться. Значение по умолчанию -1 , что означает, что будет использоваться max_execution_time. Если установить равным 0 , то ограничений по времени не будет.

Задаёт максимальную глубину вложенности входных переменных (то есть $_GET , $_POST .)

Сколько входных переменных может быть принято в одном запросе (ограничение накладывается на каждую из глобальных переменных $_GET, $_POST и $_COOKIE отдельно). Использование этой директивы снижает вероятность сбоев в случае атак с использованием хеш-коллизий. Если входных переменных больше, чем задано директивой, выбрасывается предупреждение E_WARNING , а все последующие переменные в запросе игнорируются.

Включает или отключает сборщик циклических ссылок.

User Contributed Notes

Источник

set_time_limit

Задаёт время в секундах, в течение которого скрипт должен завершить работу. Если скрипт не успевает, вызывается фатальная ошибка. По умолчанию даётся 30 секунд, либо время, записанное в настройке max_execution_time в php.ini (если такая настройка установлена).

Читайте также:  Python pyaudio play audio

При вызове set_time_limit() перезапускает счётчик с нуля. Другими словами, если время ожидания изначально было 30 секунд, и через 25 секунд после запуска скрипта будет вызвана функция set_time_limit(20) , то скрипт будет работать максимум 45 секунд.

Список параметров

Максимальное время выполнения в секундах. Если задан ноль, время выполнения неограниченно.

Возвращаемые значения

Возвращает true в случае успешного выполнения, иначе false .

Примечания

Замечание:

Функция set_time_limit() и директива max_execution_time влияют на время выполнения только самого скрипта. Время, затраченное на различные действия вне скрипта, такие как системные вызовы функции system() , потоковые операции, запросы к базам данных и т.п. не включаются в расчёт времени выполнения скрипта. Это не относится к системам Windows, где рассчитывается абсолютное время выполнения.

Смотрите также

User Contributed Notes 25 notes

Both set_time_limit(. ) and ini_set(‘max_execution_time’. ); won’t count the time cost of sleep,file_get_contents,shell_exec,mysql_query etc, so i build this function my_background_exec(), to run static method/function in background/detached process and time is out kill it:

my_exec.php:
function my_background_exec ( $function_name , $params , $str_requires , $timeout = 600 )
< $map =array( '"' =>‘\»‘ , ‘$’ => ‘\$’ , ‘`’ => ‘\`’ , ‘\\’ => ‘\\\\’ , ‘!’ => ‘\!’ );
$str_requires = strtr ( $str_requires , $map );
$path_run = dirname ( $_SERVER [ ‘SCRIPT_FILENAME’ ]);
$my_target_exec = «/usr/bin/php -r \»chdir(‘ < $path_run >‘); < $str_requires >\\\$params=json_decode(file_get_contents(‘php://stdin’),true);call_user_func_array(‘ < $function_name >‘, \\\$params);\»» ;
$my_target_exec = strtr ( strtr ( $my_target_exec , $map ), $map );
$my_background_exec = «(/usr/bin/php -r \»chdir(‘ < $path_run >‘); < $str_requires >my_timeout_exec(\\\» < $my_target_exec >\\\», file_get_contents(‘php://stdin’), < $timeout >);\» my_timeout_exec ( $my_background_exec , json_encode ( $params ), 2 );
>

function my_timeout_exec ( $cmd , $stdin = » , $timeout )
< $start = time ();
$stdout = » ;
$stderr = » ;
//file_put_contents(‘debug.txt’, time().’:cmd:’.$cmd.»\n», FILE_APPEND);
//file_put_contents(‘debug.txt’, time().’:stdin:’.$stdin.»\n», FILE_APPEND);

$process = proc_open ( $cmd , [[ ‘pipe’ , ‘r’ ], [ ‘pipe’ , ‘w’ ], [ ‘pipe’ , ‘w’ ]], $pipes );
if (! is_resource ( $process ))
‘1’ , ‘stdout’ => $stdout , ‘stderr’ => $stderr );
>
$status = proc_get_status ( $process );
posix_setpgid ( $status [ ‘pid’ ], $status [ ‘pid’ ]); //seperate pgid(process group id) from parent’s pgid

stream_set_blocking ( $pipes [ 0 ], 0 );
stream_set_blocking ( $pipes [ 1 ], 0 );
stream_set_blocking ( $pipes [ 2 ], 0 );
fwrite ( $pipes [ 0 ], $stdin );
fclose ( $pipes [ 0 ]);

if ( time ()- $start > $timeout )
< //proc_terminate($process, 9); //only terminate subprocess, won't terminate sub-subprocess
posix_kill (- $status [ ‘pid’ ], 9 ); //sends SIGKILL to all processes inside group(negative means GPID, all subprocesses share the top process group, except nested my_timeout_exec)
//file_put_contents(‘debug.txt’, time().»:kill group \n», FILE_APPEND);
return array( ‘return’ => ‘1’ , ‘stdout’ => $stdout , ‘stderr’ => $stderr );
>

$status = proc_get_status ( $process );
//file_put_contents(‘debug.txt’, time().’:status:’.var_export($status, true).»\n»;
if (! $status [ ‘running’ ])
< fclose ( $pipes [ 1 ]);
fclose ( $pipes [ 2 ]);
proc_close ( $process );
return $status [ ‘exitcode’ ];
>

Читайте также:  Css find by name

usleep ( 100000 );
>
>
?>

a_class.php:
class A
static function jack ( $a , $b )
< sleep ( 4 );
file_put_contents ( ‘debug.txt’ , time (). «:A::jack:» . $a . ‘ ‘ . $b . «\n» , FILE_APPEND );
sleep ( 15 );
>
>
?>

test.php:
require ‘my_exec.php’ ;

my_background_exec ( ‘A::jack’ , array( ‘hello’ , ‘jack’ ), ‘require «my_exec.php»;require «a_class.php»;’ , 8 );
?>

Источник

doctor Brain

Практически каждый из нас хоть раз встречался с фатальной ошибкой, обусловленной тем, что на выполнение PHP-скрипта не хватало времени — это было больно и обидно. По умолчанию в настройках PHP на выполнение скрипта отводится 30 секунд, но в некоторых случаях для этого требуется больше времени. В таком случае на помощь приходит встроенная функция ini_set(), которая принимает два строковых параметра: наименование настройки конфигурации PHP и новое значение настройки. В нашем случае первым параметром будет ‘max_execution_time’, а вторым — новое значение максимального времени выполнения скрипта в секундах.

Как увеличить время выполнения только для одного скрипта?

Для того, чтобы быстро исправить ситуацию с “тяжелым” скриптом, достаточно добавить код приведенный ниже в его начало:

ini_set('max_execution_time', 120); // 120 секунд = 2 минуты, можно заменить на любое требуемое время в секундах 

В данном случае следует обратить внимание на пару моментов:

  1. строка с кодом, изменяющим настройки, должна находиться в самом начале скрипта, в противном случае есть риск запуска скрипта с настройками по умолчанию, установленными в файле php.ini,
  2. изменения настроек будут касаться только той странице, на которой присутствует ini_set.

Как установить бесконечное время выполнения скрипта?

Если невозможно определиться, сколько секунд требуется на выполнение определенного скрипта, Вы можете сбросить временные ограничения. Безусловно, это плохая практика, но такой подход оправдан во время разработки и тестирования проекта. И, конечно, не забудьте отменить такую настройку при переносе проекта на бой.

ini_set('max_execution_time', 0); // 0 = бесконечное выполнение скрипта 

Как изменить время выполнения скрипта глобально?

Проблему времения выполнения скриптов можно решить глобально, внеся соответствующие изменения в файл настроек php.ini. Для этого необходимо сделать следующее:

  1. найдите папку с действующим ядром PHP,
  2. найдите актуальный файл php.ini и откройте его для редактирования,
  3. найдите строку, содержащую max_execution_time=30,
  4. замените 30 на нужное Вам значение в секундах,
  5. сохраните и закройте файл,
  6. перезапустите веб-сервер, для того чтобы изменения вступили в силу.

Изменение настроек времени выполнения скрипта должно быть оправданным и хорошо обдуманным шагом, особенно для боевых проектов. В определенных случаях увеличение времени выполнения скрипта спасет весь проект, но не стоит забывать о ситуациях, в которых столь, казалось бы, незначительное изменение становится бомбой замедленного действия и может все погубить. Будьте внимательны.

Новые публикации

Photo by CHUTTERSNAP on Unsplash

JavaScript: сохраняем страницу в pdf

HTML: Полезные примеры

Источник

Оцените статью