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

时间:2016-03-04 05:34:42

标签: php apache

我正在将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 ...

1 个答案:

答案 0 :(得分:1)

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

#!/usr/bin/php

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

随着apache中的以下内容

ErrorLog "|/var/www/log.php >>/var/www/log.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