我想通过php执行shell命令并在浏览器中显示它。反正有没有这样做? 这是我的PHP代码:[test.php]
<?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 :(得分:0)
egrep
命令无效,因为您使用单引号作为字符串常量分隔符:'egreep -w'
&lt; ==&gt; 2012-09-01|974'
&lt; ==&gt; /home/myquery_test/log/push.log'
&lt; ==
只需在字符串中使用双引号,或者使用字符串分隔符 OR 来转义引号。
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] 我在你输入这篇文章时看到你已经接受了很多:)< / em>的
在命令中使用变量:
$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");