我使用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,你必须使用数据库记住扫描的条目