>  기사  >  백엔드 개발  >  프로그램이 여기에서 실행되기 전에 출력이 있는지 여부를 PHP에서 감지할 수 있는 방법이 있습니까?

프로그램이 여기에서 실행되기 전에 출력이 있는지 여부를 PHP에서 감지할 수 있는 방법이 있습니까?

WBOY
WBOY원래의
2016-10-10 11:56:081166검색

제가 header()의 문제를 해결하려는 것은 아니지만 프로그램에 이 요구 사항을 충족하는 함수가 있다는 점에 유의하세요.
오히려 헤더를 보내서 탐지할 수 있을지, 아니면 쿠키를 설정할 수 있을지 고민해봤습니다(동일한 사실입니다). 그러나 PHP에는 출력 버퍼링 메커니즘이 있어 이 접근 방식이 작동하지 않는다고 합니다. 이 메커니즘을 무자비하게 끄면 예상치 못한 다른 문제가 발생할 수 있고 모든 환경을 끌 수는 없기 때문입니다.
작동하더라도 쿠키는 항상 느리고 설정 후 즉시 얻을 수 없습니다. 헤더를 보내면 http 헤더에 쓸모없는 내용이 섞여 있게 됩니다.

그거요. . .

이 요구 사항을 충족할 수 있는 방법이 있나요?

(프로그램의 다른 부분의 코드를 수정하고 싶지 않습니다)

답글 내용:

제가 header()의 문제를 해결하려는 것은 아니지만 프로그램에 이 요구 사항을 충족하는 함수가 있다는 점에 유의하세요.
오히려 헤더를 보내서 탐지할 수 있을지, 아니면 쿠키를 설정할 수 있을지 고민해봤습니다(동일한 사실입니다). 그러나 PHP에는 출력 버퍼링 메커니즘이 있어 이 접근 방식이 작동하지 않는다고 합니다. 이 메커니즘을 무자비하게 끄면 다른 예상치 못한 문제가 발생할 수 있고 모든 환경을 끌 수는 없기 때문입니다.
작동하더라도 쿠키가 항상 느리고 설정 후 즉시 얻을 수 없습니다. 헤더를 보내면 http 헤더에 쓸모없는 내용이 섞여 있게 됩니다.

그거요. . .

이 요구 사항을 충족할 수 있는 방법이 있나요?

(프로그램의 다른 부분의 코드를 수정하고 싶지 않습니다)

headers_sent()을 사용하여 헤더가 전송되었는지 확인하면 요구 사항을 충족할 수 있습니까? 내용이 출력되었다면 헤더가 전송되어야 합니다.

PHP의 출력 메커니즘은 echo과 같은 명령어를 사용한 직후에 출력하지 않고 먼저 내용의 이 부분을 버퍼에 넣습니다. (소위 버퍼는 공유 메모리의 일부입니다.) 메모리가 가득 차거나 스크립트가 종료되면 PHP는 출력을 위해 이 메모리를 nginx 또는 apache에 전달합니다.
따라서 요구 사항을 충족하려면 버퍼에 콘텐츠가 있는지 확인하기만 하면 됩니다.
php는
ob_get_contents

과 같은 기능을 제공합니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.