1

美好的一天我在按下按钮时遇到问题我需要搜索文件并以逗号分隔的文本输出结果。PHP 似乎不喜欢大括号,据我所知,我需要使用 exec(),但无济于事,因为我收到的错误是“语法错误,意外的 T_LNUMBER,期待 T_VARIABLE 或'$'”如果答案很明显,对php还是很抱歉!任何信息都会有帮助,谢谢

<html>
<body>
<h1>Linux Command Test</h1>

<form method="POST" action="">
<input type="submit" id="submit" name="submit" value="Submit"/>
</form>

<?php
 if (isset($_POST['submit']))
  {
     $output = exec('grep -i hello test.txt | awk -v OFS=, '{\$1=\$1;print}' > newtest.txt');
     echo "<pre>$output</pre>";
  }
 ?>


</body>
</html>
4

3 回答 3

3

尝试逃避 $

grep -i hello test.txt | awk -v OFS=, '{\$1=\$1;print}' > newtest.txt
于 2013-05-07T12:31:47.497 回答
2
$output = exec('grep -i hello test.txt | awk -v OFS=, '{\$1=\$1;print}' > newtest.txt');

应该:

$output = exec('awk -v OFS=, \'/hello/i {$1=$1;print}\' test.txt > newtest.txt');

您需要转义引号,否则它们会分隔 PHP 字符串。您不需要$在 PHP 中的单引号字符串中转义。awk如果要在 PHP 变量中捕获输出,则不应将输出重定向到文件。

并且不需要管道grepawk,因为awk有内置的模式匹配。

于 2013-05-07T13:02:04.030 回答
0

您可以在 PHP 中使用许多函数来调用外部应用程序exec()system()http ://www.php.net/manual/en/ref.exec.php但请注意,让您使用它们取决于管理员。在大多数共享主机上,这些功能被禁用

于 2013-05-07T12:31:18.580 回答