PHP STDIN不会从管道的apache日志中获取内容


PHP STDIN doesnt get the content from piped apache log

我正在将 apache 日志管道到 php 文件,以便稍后将日志插入数据库。

在虚拟主机中,我有以下行:
ErrorLog "|/usr/bin/php /opt/waffy/log2db.php"

在 php 中,我有:

$stdin = fopen ('php://stdin', 'r');
ob_implicit_flush (true); // Use unbuffered output
$data = "";
while ($line = fgets ($stdin))
{
   $data .=  $line;
}
file_put_contents("/opt/waffy/log.log",$data);

php 被调用,但文件/opt/waffy/log.log为空。

UPDATE1

我想我这样做的时候有一点进步 chmod +X log2db.php没有什么意外,但是当我用x替换X时,我停止了ERR_CONNECTION_REFUSED

但是文件/opt/waffy/log.log未创建...

该脚本与 Apache 管道日志脚本的预期不匹配,因此可能未定义确切的输出内容。一个最小的 PHP 示例是:

#!/usr/bin/php
<?php
$stdin = fopen ('php://stdin', 'r');
ob_implicit_flush (true); // Use unbuffered output
while ($line = fgets ($stdin))
{
   print $line;
}

在阿帕奇中具有以下恩蒂

ErrorLog "|/var/www/log.php >>/var/www/log.log"

不要忘记给日志.php正确的权限

chmod +x log.php

在我的示例中,Apache 需要写入目录/var/www/的权限。

有关更多详细信息,请参阅 http://www.sudleyplace.com/pipederrorlogs.html。首先让它工作,这样它就简单地输出它收到的所有内容,然后修改数据并添加功能。

重要

你必须通过以下方式启动 apache

/etc/init.d/apache2 restart 
/etc/init.d/apache2 start

而不是通过

service apache2 start
service apache2 restart