例如我在加載時執行的頁面上有5個PHP函數。每個功能都有自己的處理時間,其中一些功能有時需要更多的時間才能完成任務。因此該頁面的總加載時間很慢。如何在PHP中控制腳本執行時間
我的問題是我如何控制每個腳本的執行時間並設置相同的時間限制。我知道在PHP中有一個內置函數,名爲set_time_limit();
,但如果時間超出了最大限制,它會產生致命錯誤...
例如我在加載時執行的頁面上有5個PHP函數。每個功能都有自己的處理時間,其中一些功能有時需要更多的時間才能完成任務。因此該頁面的總加載時間很慢。如何在PHP中控制腳本執行時間
我的問題是我如何控制每個腳本的執行時間並設置相同的時間限制。我知道在PHP中有一個內置函數,名爲set_time_limit();
,但如果時間超出了最大限制,它會產生致命錯誤...
從你的問題所說的話,我假設你有5個函數單個PHP文件(腳本),正在執行,並且如果其中一個執行時間過長,則應該跳過它。
您可以跳過功能的唯一方法是每隔一段時間輪詢一次。
function myFunction($someVar) {
$startTime = time();
$timeLimit = 10; // Let's say, time limit is 10 seconds
while ($blah_blah == true) { // Some loop or code that takes a long time
// Do some work
if (time() - $startTime > $timeLimit) return; // Time's up!
}
// Done
return;
}
注意該函數將只在點返回,它檢查,如果時間到了,你必須手動的地方,你檢查,如果時間到了點。這個檢查確實有一些開銷,所以儘量不要放在任何地方。
如果我誤解了你的問題,請發表評論。
簡單的方法是撥打set_time_limit(0);
,但只有在safe_mode
關閉時纔有效。
我的這種方法是使用register_shutdown_function
:
function one() {
register_shutdown_function('two');
/* do stuff */
}
function two() {
register_shutdown_function('three');
/* do stuff */
}
function three() {
/* do stuff */
}
one();
這似乎並不用PHP 5.3.1工作,我想這是因爲實施的更改在PHP 4.1.0中:
關閉功能現在稱爲 作爲請求的一部分。在早期的 版本的Apache下,已註冊的 關閉功能在 請求已完成後調用。
另一種可能是使用pcntl_fork
,或者你可以問題的另一個請求(有file_get_contents
例如),並調用所請求的腳本ignore_user_abort
。
如果時間超過最大值,您會希望看到什麼行爲?它應該記錄一條消息嗎?顯示錯誤? – phsource 2010-06-04 06:19:07
不,我不想看到任何錯誤..剩下的腳本需要繼續並顯示結果。 – mathew 2010-06-04 06:23:21
它是不是已經這樣做了?花些時間運行並最終顯示結果? – 2010-06-04 06:26:45