2011-04-17 46 views
0

更多我要調用此函數如何從函數退出,如果它花費的時間比預期的時間

$rep_id=$this->getit($domain); 

但有些領域需要2/3分鐘,我下一步要進入,如果它需要很長時間。我已經設置了set_time_limit(3000);在php頁面開頭

+0

它取決於'getit'的實現。如果它是基於'curl'的,那麼你可以手動指定超時。 – zerkms 2011-04-17 04:36:09

+0

getit()做什麼?發佈它的功能體。 – Khez 2011-04-17 04:36:18

回答

0

set_time_limit()將不起作用,因爲它爲腳本設置整個時間。我不確定這是否真的可能與PHP,但你可能能夠把它與分叉。我在開始一個計時器(使用time()作爲時間戳)並循環直到達到X時間,同時將$ this-> geitit()作爲子進程分叉。然後,當計時器用完時,殺死子進程。可能工作,但不知道。

我想也許一個替代方案是使用參數或者set_time_limit(使之成爲單獨的腳本在指定超時),然後使用EXEC()

0

假設調用GETIT(從主腳本調用它)是在主線程(即不在新線程中產生),則執行它可能會阻塞腳本的其餘部分。但是,如果getit()通過自己的計時器自我感知,則可以將其設計爲在達到執行限制時轉儲出來,並返回指示問題的錯誤代碼。如果您決定着手進行此更改,請考慮添加可選的參數以指定通話時間限制。

相關問題