2011-11-29 2 views
14

디버깅을 위해 error_log()을 사용하는 일부 코드 작업 중입니다. 문제는 어떤 이유로 출력의 줄 바꿈이 모두 \n 문자열로 표시되므로 실제 줄 바꿈이 없으므로 복잡한 배열을 이해하는 것이 거의 불가능하다는 것입니다.
error_log 함수를 사용하여 var_exportprint_r을 모두 사용해 보았습니다. 둘 다 같은 결과를 가져 왔습니다. 전체적으로 \n 인 텍스트 블록이 흩어졌습니다. 나는 심지어 성공하려하지 않고 str_replace\n에서 PHP_EOL까지 시도했다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Mac OSX에서 리터럴 " n"문자열로 오류를 출력하는 PHP error_log

설명 : 콘솔 오류 로그 뷰어 TextEdit 및 터미널에 \n 문자열이 나타납니다.

편집 그냥 그래, 난 당신이 두 번 인용 \n 문자열을 그들에게 줄 바꿈으로 표시 할 필요가 있다고 알고 있어요 것을 사전에주의하고 싶었다. 그러나, 나는 print_r 또는 var_export (배열을 검사하기 위해) 출력을 다루고 있으므로, 이것이 정말로 도움이되지는 않습니다.

답변

5

분명히이 문제는 운영 체제와 관련이 없습니다.

PHP error log and newline chars이 ... 당신이 파일을 가리 키도록 데비안에 php.ini 파일에의 error_log 지시어를 변경 할 수 있어야한다 :이 질문을 참조하십시오. 이것이 정의되지 않은 경우, 여러 줄을 지원하지 않는 syslog를 통과합니다. 대안으로

+1

아파치가 error.log에 개행 문자를 쓰려면 쓰기 권한이 필요합니다. 그렇지 않으면 syslog가 error.log에 대신 쓰게됩니다. 아파치 오류 (내 선호도)에 대한 syslog 형식을 보존하려면 수정 또는 새 파일 'php-errors.log'를 수정하십시오. –

31

, 당신은 sed를 통해 '\ n을'을 대체/처리 할 수 ​​있습니다, 그래서 그들은 콘솔의 새로운 라인처럼 표시 :

리눅스

$ tail -f error_log | sed "s/\\\n/\\n/g" 

맥 OS X

$ tail -f error_log | sed "s/\\\n/^M^L/g" 

참고 : 맥 OS X에서 행의 끝은 CRLF입니다 (캐리지 리턴 줄 바꿈) 리눅스 시스템에서 그것의 경우에만 LF (줄 바꿈)

주 2 : 터미널에서 출력 ^M 맥 OS X에서, Control+V Control+M을 출력하고 ^L을 출력하려면 Control+V Control+L

+2

아주 똑똑한 해결 방법 :) –

+2

OSX 구문이 작동하지 않았습니다. – Tyguy7

+0

어떤 OSX 버전. 매버릭스? – eightyfive