2013-06-20 71 views
4
「頭」

我試圖過濾設置使用這些命令在目錄中的文件和輸出僅前n行的內容:呼叫的「grep」,並從PHP

gzip -dc $(find %pathtofolder%) | grep 27990 | head -n 50 

運行在終端這個命令需要幾秒完成。但是,當我從PHP運行它需要將近一個小時,因爲文件的總大小是巨大的。 似乎像php一樣等待gzip命令完成。 但是,如果我簡單運行:

gzip -dc $(find /opt/data/bi/ets/20130616) | head -n 50 

它立即給出結果。 我試過反引號,exec,系統。

這裏是PHP代碼:

$cmd = 'gzip -dc $(find '.$path.' | grep -E "'.$regexp.'") | grep -E "'.$this->_buildRegExp().'" | head -n '.$r['limit']; 
$res = `$cmd`; 

如何解決這一問題?

+0

不知道你的PHP在這裏做什麼。我看不到任何PHP代碼。 – Dogbert

+0

$ cmd ='gzip -dc $(find'。$ path。'| grep -E「'。$ regexp。'」)| grep -E「'。$ this - > _ buildRegExp()。'」| head -n'。$ r ['limit']; 然後執行($ cmd) 但我簡化了這個命令,以最小化需要重現 – Erepb

+0

嗯,你應該把這個問題。沒有PHP代碼就沒有意義。 – Dogbert

回答

0

使用中繼,而不是高管獲得所有的輸出,不僅是最後一個字符串

passthru($cmd, $output); 
echo $output; 
+0

問題在於查找所有50行後命令不會停止。 我會用反引號替換exec – Erepb