首页 > 解决方案 > PHP 'exec' 命令不能与 'awk' 命令一起正常工作

问题描述

我正在使用以下 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,但我仍然必须以某种方式处理这个问题。

标签: phplinuxawkexec

解决方案


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

谢谢大家的建议。


推荐阅读