0
我正在從PHP調用TCL腳本。我從TCL過程向PHP發送一個唯一的字符串以確保腳本已經結束。fread的超時時間
如果我不發送該字符串,那麼我在PHP中的fread將永遠被阻塞。
// PHP代碼
<?php
$id = 'done'; //Unique string
$app = 'c:/wamp/www/tcl/bin/tclsh84.exe';
$descriptorspec = array(
0 => array("pipe","r"),
1 => array("pipe","w"),
2 => array("pipe","w")
) ;
$process = proc_open($app, $descriptorspec, $pipes);
if (is_resource($process))
{
for($i=0;$i<2;$i++)
{
$output = '';
$continue = true;
$cTimeout = 0;
echo 'loop ', $i, "\n";
fwrite($pipes[0], "source c:/wamp/www/tcl/bin/helloworld.tcl\n");
echo "waiting for idle\n";
$timeout = time();
do {
$read=array($pipes[1]);
$write=array();
$except=array($pipes[1]);
$ready = stream_select($read, $write, $except, 1, 0);
$dif = time()- $timeout;
if ($ready && $read)
{
$output .= fread($pipes[1], 2048); // is blocked indefinitely
// if the delimiter id shows up in $output
if (false!==strpos($output, $id)) {
// the script is done
$continue = false;
}
}
if($dif > 5) //timeout value not working
{
$continue = false;
}
} while($continue);
echo 'loop ', $i, "$output finished\n";
}
proc_close($process);
}
?>
// TCL代碼
看跌期權 「你好」
如果我發送 「完成」 從TCL,然後我的PHP腳本結束。 但我不想發送剛剛完成,而是需要暫停的幫助。 即我想等待一段時間的唯一字符串,否則我應該退出。但我似乎無法在這種情況下實現超時。
請任何人都可以引導我。
但這是腳本失敗的情況。但在我的腳本中,fread被阻塞,因爲它沒有緩衝區中的數據。因此它不能出來。該腳本僅在我終止tclsh過程時結束。 – Vidya 2009-11-03 11:31:26
因爲執行時間過長而失敗。在TLC等待預定義的時間之後,PHP是否會退出? – Frankie 2009-11-03 11:56:05