PHP中max_execution_time設置不生效

參考: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來做控制。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章