通过php执行shell命令并在浏览器中显示它?

时间:2012-10-05 10:12:48

标签: php linux shell grep

我想通过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命令不工作?

1 个答案:

答案 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");