неправильная конфигурация php.ini - PullRequest
1 голос
/ 01 сентября 2009

Я немного сузил свою проблему. Когда я запускаю "error_log('hey');" из командной строки, он сбрасывает в STDOUT. Но если я запускаю тот же код из моего веб-интерфейса (Apache), он помещает ошибку в журнал ошибок. Я проверил оба ini-файла, тот, который использует Apache, и тот, что находится в / private / etc (я на Mac с MAMP) Обе переменные error_log указывают на одно и то же место. И когда я бегу

echo ini_get('error_log');

Значение в командной строке совпадает со значением в браузере. Какая настройка ini здесь неверно настроена? Это довольно раздражает, так как нарушается не только регистрация ошибок. Это также влияет на мои пути включения: /

Ответы [ 4 ]

1 голос
/ 01 сентября 2009

Чего ты пытаешься достичь? В apache stderr входит в error_log ... документацию по функции error_log() , в которой говорится, что по умолчанию он регистрируется в журнале ошибок сервера. Если вы хотите войти в другой пункт назначения, используйте параметры message_type и destination.

0 голосов
/ 01 сентября 2009

Причиной отображения error_log в консоли, а не в файле журнала, может быть проблема с разрешениями - я действительно не знаю MacOS, но, поскольку он основан на UNIX, я предполагаю, что:

  • Файл журнала, используемый Apache, принадлежит конкретному пользователю
  • При запуске сценария из консоли вы не являетесь этим пользователем, и у вас нет прав на запись в файл журнала

Если он не может войти в файл журнала, я полагаю, что error_log записывает в стандартный вывод ошибок (stderr), который обычно является консолью.


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

похоже, что PHP регистрирует в stderr, если он не могу записать в файл журнала. команда Линия PHP возвращается к stderr, потому что файл журнала (обычно) только доступный для записи веб-сервером.


Кроме того, убедитесь, что log_errors и display_errors правильно настроены в файле php.ini, используемом в CLI:

log_errors логический

Сообщает, есть ли сообщения об ошибках скрипта должен быть зарегистрирован к ошибке сервера журнал или error_log. Эта опция, таким образом, конкретный сервер.

И:

display_errors string

Это определяет, должны ли ошибки быть напечатанным на экране как часть вывод или если они должны быть скрыты от пользователя.

Значение "stderr" отправляет ошибки stderr вместо stdout.

0 голосов
/ 01 сентября 2009

Соответствующая настройка ini здесь display_errors.

Из командной строки значение On сбросит ошибки до STDOUT; stderr перенаправит их в STDERR, а Off подавит их. Для Apache только On и Off имеют смысл.

Скорее всего, в INI-файле для Apache display_errors = Off, а в / private / etc - display_errors = On.

Директива error_log сообщает PHP, куда регистрировать ошибки, но также требует, чтобы log_errors было установлено на On, иначе это не имеет никакого эффекта. (Опять же, есть вероятность, что INI-файл в / private / etc имеет log_errors = Off.)

0 голосов
/ 01 сентября 2009

Возможно, вам нужно отредактировать следующий файл конфигурации:

/Applications/MAMP/conf/php5/php.ini

MAMP использует собственный сервер Apache, который по умолчанию работает на порту 8080. Возможно, вы захотите отключить сервер Apache в Системных настройках -> Общий доступ.

Также попробуйте запустить файл PHP, содержащий:

<?php phpinfo(); ?>

Это скажет вам, какой php.ini на самом деле читается Apache.

Будет

...