2016-02-28 2 views
0

PHP set_time_limit не работает, даже если он меньше других ограничений. Например, следующий код будет работать до конца:Nginx + php5-fpm не соответствует set_time_limit

<?php 
    set_time_limit(5); 
    sleep(10); 
    echo "Did not work!"; 
?> 

Я знаю о request_terminate_timeout и fastcgi_read_timeout, но это не имеет значения в данном случае.

Как я могу установить ограничение времени nginx + php5-fpm, которое я устанавливаю?

У меня есть довольно много configurigation по умолчанию для обоих:

Nginx:

location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    include fastcgi_params; 
} 

PHP5-FPM:

Default config, no limit specified (request_terminate_timeout = 0) 

PHP:

max_execution_time = 30 

Хотя в php-fpm documentation говорит о request_terminate_timeout: "This option should be used when the 'max_execution_time' ini option does not stop script execution for some reason."

Я все еще хотел бы найти решение этой проблемы ...

Примечание: Я использую Ubuntu 14.04, Nginx 1.4 .6 и PHP 5.5.

ответ

3

Вам нужно прочитать инструкцию на set_time_limit():

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

Это относится также к команде sleep(), также упомянутой в комментариях к руководству. Поэтому время во время сна даже не подсчитывается. После команды сна в конце скрипта накопленное время почти равно нулю.

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

+0

Как кажется, вы правы. С 'while (true);' работает как ожидалось :) – Kristian

Смежные вопросы