php - 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 是空白的。
- 我检查了脚本中提到的路径 - 它们是正确的。
- 使用两个日志文件在本地尝试脚本 - 它可以工作并产生预期的输出到 LOG_FILE.log
- 当我们将 apache2 更新为 'Apache/2.4.34' 时似乎出现了问题
- 向文件添加权限: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,但我仍然必须以某种方式处理这个问题。
解决方案
我终于找到了问题的原因并解决了它。该问题与“awk”命令无关,对此表示抱歉。问题在于对 apache 日志文件的权限,一旦我修复了它,原始代码就开始产生预期的输出。
谢谢大家的建议。
推荐阅读
- swift - 我在 SpriteKit 中的 SKVideoNode 在场景加载时自动播放
- google-cloud-platform - 如何从另一个 CF 中请求 Google Cloud Function (CF)?
- c++ - 来自 Voronoi 的 Delaunay with boost:缺少具有非积分点坐标的三角形
- java - 错误:SQLiteLog:(1)没有这样的列:nometprenom
- google-maps-android-api-2 - 如何取消谷歌地图的任何移动?
- javascript - ReferenceError mongodb MapReduce
- c - 如何在 C 中安全地声明 16 位字符串文字?
- git - 更改旧 git 标签的版本控制方案
- c - 在 ppm 文件中写入字符/文本
- laravel - php artisan migrate 命令错误:Illuminate\Database\QueryException:SQLSTATE[HY000] [2002] 连接被拒绝