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

Вывести почтовые вызовы php в файл журнала

Этот вопрос относится к вопросу, найденному здесь:

Найдите php-скрипт, который отправляет письма

Пытаюсь сделать то же самое, но не могу заставить журнал выводить то, что мне нужно. Не слишком опытен с ошибкой сервера, и в идеале я бы опубликовал свое продолжение по исходному вопросу или PM adam, чтобы узнать, нашел ли он когда-либо решение, но похоже, что ошибка сервера не работает таким образом. Я могу отправить «ответ», но это определенно не то.

У меня есть сценарий, расположенный в / usr / local / bin / sendmail-php-logged, со следующим:

#!/bin/sh
logger -p mail.info sendmail-php: site=${HTTP_HOST}, client=${REMOTE_ADDR}, script=${SCRIPT_NAME}, filename=${SCRIPT_FILENAME}, docroot=${DOCUMENT_ROOT}, pwd=${PWD}, uid=${UID}, user=$(whoami)

/usr/sbin/sendmail -t -i $*

Это ведение журнала в / var / log / maillog, но, как упоминает Адам в своем вопросе, ни одна из переменных сервера не работает. Вывод, который я получаю:

Oct  4 12:16:21 fluke logger: sendmail-php: site=, client=, script=, filename=, docroot=, pwd=/var/www/html/aro_chroot/sites/arocms, uid=48, user=apache
Oct  4 12:16:21 fluke logger: sendmail-php: site=, client=, script=, filename=, docroot=, pwd=/var/www/html/aro_chroot/sites/arocms, uid=48, user=apache
Oct  4 12:17:03 fluke logger: sendmail-php: site=, client=, script=, filename=, docroot=, pwd=/var/www/html/aro_chroot/sites/arocms, uid=48, user=apache
Oct  4 12:17:05 fluke logger: sendmail-php: site=, client=, script=, filename=, docroot=, pwd=/root, uid=0, user=root
Oct  4 12:17:11 fluke logger: sendmail-php: site=, client=, script=, filename=, docroot=, pwd=/var/www/html/aro_chroot/sites/arocms, uid=48, user=apache
Oct  4 12:17:14 fluke logger: sendmail-php: site=, client=, script=, filename=, docroot=, pwd=/root, uid=0, user=root
Oct  4 12:17:29 fluke logger: sendmail-php: site=, client=, script=, filename=, docroot=, pwd=/root, uid=0, user=root
Oct  4 12:17:41 fluke logger: sendmail-php: site=, client=, script=, filename=, docroot=, pwd=/root, uid=0, user=root

Идентификатор пользователя, текущий пользователь и pwd работают, вероятно, потому, что они являются глобально доступными ресурсами сценария, а не специфичными для PHP, как все остальные. Я пробовал использовать другие серверные переменные в соответствии с инструкциями labradort, но без радости.

Вот несколько примеров тестов:

logger -p mail.info sendmail-php SCRIPT_NAME: ${SCRIPT_NAME}
logger -p mail.info sendmail-php SCRIPT_FILENAME: ${SCRIPT_FILENAME}
logger -p mail.info sendmail-php PATH_INFO: ${PATH_INFO}
logger -p mail.info sendmail-php PHP_SELF: ${PHP_SELF}
logger -p mail.info sendmail-php DOCUMENT_ROOT: ${DOCUMENT_ROOT}
logger -p mail.info sendmail-php REMOTE_ADDR: ${REMOTE_ADDR}

logger -p mail.info sendmail-php SCRIPT_NAME: $SCRIPT_NAME
logger -p mail.info sendmail-php SCRIPT_FILENAME: $SCRIPT_FILENAME
logger -p mail.info sendmail-php PATH_INFO: $PATH_INFO
logger -p mail.info sendmail-php PHP_SELF: $PHP_SELF
logger -p mail.info sendmail-php DOCUMENT_ROOT: $DOCUMENT_ROOT
logger -p mail.info sendmail-php REMOTE_ADDR: $REMOTE_ADDR

И вывод:

Oct  4 12:58:02 fluke logger: sendmail-php SCRIPT_NAME:
Oct  4 12:58:02 fluke logger: sendmail-php SCRIPT_FILENAME:
Oct  4 12:58:02 fluke logger: sendmail-php PATH_INFO:
Oct  4 12:58:02 fluke logger: sendmail-php PHP_SELF:
Oct  4 12:58:02 fluke logger: sendmail-php DOCUMENT_ROOT:
Oct  4 12:58:02 fluke logger: sendmail-php REMOTE_ADDR:

Oct  4 12:58:02 fluke logger: sendmail-php SCRIPT_NAME:
Oct  4 12:58:02 fluke logger: sendmail-php SCRIPT_FILENAME:
Oct  4 12:58:02 fluke logger: sendmail-php PATH_INFO:
Oct  4 12:58:02 fluke logger: sendmail-php PHP_SELF:
Oct  4 12:58:02 fluke logger: sendmail-php DOCUMENT_ROOT:
Oct  4 12:58:02 fluke logger: sendmail-php REMOTE_ADDR:

Я использую php 5.3.10. К сожалению, register_globals включен для совместимости с устаревшими системами, но вы не думаете, что это может привести к тому, что переменные среды перестанут работать.

Если кто-нибудь подскажет, почему это может не сработать, я буду очень счастлив :)

Возможно, мне что-то не хватает, но я не вижу ничего в документации PHP, в которой говорится, что среда будет создана. Почему бы вам просто не установить в своем логгере что-то вроде logger -p mail.info thelog $* что даст вам параметры, которые передаются в sendmail? Или, может быть, просто включил mail.log

Если у вас PHP 5.3 и выше, откройте свой php.ini и найдите следующую строку

mail.log =

Запишите полный путь к файлу, который вы хотите вести журнал, и дайте ему доступ chmod 664. так что вы можете читать и писать в него, но не выполнять, так как это просто файл журнала