Назад | Перейти на главную страницу

Как передать вывод PHP mail.log в скрипт

Я регистрирую весь вывод почты php, используя настройку mail.log в php.ini. Вместо того, чтобы записывать в файл, я хочу, чтобы данные журнала отправлялись в сценарий для синтаксического анализа в реальном времени для создания предупреждений.

Я пробовал: mail.log = "| /path/to/script.php"

в надежде, что это может работать как / etc / aliases, но это не сработает. Любые идеи приветствуются :-)

Система - это Postfix на Debian.

Одно из возможных решений - использовать оболочку для команды sendmail, например, вы можете создать такой сценарий:

#!/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 для установки некоторых переменных PHP в среду оболочки:

<?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

Я считаю, что с этим решением вы должны использовать базу данных для запоминания отсканированных записей