PHP가 출력을 시작하는지 확인

6856 단어 PHP
PHP에서 헤더()를 사용할 때 echo나 print 등을 통해 출력을 시작했을 때 오류가 발생할 수 있습니다(Warning).헤더 () 전에 출력이 시작되었는지 판단하기 위해 조사를 진행했습니다.
이렇게 하면 버퍼링이 돼서 틀리지 않을 거예요.
no_err.php
<?php
echo "start".PHP_EOL;
header('Content-Type: text/plain');
echo "end".PHP_EOL;
//結果
//start
//end
버퍼 닫기플래시 ()는 헤더를 보내고 헤더 ()는 오류가 발생합니다.
err.php
<?php
echo "start".PHP_EOL;
ob_flush();//出力開始
header('Content-Type: text/plain');
echo "end".PHP_EOL;
//結果
//start
//Warning: Cannot modify header information - headers already sent by 
//(output started at /home/test/html/err.php:3) in /home/test/html/err.php
//on line 4
//end
출력을 시작하면 제목도 출력할 거예요,headerssent ()를 보면 됩니다.
headers_sent.php
<?php
echo "start".PHP_EOL;
ob_flush();//出力開始
if(headers_sent()){
    echo "出力が始まってる!".PHP_EOL;
}else{
    header('Content-Type: text/plain');
}
echo "end".PHP_EOL;
//結果
//start 出力が始まってる! end 
출력이 시작되었는지 확인했습니다.기쁘고 축하할 만하다😇
아니에요!
gzip 등을 사용할 때 헤더스sent () 를 검사하더라도 브라우저 측에서 오류가 발생할 수 있습니다.
err_gz.php
<?php
echo "start".PHP_EOL;
if(headers_sent()){
    echo "出力が始まってる!".PHP_EOL;
    echo "end".PHP_EOL;
}else{
    header('Content-Encoding: gzip');
    echo gzencode("end".PHP_EOL);
}
Firefox 결과

출력하기 전에 헤드셋이 버퍼링이 돼서요. - 네.sent () 시간에 헤더가 발송되지 않았습니다.ob_플래시 ()를 사용하면 메일 헤더 헤더를 보낼 수 있습니다sent ()가 작동하지만 헤더 ()는 사용할 수 없습니다.
그럼 어떡하지?
버퍼의 데이터량만 알면 되니까,obget_콘텐츠 ()에서 버퍼를 검사합니다.
ob_get_contents_gz.php
<?php
echo "start".PHP_EOL;
if(headers_sent() || strlen(ob_get_contents())){
    echo "出力が始まってる!".PHP_EOL;
    echo "end".PHP_EOL;
}else{
    header('Content-Encoding: gzip');
    echo gzencode("end".PHP_EOL);
}
//結果
//start 出力が始まってる! end 
'start' 를 제외하면 gzip에 의해 'end' 만 표시됩니다.
ob_get_contents_gz_2.php
<?php
if(headers_sent() || strlen(ob_get_contents())){
    echo "出力が始まってる!".PHP_EOL;
    echo "end".PHP_EOL;
}else{
    header('Content-Encoding: gzip');
    echo gzencode("end".PHP_EOL);
}
//結果
//end 
기쁘고 축하할 만하다😇

좋은 웹페이지 즐겨찾기