2013-12-18 142 views
0

我想在php中處理我的訪問日誌 - 檢查一些IP,它們是內容泄漏等等,一切都在PHP中,以CLI的方式運行。我試圖做出如下,但它永遠不會傳遞exec tail -f,所以實際上我無法處理數據。任何幫助讚賞。PHP exec背景永遠不會完成

$log = '/var/log/lighttpd/web.org-access.log'; 
$pipefile = '/www/web.org/tmp/fifo.tmp'; 

if(file_exists($pipefile)) 
    if(!unlink($pipefile)) 
     die('unable to remove stale file'); 

umask(0); 
if(!posix_mkfifo($pipefile,0777)) 
    die('unable to create named pipe'); 

exec("tail -f $log > $pipefile 2>&1 &"); //I tried nohup and so on... 
//exec("varnishncsa $log > $pipefile 2>&1 &"); //will be here instead tail -f 
echo "never comes here"; //never shows up 

如果可能的話,我想這樣做只是在PHP中,沒有慶典/ tcsh的腳本(我知道如何使用這些做到這一點)。

謝謝。

回答

2

如果你想exec開始後臺進程,你將不得不重定向它的輸出。從手動

報價:

如果程序開始使用此功能,以便它繼續在後臺運行,該程序的輸出必須重定向到文件或其他輸出流。否則會導致PHP掛起,直到程序執行結束。

注意完整的語法描述:

string exec (string $command [, array &$output [, int &$return_var ]]) 

來源:http://www.php.net/manual/en/function.exec.php

+0

感謝的答案,但是你可以看到,我已經將輸出重定向? – 2ge

+0

是的,但不通過exec函數。你是否已經嘗試傳入'''&$ output'''參數? –

+0

解釋:PHP可能會等待您的輸出,因爲您在命令中執行重定向,而不是通過執行調用進行輸出。 –