Этот вопрос относится к вопросу, найденному здесь:
Найдите 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. так что вы можете читать и писать в него, но не выполнять, так как это просто файл журнала