php set_time_limit()用法測試詳解
一個php腳本通過crontab每5分鐘執(zhí)行一次,考慮到腳本執(zhí)行時間會超過5分鐘,特意用set_time_limit(290)來控制腳本在290秒退出。某天突然發(fā)現(xiàn)后臺有多個該腳本的進程在執(zhí)行,也就是說set_time_limit(290)沒有起作用。為了證明,特意使用如下代碼測試。

無論是在web還是CLI下,上述腳本并沒有在5秒鐘后退出。后來加上ini_set(‘max_execution_time’, 5)測試,結(jié)果一樣。那是不是說明set_time_limit函數(shù)根本就沒有用呢?其實不然,在 http://stackoverflow.com/questions/5874950/set-max-execution-time-in-php-cli 這里找到根源所在,其實是上面的寫法有問題,例如使用下述代碼:
執(zhí)行后,大概5秒鐘就可以看到”Fatal error: Maximum execution time of 5 seconds exceeded in”類似這樣的錯誤提示。說明set_time_limit是起作用的。現(xiàn)在在去看看官方文檔(http://www.php.net/manual/en/function.set-time-limit.php)上關(guān)于此函數(shù)的說明,在Note中寫到:
The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not?included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real.
例
注意:sleep函數(shù)暫停的時間也是不計入腳本的執(zhí)行時間的。所以也是第一個測試失敗的原因。
當(dāng)你的頁面有大量數(shù)據(jù)時,建議使用set_time_limit()來控制運行時間,默認是30s,所以需要你將執(zhí)行時間加長點,如 set_time_limit(300)? ,其中將秒數(shù)設(shè)為0 ,表示持續(xù)運行!
如:set_time_limit(0)表示長時間鏈接運行!
注意:這個函數(shù)的運行需要你關(guān)閉安全模式,在php.ini中將safe_mode = Off 安全模式設(shè)置為Off,否則將會出現(xiàn)下面錯誤:
Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in
再次注意的是:
在php.ini可以通過定義max_execution_time來設(shè)置PHP頁面的最大執(zhí)行時間,比如下面:
這個函數(shù)指定了當(dāng)前所在php腳本的最大執(zhí)行時間,
雖然設(shè)定值是900秒,實際上
最大執(zhí)行時間=php.ini里的max_execution_time數(shù)值 - 當(dāng)前腳本已經(jīng)執(zhí)行的時間 + 設(shè)定值
假如php.ini里的max_execution_time=30,當(dāng)前腳本已經(jīng)執(zhí)行10秒,則:
最大執(zhí)行時間=30-10+900=920秒。
php中設(shè)置set_time_limit不起作用的解決方法:
set_time_limit用來設(shè)置腳本的超時時間,用法如下:
set_time_limit(秒數(shù));
規(guī)定從該句運行時起程序必須在指定秒數(shù)內(nèi)運行結(jié)束,
超時則程序出錯退出.
但是有時候設(shè)置set_time_limit沒有效果,set_time_limit函數(shù)最好是在linux下執(zhí)行,windows執(zhí)行可能也無效
解決方法:
修改php.ini里的max_execution_time = 30了。這個默認是30秒,修改為max_execution_time = 300.重新啟動apache服務(wù)器。這樣超時設(shè)置為300秒就有提示信息了.
PHP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。