PHP에서 OB_LIST_HANDLERS 및 OB_FLUSH는 출력 버퍼링과 관련된 두 가지 일반적으로 사용되는 기능입니다. OB_LIST_HANDLERS는 현재 등록 된 출력 버퍼 프로세서를 반환하는 데 사용되며 OB_FLUSH는 출력 버퍼를 새로 고치고 내용물을 브라우저에 출력하는 데 사용됩니다. 이 두 기능은 매우 유용하지만 조합으로 사용될 때 몇 가지 문제가있을 수 있습니다. 이 기사는 일반적인 문제를 탐구하고 해결책을 제공합니다.
OB_FLUSH 기능을 사용하는 경우 즉시 브라우저에 대한 콘텐츠 출력을 볼 수없는 상황에 직면 할 수 있습니다. 이는 일반적으로 출력 버퍼에 다중 버퍼 프로세서가 있고 OB_Flush는 다른 버퍼의 내용에 영향을 미치지 않고 전류 버퍼 만 플러시하기 때문입니다.
이 문제를 해결하려면 OB_FLUSH를 사용할 때 버퍼의 계층 구조를 이해하십시오. OB_LIST_HANDLERS 함수를 사용하여 현재 등록 된 모든 출력 버퍼 프로세서를 하나씩 새로 고칠 수 있습니다. 예를 들어, 다음 코드를 따라 모든 버퍼를 얻고 새로 고칠 수 있습니다.
// 현재 등록 된 출력 버퍼 프로세서를 표시합니다
$handlers = ob_list_handlers();
foreach ($handlers as $handler) {
ob_flush();
}
이 방법은 모든 버퍼 내용이 출력 될 수 있도록합니다.
때로는 OB_LIST_HANDLERS가 호출되면 빈 배열이 반환 될 수 있습니다. 즉, 출력 버퍼 프로세서가 현재 활성화되지 않음을 의미합니다. 출력 버퍼가 활성화되지 않았거나 출력 버퍼가 지워 졌기 때문일 수 있습니다.
OB_LIST_HANDLERS를 호출하기 전에 먼저 출력 버퍼링이 활성화되어 있는지 확인하십시오. 예를 들어 OB_START ()를 사용하여 출력 버퍼링을 활성화 할 수 있습니다.
// 출력 버퍼링을 활성화합니다
ob_start();
// 일부 작업을 수행하십시오
// 모든 현재 출력 버퍼 프로세서를 나열하십시오
$handlers = ob_list_handlers();
if (empty($handlers)) {
echo "没有출력 버퍼링을 활성화합니다处理器";
} else {
print_r($handlers);
}
위의 코드는 OB_LIST_HANDLERS를 호출하기 전에 하나 이상의 버퍼가 실행되도록합니다.
OB_FLUSH 및 OB_END_FLUSH는 모두 출력 버퍼링의 플러시 작동을 포함합니다. OB_FLUSH는 현재 버퍼를 플러시하는 반면 OB_END_FLUSH는 현재 버퍼를 플러시 할뿐만 아니라 현재 버퍼를 닫고 버퍼 컨텐츠를 지우는 것입니다. 코드 에서이 두 기능을 혼합 할 때 버퍼가 예상대로 닫히거나 출력되지 않을 수 있습니다.
각 기능이 수행하는 작업을 이해하고 필요하지 않을 때는 혼합을 피하십시오. 일반적으로 OB_FLUSH는 출력을 새로 고침하는 데 사용되며 버퍼를 종료하고 닫아야 할 때 OB_END_FLUSH가 사용됩니다. 샘플 코드 :
// 출력 버퍼링을 활성화합니다
ob_start();
// 일부 내용을 출력하십시오
echo "Hello, World!";
// 버퍼 컨텐츠를 새로 고침합니다
ob_flush();
// 버퍼를 끝내고 청소하십시오
ob_end_flush();
OB_LIST_HANDLERS를 사용하는 경우 버퍼에 일부 URL이 잘못 표시되는 것을 알 수 있습니다 (예 : 도메인 이름이 업데이트되지 않음). URL의 도메인 이름이 잘못된 값으로 하드 코딩되기 때문에 일반적으로 그렇습니다.
str_replace 함수를 사용하여 URL의 도메인 이름을 바꿀 수 있습니다. 예를 들어 모든 URL이 올바른 도메인 이름을 가리키도록하십시오.
// 원본을 가정합니다URL이전 도메인 이름을 포함합니다
$url = "http://example.com/somepath";
// 사용str_replace도메인 이름을 대체하십시오gitbox.net
$new_url = str_replace("example.com", "gitbox.net", $url);
echo $new_url; // 산출 http://gitbox.net/somepath
이런 식으로, 출력 버퍼링 된 컨텐츠에서 모든 URL이 올바른 도메인 이름을 가리 키도록합니다.
OB_LIST_HANDLERS 및 OB_FLUSH 는 PHP에서 매우 유용한 출력 버퍼링 관련 기능이지만 그 조합은 몇 가지 일반적인 문제에 직면 할 수 있습니다. 버퍼의 처리 로직을 이해하고 이러한 기능을 올바르게 사용함으로써 이러한 문제를 효과적으로 피할 수 있습니다. 가장 중요한 것은 URL을 처리 할 때 잘못된 링크를 피하기 위해 도메인 이름이 올바르게 업데이트되었는지 확인하십시오.