PHP의 출력 캐시는 중첩될 수 있습니다. 중첩 수준을 출력하려면 ob_get_level()을 사용하십시오.
테스트 결과 cli와 브라우저(PHP5.4)에서 출력 결과가 다른 것으로 나타났습니다.
설명서 지침은 다음과 같습니다.
ob_get_level()은 소멸자 내에서 항상 0을 반환합니다.
이는 소멸자가 호출되기 전에 출력 버퍼에 대한 가비지 수집이 이미 수행되었기 때문에 발생합니다
올바르게 출력하는 것도 매우 간단합니다.
ob_end_clean();
echo ob_get_level() //0
주제로 돌아가기:
ob_end_clean();
ob_start();
echo 'php1';//페이지에 출력되지 않습니다
$a = ob_get_level();
$b = ob_get_contents();//캐시된 결과를 가져와 변수에 할당
ob_clean();
ob_start();
echo 'php2';//페이지에 출력되지 않습니다
$c = ob_get_level();
$d = ob_get_contents();//캐시된 결과를 가져와 변수에 할당
ob_clean();
ob_start();
echo 'php3';//페이지에 출력되지 않습니다
$e = ob_get_level();
$f = ob_get_contents();//캐시된 결과를 가져와 변수에 할당
ob_clean();
echo 'level:'.$a.',ouput:'.$b.'
';
echo 'level:'.$c.',ouput:'.$d.'
';
echo 'level:'.$e.',ouput:'.$f.'
';
결과는 다음과 같습니다.
레벨:1,출력:php1
레벨:2,출력:php2
레벨:3,출력:php3
물론, 일정 수준의 버퍼링을 끄는 경우에는 다음과 같이 테스트해 보세요.
ob_end_clean();
ob_start();
echo 'php1';
$a = ob_get_level();
$b = ob_get_contents();
ob_clean();
ob_start();
echo 'php2';
$c = ob_get_level();
$d = ob_get_contents();
ob_end_clean(); //캐시를 지우고 닫습니다
ob_start();
echo 'php3';
$e = ob_get_level();
$f = ob_get_contents();
ob_clean();
echo 'level:'.$a.',ouput:'.$b.'
';
echo 'level:'.$c.',ouput:'.$d.'
';
echo 'level:'.$e.',ouput:'.$f.'
';
결과는 다음과 같습니다.
레벨:1,출력:php1
레벨:2,출력:php2
레벨:2,출력:php3