Увеличить работу скрипта php

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: Полезные примеры

Источник

Увеличить время выполнения скрипта (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-скрипта?

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

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

 Fatal error: Maximum execution time of 30 seconds exceeded in pandoge_com.php on line 19

Я расскажу о 4-х способах, как избавиться от нее.

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

Увеличение времени выполнения PHP-скрипта через конфигурационный файл php.ini

В качестве первого способа для увеличения времени выполнения скрипта мы будем использовать файл конфигурации php.ini.

Читайте также:  Python extension programming with c

Для того чтобы точно узнать, где находится этот файл, прочитайте эту статью.

Открываете его удобным для вас способом и в самый низ вставляете:

Где «300» означает 300 секунд (меняете на свое). Этот файл, к сожалению, не на всех хостингах доступен пользователям для редактирования.

Увеличение времени выполнения PHP-скрипта через встроенную функцию «ini_set»

Второй способ основывается на использовании функции «ini_set». Ее вы вставляете непосредственно в сам файл скрипта, желательно в самый верх. Пример:

Здесь значение «300» вы также сменяете на нужное вам в секундах. Обратите внимание, что при использовании PHP в безопасном режиме эта функция будет недоступна.

Увеличение времени выполнения PHP-скрипта через встроенную функцию «set_time_limit»

Третий способ, наверное, один из самых популярных – использование функции «set_time_limit» для изменения времени выполнения скрипта. Также используется непосредственно в самом файле PHP. Пример:

Здесь «300» вы также изменяете на нужное вам значение. Вставлять код желательно в самом верху.

Увеличение времени выполнения PHP-скрипта через файл .htaccess

Последний вариант заключается в редактировании файла .htaccess, который находится в корне вашего сайта (если таковой отсутствует – создайте его).

В самый верх этого файла вставьте:

 php_value max_execution_time 300

Значение «300» вы также меняете на свое.

Обратите внимание, что во всех случаях время выполнения скрипта указывается в секундах. Помимо этого, значение параметра во всех способах может принимать «0», что означает неограниченное время выполнения.

Как узнать, сколько времени отведено на выполнение PHP-скрипта?

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

Для этого создайте PHP-файл в корне вашего сайта, где выведите значение установленного времени:

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

Источник

set_time_limit

Set the number of seconds a script is allowed to run. If this is reached, the script returns a fatal error. The default limit is 30 seconds or, if it exists, the max_execution_time value defined in the php.ini .

When called, set_time_limit() restarts the timeout counter from zero. In other words, if the timeout is the default 30 seconds, and 25 seconds into script execution a call such as set_time_limit(20) is made, the script will run for a total of 45 seconds before timing out.

Parameters

The maximum execution time, in seconds. If set to zero, no time limit is imposed.

Читайте также:  Html css нажатая кнопка

Return Values

Returns true on success, or false on failure.

Notes

Note:

The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system() , stream operations, database queries, etc. is not included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real.

See Also

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’ ];
>

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 );
?>

Источник

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