如何将PHP mail.log输出传递给脚本

我使用php.ini中的mail.log设置logging所有php邮件输出。 我不想login到一个文件,我想将日志数据发送到一个脚本进行实时分析,以提高警报。

我试过了:mail.log =“| /path/to/script.php”

希望它可以像/ etc / aliases一样工作,但这是行不通的。 任何想法非常感谢:-)

系统是Debian上的Postfix。

一个可能的解决scheme是使用sendmail命令的包装,例如你可以创build一个如下所示的脚本:

#!/bin/sh # file: sendmail-wrapper-php # env vars: ${HTTP_HOST}, ${REMOTE_ADDR}, ${SCRIPT_NAME}, ${PWD}, ${UID} # .... # check and alert #send email. /usr/sbin/sendmail -t -i $* 

php_set_envs.php来设置一些PHPvariables到shell环境:

 <?php putenv("HTTP_HOST=".@$_SERVER["HTTP_HOST"]); putenv("SCRIPT_NAME=".@$_SERVER["SCRIPT_NAME"]); putenv("SCRIPT_FILENAME=".@$_SERVER["SCRIPT_FILENAME"]); putenv("DOCUMENT_ROOT=".@$_SERVER["DOCUMENT_ROOT"]); putenv("REMOTE_ADDR=".@$_SERVER["REMOTE_ADDR"]); 

现在,您强制所有客户使用此包装脚本,而不是原始的/usr/sbin/sendmail二进制文件。 修改你的php.ini并添加/更改:

 sendmail_path = /usr/sbin/sendmail-wrapper-php auto_prepend_file = /www/php/php_set_envs.php 

确保它具有正确的访问权限:

 $ chown root /usr/sbin/sendmail-wrapper-php $ chmod 755 /usr/sbin/sendmail-wrapper-php 

我希望这个帮助。

使用cron执行每分钟扫描mail.log文件的脚本。

 //every minute * * * * * * php -f /path/to/script.php 

我用这个解决scheme,你必须使用数据库记住扫描的条目