0

PHPでシェルコマンドを実行し、ブラウザに表示したいと考えています。とにかくそうすることがありますか?ここに私の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 に答える