2016-02-28 100 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_timeoutfastcgi_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隻影響腳本本身 的執行時間。任何時間花費在腳本的執行 以外的任何時間,例如使用system(),流操作, 數據庫查詢等的系統調用,不包含當確定腳本已運行的最大 時間。

這也適用於sleep()命令,也在手冊的註釋中提到。所以睡眠時間甚至沒有計算在內。在腳本結尾的睡眠命令之後,累計時間幾乎爲零。

如果您的時間設置通過例如運行無限循環並測量從腳本開始到結束所用的時間,您可以嘗試。

+0

因爲看起來你是對的。用'while(true);'它按預期工作:) – Kristian