Вывод строки PHP error_log прерывается как буквальные "\n" строки на Mac OSX
Я работаю над кодом, который использует error_log()
для отладки. Проблема в том, что по какой-то причине все разрывы строк на выходе появляются как буквальные строки \n
, поэтому нет реального разрыва строки (что делает невозможным понимание сложных массивов).
Я попытался использовать как var_export
, так и print_r
с помощью функции error_log
, и оба привели к одному и тому же результату: блок текста с \n
, разбросанный по всему. Я даже попытался сделать str_replace
\n
до PHP_EOL
без успеха. Что я делаю неправильно?
Чтобы уточнить: строки \n
отображаются в средстве просмотра журнала ошибок Console, TextEdit и терминале.
ИЗМЕНИТЬ
Просто хочу отметить заранее, что да, я знаю, что вам нужно дважды указывать строки \n
, чтобы они отображались как разрывы строк. Тем не менее, я имею дело с выводами из print_r
или var_export
(для проверки массива), поэтому это не помогает мне (я думаю?).
Ответы
Ответ 1
По-видимому, эта проблема не зависит от вашей операционной системы. См. Этот вопрос: Журнал ошибок PHP и символы новой строки
... вы должны иметь возможность изменить директиву error_log в php.ini на Debian, чтобы указать на файл. Если это undefined, он будет проходить через syslog, который не поддерживает несколько строк.
Ответ 2
В качестве альтернативы вы можете обработать/заменить '\n' с помощью sed
, чтобы они отображались как новые строки в консоли:
Linux
$ tail -f error_log | sed "s/\\\n/\\n/g"
Mac OS X
# WARNING - don't just copy+paste (see comment below)
$ tail -f error_log | sed "s/\\\n/^M^L/g"
Примечание. В Mac OS X конец строки - CRLF
(перевод строки каретки), когда в системе LINUX - только LF
(перевод строки)
Примечание 2: В Mac OS X для вывода ^M
в Терминале нажмите Control+V Control+M
, для вывода ^L
нажмите Control+V Control+L