2012-10-05 45 views
0

我想通過php執行一個shell命令並在瀏覽器中顯示它。無論如何要這樣做? 這裏是我的PHP代碼:[test.php的]通過php執行shell命令並將其顯示在瀏覽器中?

<?php 
$number=$_GET["num"]; 
$date=$_GET["date"]; 
$output = shell_exec('egrep -w '2012-09-01|974' /home/myquery_test/log/push.log'); 
echo "<pre>$output</pre>"; 
?> 

當我運行這個(test.php的)文件從瀏覽器沒有顯示出來。但當我改變

$output = shell_exec('ls') 

其工作正常!爲什麼egrep/grep命令不工作?

回答

0

egrep命令不工作,因爲您使用單引號作爲字符串常量分隔符:'egreep -w' < ==>​​< ==>/home/myquery_test/log/push.log' < ==
在字符串中只需使用雙引號,或字符串分隔符轉義引號。

shell_exec('egrep -w \'2012-09-01|974\' /home/myquery_test/log/push.log'); 
shell_exec('egrep -w "2012-09-01|974" /home/myquery_test/log/push.log'); 
shell_exec("egrep -w '2012-09-01|974' /home/myquery_test/log/push.log"); 

而且,爲了避免沒有得到測試時會帶來這個問題對光線的警告和錯誤,請將您的INI到E_STRICT|E_ALL,並修復了警告,而不是忽視他們。 [打趣:你與完成後,你可能要考慮 accepting some answers] 我看你已經接受了很多東西,我打字這個帖子了:)

使用您的命令變量:

$output = shell_exec("tail -f | egrep '$number.*$date' /var/www/myquery_test/log/push.log"); 
$output = shell_exec('tail -f | egrep "'.$number.'.*'.$date.'" /var/www/myquery_test/log/push.log'); 
$output = shell_exec("tail -f | egrep \"$number.*$date\" /var/www/myquery_test/log/push.log"); 
+0

太棒了:)非常感謝! – sree127

+0

嘿,$ output = shell_exec('tail -f | egrep「$ number。* $ date」/var/www/myquery_test/log/push.log')不起作用。是因爲'|'嗎?符號??任何選擇? – sree127

+0

@ user1640534這不是因爲管道,這是因爲單引號。 PHP不解析單引號的內容。我將爲我的答案添加各種替代方案 –

相關問題