germn
@germn

set_time_limit не работает, скрипт отрабатывает бесконечно долго

set_time_limit(10); // не работает, скрипт отрабатывает бесконечно долго.

echo ini_get('max_execution_time'); // 10
phpinfo() // значения верные, safemode Off

// CentOS-6-x86_64, nginx 1.5.1, php 5.4.17

В чём может быть причина?
  • Вопрос задан
  • 15075 просмотров
Решения вопроса 1
Mendel
@Mendel
PHP-developer
Отделите мух от котлет.
Сделайте тест, в котором будет только сет_тайм_лимит и бесконечный цикл, т.е. в две строки.
Так вы локализуете проблему — это с вашим окружением или с кодом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@edogs
Скрипт именно работает бесконечно долго?
Потому что
Функция set_time_limit() и директива max_execution_time влияют на время выполнения только самого скрипта. Время затраченное на различные действия вне скрипта, такие как системные вызовы функции system(), потоковые операции, запросы к базам данных и т.п. не включаются в расчет времени выполнения скрипта.

То есть если допустим у Вас граббер где 50 секунд file_get_contents отрабатывает, а потом 30 секунд запрос в базу идет и еще sleep-ом догоняетесь к примеру секунд на 40, то все эти 50-30-40 не в счет.

И еще на всякий случай. set_time_limit Вы же один раз выполняете? Просто если он случайно в цикл попал и выполняется на каждой итерации, то эти выставляемые 10 секунд они отсчитываются с момента задания значения set_time_limit_ом
Ответ написан
ANUFRiY
@ANUFRiY
Верней всего что проблема окружения. Сталкивался с таким когда у меня начинал сыпаться хард на сервере.
Советую замерить скорости выполнения отдельных компонентов

<?php
$start = microtime(true);

//......

echo ( microtime(true) - $start );


Обязательно да чтонибудь всплывёт.
Ответ написан
Aleks_ja
@Aleks_ja
Это, конечно, магия ) но можете попробовать сделать и set_time_limit(10) и ini_set('max_execution_time',10);

У нас когда-то такое сработало, а отдельно set_time_limit — нет.
Ответ написан
rasstroen
@rasstroen
set_time_limit может не работать потому что:
You can not change this setting with ini_set() when running in safe mode. The only workaround is to turn off safe mode or by changing the time limit in the php.ini.
Your web server can have other timeout configurations that may also interrupt PHP execution. Apache has a Timeout directive and IIS has a CGI timeout function. Both default to 300 seconds. See your web server documentation for specific details.

Т.е. запуск из командной строки и http запросом в браузере могут по окружению и настройкам именно time_limit а отличаться
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы