2015-02-10 114 views
3

我有下面的代碼,運行一直運行(直到被殺死)的過程,並顯示結果(使用下面尾巴-F只是作爲說明):如何有網頁停止長時間運行的進程

<?php 
$cmd = "tail -F /var/log/whatever.log"; 
set_time_limit(0); 

$handle = popen($cmd, "r"); 

if (ob_get_level() == 0) 
    ob_start(); 

while(!feof($handle)) { 

    $buffer = fgets($handle); 
    echo $buffer . "<br />"; 
    ob_flush(); 
    flush(); 
    sleep(1); 
} 

pclose($handle); 
ob_end_flush(); 
?> 

這類工作,我的過程運行,但它停止加載頁面,關閉選項卡等時繼續運行。

有沒有一些機制,我可以利用停止進程,當我沒有顯示頁?我確定有,但不清楚。

+0

嘗試http://php.net/manual/en/refs.fileprocess.process.php或http://php.net/manual/en/book.pthreads。 php – 2015-02-10 14:46:29

+0

Linux或Windows? – John 2015-02-10 14:47:24

+0

可能會在循環中添加http://php.net/manual/en/function.connection-status.php或http://php.net/manual/en/function.connection-aborted.php檢查。 – 2015-02-10 15:02:36

回答

1
... 
header("Content-type:text/html");// start the content serving 
echo("\n"); // connection with the browser 
while(!feof($handle)) { 
    $buffer = fgets($handle); 
    echo $buffer . "<br />"; 
    ob_flush(); 
    flush(); 
    sleep(1); 
    if (connection_status()!=0){ // check the connection 
     die; // or whatever you want to stop the work 
    } 
} 

...