Журнал ошибок PHP и символы новой строки

Каков параметр конфигурации PHP, который разрешает или предотвращает экранирование новых строк в выводе отладки?

В двух разных установках (ноутбук разработчика с MAMP/OSX и сервер разработчика с Debian) я вижу разные результаты в журналах ошибок при отладке.

error_log(print_r(array(1,2,4),1));

В Debian это отображается в /var/log/apache2/error.log как

[Thu Jul 30 11:32:34 2009] [error] [client 118.93.246.104] Array\n(\n    [0] => 1\n    [1] => 2\n    [2] => 4\n)\n, referer: http://dev.example.org/

В OSX это отображается в /Applications/MAMP/logs/php_error_log как

[30-Jul-2009 11:34:00] Array
(
    [0] => 1
    [1] => 2
    [2] => 4
)

Я предпочитаю способ отладки MAMP (кроме перемещения файлов журналов в каталог /Applications).

Спасибо!


person Chris Burgess    schedule 29.07.2009    source источник


Ответы (2)


Крис, вы должны иметь возможность изменить директиву error_log в вашем php.ini в Debian, чтобы она указывала на файл. Если это не определено, он будет проходить через системный журнал, который не поддерживает несколько строк.

Подробности:

Функция error_log

Директива error_log

person hobodave    schedule 30.07.2009
comment
Следует также упомянуть, что если пользователь, под которым работает Apache, не может записать в указанный файл error_log (из-за проблем с правами доступа), он также перейдет в syslog или журнал Apache. - person Pistos; 19.08.2009

Проблема возникает, когда процесс Apache не может записывать в файл error_log, поэтому вместо этого в файл записывается системный журнал. Системный журнал портит разрывы строк.

Так что просто сделайте:

chmod 777 error.log

Это должно решить вашу проблему.

person regexp    schedule 10.05.2012
comment
Будьте осторожны с настройкой go+x для файла, в который злоумышленники могут писать. Вместо этого установите группу для чтения/записи и владения группой для пользователя веб-сервера. Будьте осторожны с изменением разрешений при ротации журнала (настройка chmod в конфигурации logrotate и т. д.). - person Chris Burgess; 14.11.2012
comment
Согласитесь, что это несколько небезопасно (хотя я надеюсь, что ваши файлы журналов недоступны через веб-сервер...), но это хороший способ для локальной среды разработки, и он указывает на ключевую проблему, заключающуюся в том, что разрешения log может помешать Apache писать в него, заставляя вместо этого использовать syslog. - person Jon z; 21.04.2013
comment
Мое собственное решение было больше похоже на рекомендацию Криса Берджесса: я добавил своего пользователя в группу, в которой работает веб-сервер, изменил права доступа к файлу, чтобы разрешить полный доступ к группе, и изменил владельца файла на пользователя/группу, в которой работает веб-сервер. т.е. на OSX с предустановленным Apache: sudo dseditgroup -o edit -a myusername -t user _www; sudo chown _www:_www /var/log/apache2/error_log; sudo chmod 770 /var/log/apache2/error_log; - person Jon z; 21.04.2013
comment
Не удается заставить это работать: запуск Ubuntu 16.04, Apache2 как www-data (пользователь и группа), конфигурация vhost с ErrorLog ${APACHE_LOG_DIR}/myapp.error.log, /var/www/apache2 с 755 и myapp.error.log принадлежит пользователю www-data (и группе). Верхние разрешения testwise установлены на 777 для этого файла. Апач перезапустил. Все еще выгружаю \n в этот файл. Что мне не хватает, есть идеи? - person robbash; 03.09.2016