그래서 시나리오는 출력 버퍼링을 사용하는 응용 프로그램을 갖고 있으며 응용 프로그램에서 예상되는 결과 외에 일부 추가 데이터를 반환합니다. 예상되는 결과가 출력 버퍼에 추가되는 지점을 조작하여 애플리케이션의이 시점에서 출력 버퍼로 전송되는 데이터가 올바른지 확인하여 예상치 못한 추가 데이터가 다른 소스에서오고 있음을 확인할 수 있습니다.출력 버퍼에 대한 호출을 추적하는 방법
문제는 PHP 스크립트 태그 안에없는 길잃은 문자라고 생각합니다. 그러나 어떤 파일 (있는 경우)이 범인인지 알아낼 필요가 없습니다. 내가 아는 한, 여분의 데이터를 명시 적으로 echo
하고있는 파일이 포함될 수 있습니다.
출력 버퍼에 쓰는 파일의 파일 이름과 줄 번호를 캡처하려고했으나 기대했던 것보다 훨씬 어려웠습니다. 처음에는 ob_start
이 어디 있는지 알기 때문에 사용자 정의 output_callback
을 사용하려고했습니다. 여기에 몇 가지 이미 해봤됩니다
ob_start(function($string) {
return __FILE__ . ":" . __LINE__ . " : " $string;
});
하지 그것은 예상대로, 나는 나쁜 출발을 생각하지만, 오프 (에서 호출 된 경우).
ob_start(function($string) {
return print_r(debug_print_backtrace(), true) . " : " $string;
});
람다 함수를 파손하는 오류가 발생합니다.
ob_start(function($string) {
return var_dump(debug_backtrace()) . " : " $string;
});
결과가 서로 다릅니다. 나는 왜 그런지 완전히 모르겠다는 것을 인정할 것이다. 그러나 대부분의 경우 var_dump
은 빈 문자열 (아무 것도 없음)로 해석되었지만 어떤 경우에는 일부 추적 배열을 생성 한 것처럼 보였지만 ob_start 호출의 원점을 반영하는 것은 없었습니다 (다시 말해서, 실제로 echo
이라고 불리는 소스 파일은 추적의 일부가 아닙니다.
위의 내용에서 사용자 정의 output_callback
기능을 문제 해결 컨텍스트에 놓을 준비가되었을 때의 모양을 파악하기 위해 몇 가지 기본적인 테스트를 수행했습니다. 문제는 응용 프로그램에 따라 다르므로 출력 기능 (에코, 인쇄 등)을 차단하고 출력 호출의 출처에 대한 정보를 얻는 일반적인 방법을 찾으려고합니다. 코드가 출력 버퍼링을 사용하면 경우
내가이 문제 해결로 작동합니다 생각하지 않습니다 닫는 태그 결국 PHP 공백을 찾기
4
더 많은 테스트를 수행하면서 출력 버퍼가 플러시/검색 될 때마다 사용자 정의'ob_callback' 함수가 호출된다는 것을 알았습니다. 출력 버퍼가 업데이트 될 때마다 콜백을 트리거하는 방법이 있습니까? – Anthony
평소처럼 작동하도록'php : // output' 스트림을 오버라이드 할 수 있습니까? 아니면 타임 스탬프 나 다른 식별자를 오류 로그에 보내서 추적 파일과 조정할 수 있습니까? – Anthony