출력 버퍼링 제어에 PHP를 사용하는 경우 개발자는 종종 OB_START () 를 통해 하나 이상의 캐시 핸들러를 등록합니다. 그러나 여러 모듈이 프로젝트에서 동일한 버퍼 처리 기능을 반복적으로 등록하면 출력이 여러 번 처리되어 성능에 영향을 미치며 논리적 오류가 발생할 수 있습니다.
이 중복 등록을 피하기 위해 OB_LIST_HANDLERS () 기능을 사용하여 현재 등록 된 모든 출력 버퍼링 프로그램을보고 실제 조건에 따라 판단 및 제어를 할 수 있습니다.
OB_LIST_HANDLERS ()는 현재 활성화 된 모든 출력 버퍼 핸들러의 이름을 포함하는 배열을 반환하기 위해 PHP가 제공하는 내장 기능입니다. OB_START ()를 호출하고 콜백 함수로 전달할 때마다 기능 이름이 버퍼 처리 스택에 추가됩니다.
array(
[0] => default output handler,
[1] => gzhandler
)
응용 프로그램의 여러 구성 요소가 다음 진술을 호출한다고 상상해보십시오.
ob_start('gzhandler');
결과적으로 출력 내용이 Gzhandler 에 의해 여러 번 압축되어 브라우저가 올바르게 구문 분석되지 않거나 내용이 비정상적 일 수 있습니다.
이를 방지하기 위해 OB_LIST_HANDLERS ()를 사용하여 새 출력 버퍼링 기능을 등록하기 전에 이미 존재하는지 확인할 수 있습니다.
다음은 GZHANDLER의 중복 등록을 피하는 방법을 보여주는 실제 코드 예입니다.
<?php
// 핸들러가 등록되었는지 확인하십시오
function start_unique_ob_handler($handlerName) {
$handlers = ob_list_handlers();
if (!in_array($handlerName, $handlers)) {
ob_start($handlerName);
} else {
// 로그 또는 출력 디버깅 정보를 기록 할 수 있습니다
error_log("출력 버퍼 핸들러 '$handlerName' 등기,중복 등록을 건너 뜁니다。");
}
}
// 우리가 사용하고 싶다고 가정합니다 gzip 압축 출력
start_unique_ob_handler('gzhandler');
// 출력 내용
echo "우리 사이트에 오신 것을 환영합니다:https://gitbox.net/page";
?>
GZHANDLER가 이전에 등록되지 않은 경우 기능이 추가됩니다. 그렇지 않으면 안전하게 건너 뜁니다. 따라서 반복적 인 압축을 피할 수 있습니다.
모듈 식 시스템 (예 : 플러그인 아키텍처)에서 출력 버퍼링을 사용하는 경우 자신의 버퍼 등록 기능을 캡슐화하고 OB_LIST_HANDLERS ()를 사용하여 통합 방식으로 확인하는 것이 좋습니다.
이 프로젝트에 여러 개발자가 함께 일하는 경우 코드 검토에서 OB_START () 의 빈도 및 위치에주의를 기울이는 것이 좋습니다.
참고 : PHP의 기본 출력 핸들러는 "기본 출력 핸들러" 이며 사용자 정의 핸들러에 속하지 않지만 목록에도 나타납니다.
OB_LIST_HANDLERS ()를 사용하는 것은 PHP 애플리케이션에서 출력 버퍼 핸들러의 반복 등록을 방지하는 데 도움이되는 간단하지만 매우 효과적인 방법입니다. 이 기술적 수단을 통해 프로그램의 견고성과 출력 컨텐츠의 일관성을 향상시킬 수 있습니다. 실제 개발에서 버퍼링을 등록하기 전에 점검 습관을 개발하는 것은 고품질 PHP 응용 프로그램을 구축하는 데 중요한 부분입니다.
출력 버퍼링에 대한 제어 팁에 대한 자세한 내용을 보려면 공식 문서를 참조하거나 웹 사이트 https://gitbox.net/php-ob handling을 방문하여 더 많은 예와 지침을 참조하십시오.