2010-05-13 88 views
0

我在PHP中看到了很多關於這個錯誤的問題。但是到處都有解決方案來設定時間限制。在運行時檢測最大執行時間

但我想要做的是檢測錯誤,如果它發生,然後切換到另一個行動的過程。我的意思是,如果我的請求超過了我設定的最大時間,那麼它不應該給出錯誤消息並停止,而是繼續執行一些其他代碼塊。 我該怎麼做到這一點?

=======

我剛剛發現這個代碼是一個網站,它可以幫助?

<?php 

//open error reporting, the error message is required in this script 
error_reporting(1); 

//for testing, set maximum execution to 1 second 
set_time_limit(1); 

//turn on output buffering and set callback function 
ob_start('callback'); 

//------------------------------------------------------------------------------ 

//main program(dead loop) 
while (true); 

//script completed(impossible) 
echo 'Completed!'; 

//------------------------------------------------------------------------------ 

/** 
* output callback, execute when end of the request 
* 
* @param string $buffer 
* @return string 
*/ 
function callback($buffer) { 
    if (false !== (stripos($buffer,'<b>Fatal error</b>'))) { 
     if (false !== (stripos($buffer,'Maximum execution'))) { 
      $buffer = 'ycTIN.com , Server Busy'; 
     } else { 
      $buffer = 'ycTIN.com , Server Internal Error'; 
     } 
    } 
    return $buffer; 
} 
?> 

回答

0

我想沒有辦法。我只是將時間限制設置爲無限。這樣它應該有一段時間.. :)

0

這並不容易。 您可以將當前時間保存在腳本的開頭,然後調用每隔幾行檢查時間差的函數。這不是非常有效,但會混淆你的代碼。

+0

沒有辦法使用錯誤處理程序?我的意思是它表明它是一個致命錯誤..: - \ – 2010-05-13 11:03:55

+0

致命錯誤不能由PHP中的自定義錯誤處理程序處理。 – ThiefMaster 2010-05-13 14:06:28

0

它不能這樣做,因爲超出您的最大的執行時間將導致致命的錯誤在PHP

0

pcntl_alarm可以幫助,如果你將其設置到比最大執行時間更小。

+0

這會中斷運行功能,例如數據庫查詢。 – ThiefMaster 2010-05-13 14:07:01