저는 일부 사용자 지정 CMS를 기반으로 프로젝트를 진행하고 있는데, 여기서 사용자 지정 CMS는 호출 할 때 CMS 모듈에서 표시 블록을 반환합니다. 이 블록은 다른 파일에 정의한 사용자 정의 함수를 사용하여 그려집니다. 물론 ob_start()
은 이미 CMS 자체에 사용되어 출력 문자열을 보존합니다. 이제 보시다시피, 특정 조건 (예 : 날짜)이 충족 될 때만 내부 블록 (CMS 모듈에 의해 호출되는 함수에 의해 그려 짐) 중 일부가 그려집니다. 따라서 호출 된 함수가 아무 것도 울리지 않으므로 블록 (div
)의 외부 래퍼 만 그려지는 경우도 있습니다. 이제 함수가 어떤 것을 반향하는지 확인하여 해당 모듈을 편집하고 싶습니다.PHP에서 뭔가가 울려 있는지 확인하는 방법?
$temp = ob_get_contents();
ob_flush();
ob_start();
eval(trim($block->detail));//this is where custom function is called in module
$block = ob_get_contents();
ob_flush();
ob_start();
echo $temp;
if($block)
{
echo $start.$block.$end;//$start and $end contains div wrapper html
}
이유는이 VIEW
모듈이 서로 다른 조건에 따라 블록을 끌기 위해 동일한 구성 요소 내에서 여러 번 호출 될 것입니다 : 내 문제는 내가 이런 식으로 뭔가를 사용할 수 있다는 것입니다. 위의 작업을 수행하면서 이전에 echo 된 html을 (뷰 모듈이 호출되기 전에) 여러 번 그립니다. 나는 여전히 같은 HTML의 여러 번 울리는 것을 피하는 방법에 갇혀있다. 이 문제는 다소 복잡하지만 도움이 될 것입니다.
당신을 여러 개의 ob_start()를 함께 중첩시킬 수 있습니다! – Gerifield
공용 출력 버퍼링을 건너 뛰어도 될까요? – Sayed
예! http://php.net/manual/en/function.ob-start.php "출력 버퍼는 스택 가능합니다. 즉, 다른 ob_start()가 활성화되어있는 동안 ob_start()를 호출 할 수 있습니다 .ob_end_flush() 적절한 횟수를 반환합니다. 여러 출력 콜백 함수가 활성 상태 인 경우 출력은 중첩 순서에 따라 순차적으로 필터링됩니다. " – Gerifield