PHP的“ exec”命令不能与“ awk”命令一起正常使用

时间:2018-07-31 14:49:01

标签: php linux awk exec

我正在使用以下php代码:

<?php 
    exec ("awk -F'|' -vOFS='|' '(NR==FNR){a[$1]=$0; next}{if(a[$1]){print $2,a[$1]}}' /var/log/apache2/forensic_log.log /var/log/apache2/access.log | cut -d'|' -f1,3- > i/content/other/LOG_FILE.log"); 
?> 

它与日志文件比较,如果日志ID匹配,则串联内容并将其输出到LOG_FILE.log。结果,我应该在LOG_FILE.log

中有类似的内容
[14/May/2018:06:37:07 +0300]|HEAD /favicon.ico HTTP/1.0|Host:host.com|Connection:close

这段代码可以正常工作很长时间,但是现在看来它在某个地方失败了,因为LOG_FILE.log为空。

  1. 我检查了脚本中提到的路径-它们是正确的。
  2. 使用两个日志文件在本地尝试脚本-它可以工作并向LOG_FILE.log产生预期的输出
  3. 当我们将apache2更新为“ Apache / 2.4.34”时,似乎出现了这个问题。
  4. 向文件添加权限: LOG_FILE.log-777 执行PHP代码的文件-664 access.log-640 forensic_log.log-640

添加简化代码:

<?php
  $output=exec("awk -F'|' -vOFS='|' '(NR==FNR){a[$1]=$0; next}{if(a[$1]){print $2,a[$1]}}' /var/log/apache2/forensic_log.log /var/log/apache2/access.log"); 
  echo $output;
?>

此代码不回显任何内容。

对于这样麻烦的问题,我感到抱歉,但是我不是代码的作者,也不熟悉PHP,但是我仍然必须以某种方式来解决这个问题。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题的原因并解决了。该问题与“ awk”命令无关,对此感到抱歉。问题在于Apache日志文件的权限,一旦我修复它,原始代码就会开始产生预期的输出。

感谢大家的建议。