2010-08-06 45 views
8

我有PHP腳本調用perl腳本來做各種事情,有時我得到它只是繼續下去,沒有得到迴應,這是基於正在傳遞給perl腳本的變量,我正在做很多不同的連續,所以我不能直接調試它,因爲我沒有從perl響應...爲特定函數/代碼塊(而不是整個腳本)設置超時?

我真的很想能夠設置一個PHP函數或塊碼到一定秒數。我一直在尋找這個,但是,如何做到這一點還沒有發現任何東西后超時,

我在想這樣的事情可以工作,但我不認爲它會動態更新$ time變量,但也許有一種方法可以獲得工作?任何建議表示讚賞

$time = time(); 
$timeout = $time + 5; //just as an example 

do { 

// do stuff 
} while ($time < $timeout) 
+0

你內心的$時間上運行而對於它來更新,但如果你的perl代碼的調用在這個時間內,如果這是一個等待它的回覆的調用,它將不起作用。 – Prix 2010-08-06 01:13:36

+0

耶那的問題,那麼,它,我想這等待的Perl返回無論什麼 – Rick 2010-08-06 01:23:07

+0

,如果你真的不關心你可以做到這一點不同,使收益類的命令:'EXEC(「my_command_here>的/ dev/null 2> &1 &");'這會在後臺執行你的代碼,將輸出發送到黑洞。這樣你的php代碼將繼續運行,但是你需要一個不同的方法來知道它已經完成或不完成的天氣......你可以比如讓你的perl文件創建一個1或0的文件就像一個PID文件,你可以像你想要的那樣從你的循環中控制它 – Prix 2010-08-07 03:37:07

回答

8

你最好的選擇是使用proc_open,睡你的超時量,然後調用proc_terminate如果進程還沒有完成。

有關proc_ *系列詳見http://us3.php.net/manual/en/book.exec.php

+0

我會研究一下,但是我需要從perl返回,只是在它沒有在合理的時間內給出回報的情況下,我沒有返回來調試它..我之前聽說過proc_open,但不確定是否可以從它得到回報 – Rick 2010-08-06 01:24:45

0

嗯,我不太確定這個問題將具有基於我怎麼問它的答案,所以我所要做的是做perl的電話,其中PHP不等待響應,並有Perl寫輸出到一個文本文件,然後讓PHP讀取這個規定後的秒數,我覺得這是要做到這一點,最簡單的方法它只是一個小的應用程序我是一個本地服務器

相關問題