參考:http://phpmianshi.com/?id=94
問題描述:
max_execution_time設置了1秒,但是發現超過3秒的腳本還是跑。於是深入研究下max_execution_time不生效的原因。
官網描述:
https://www.php.net/manual/zh/function.set-time-limit.php
set_time_limit()函數和配置指令max_execution_time隻影響腳本本身執行的時間。任何發生在諸如使用system()的系統調用,流操作,數據庫操作等的腳本執行的最大時間不包括其中,當該腳本已運行。在測量時間是實值的Windows中,情況就不是如此了。
問題分析:
max_execution_time計算的只是PHP腳本本身執行的時間,執行之外的時間都不會計算在內。哪些屬於執行之外的時間呢?包含sleep、數據交互、socket交互等等。
要驗證這點也很簡單,可以直接把代碼中的sleep 修改爲如下代碼測試:
for($i=0;$i<1000000;$i++){ sha1(time()); }
問題總結:
1、max_execution_time中的時間是以PHP腳本本身執行的時間來計算的,而不是整個請求的執行時間。
2、在PHP腳本中,對於諸如(system/socket/http/mysql/sleep)等不是依賴php的max_execution_time來做控制。