0

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

4

1 回答 1

0

egrep命令不起作用,因为您使用单引号作为字符串常量分隔符:'egreep -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');
shell_exec("egrep -w  '2012-09-01|974' /home/myquery_test/log/push.log");

并且,为了避免在测试时没有收到可能导致此问题的警告和错误,请将您的 ini 设置为E_STRICT|E_ALL,并修复警告,而不是忽略它们。[戏弄:在你完成之后,你可能想考虑接受一些答案]我看到你在我写这篇文章的时候已经接受了很多:)

在命令中使用变量:

$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");
于 2012-10-05T10:24:20.557 回答