브라우저가 웹 페이지에 액세스하면 서버는 먼저 HTTP 프로토콜을 통해 브라우저와 통신을 설정합니다. 이 프로세스에는 HTTP 헤더 정보 및 후속 HTML 컨텐츠를 보내는 것이 포함됩니다. HTTP 헤더 정보에는 웹 페이지의 기본 정보 (예 : 컨텐츠 유형, 문자 세트 등)가 포함되어있을뿐만 아니라 브라우저가 페이지 디스플레이, 캐시, 점프 및 기타 동작을 처리하는 방법도 결정합니다.
PHP에서는 헤더 () 함수를 사용하여 HTTP 헤더를 보냅니다. 예를 들어 다음 코드는 브라우저를 새 페이지로 리디렉션합니다.
<?php
header("Location: http://m66.net/newpage.php");
exit;
?>
이 코드가 실행되면 서버는 리디렉션 헤더 ( 위치 )를 보내고이 헤더 정보에 따라 브라우저가 점프됩니다. 현재 PHP 스크립트는 Exit () 로 인해 실행을 중단하므로 후속 HTML 컨텐츠는 출력되지 않습니다.
PHP에서 HTTP 헤더는 HTML 출력 전에 전송되어야합니다. 이는 서버가 HTTP 헤더 정보를 먼저 전송하고 HTML 컨텐츠가 후속 데이터이기 때문입니다. HTML 컨텐츠 또는 PHP의 다른 문자를 처음 출력 한 다음 Header () 함수를 호출하면 PHP가 오류를보고하여 "헤더 이미 전송 된 헤더"를 표시합니다.
예를 들어 다음 코드는 오류입니다.
<?php
echo "Hello World!"; // 산출 HTML 콘텐츠
header("Location: http://m66.net/newpage.php"); // 리디렉션 헤더를 보내십시오
exit;
?>
이 코드가 실행되면 경고가 발생하여 헤더가 전송되었음을 알 수 있습니다. 그 이유는 Echo 명령문이 HTML 컨텐츠를 출력하여 HTTP 헤더가 더 이상 전송되지 않기 때문입니다.
HTTP 프로토콜에서는 실제 페이지 컨텐츠 (HTML, 그림, CSS 등) 전에 헤더 정보를 보내야합니다. 브라우저는 수신 된 헤더 정보를 기반으로 수신 된 페이지를 처리하는 방법을 결정합니다. 예를 들어, 위치 헤더는 브라우저가 리디렉션되어야하며 컨텐츠 유형은 브라우저에 현재 페이지의 콘텐츠 유형을 알려줍니다.
HTML이 브라우저로 전송되기 시작하면 서버가 더 이상 HTTP 헤더를 변경할 수 없기 때문에 PHP는 HTML 컨텐츠를 출력하기 전에 헤더 () 기능을 통해 이러한 헤더를 보내야합니다. HTTP 헤더를 성공적으로 수정할 수 있도록 (예 : 리디렉션) 출력 전에 Header ()가 호출되어 있는지 확인해야합니다.
PHP는 HTML 컨텐츠를 출력하기 전에 헤더 ()를 호출해야하지만 경우에 따라 출력 버퍼링 이이 문제를 해결하는 데 도움이 될 수 있습니다. 출력 버퍼링을 사용하면 PHP가 실제로 전송하기 전에 HTML 컨텐츠를 메모리에 저장할 수 있으므로 후속 호출 Header () 에서 출력 컨텐츠의 영향을받지 않도록 할 수 있습니다.
출력 버퍼링을 사용한 코드의 예는 다음과 같습니다.
<?php
ob_start(); // 출력 버퍼링을 켭니다
echo "Hello World!"; // 仍然可以输出콘텐츠
header("Location: http://m66.net/newpage.php"); // 헤더를 보내십시오
exit;
?>
위의 코드에서 OB_START () 함수는 출력 버퍼링을 가능하게하므로 ECHO 후 컨텐츠가 출력 되더라도 PHP는 컨텐츠를 즉시 브라우저로 보내지 않고 버퍼에 저장합니다. 이를 통해 헤더 () 함수를 호출하여 "헤더 이미 전송 된"오류가 발생하지 않고 HTTP 헤더를 수정할 수 있습니다.
페이지 리디렉션 : 헤더 ( "위치 : URL")를 사용하여 사용자를 다른 페이지로 리디렉션합니다.
header("Location: http://m66.net/anotherpage.php");
exit;
컨텐츠 유형 설정 : 헤더 사용 ( "Content-Type : Type")을 사용하여 페이지의 컨텐츠 유형을 설정하십시오.
header("Content-Type: application/json");
echo json_encode($data);
CONTROL CACHE : Header ()를 사용하여 캐시 제어를 설정하여 브라우저가 특정 페이지를 캐시 해야하는지 여부를 나타냅니다.
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
PHP의 헤더 () 함수는 HTTP 헤더 정보를 보내는 데 사용되며 호출 순서는 페이지의 출력 순서에 중요합니다. HTTP 헤더는 HTML 컨텐츠 전에 전송되어야하므로 Header ()를 호출 할 때 출력이 없도록해야합니다. 이 문제를 해결하기 위해 출력 버퍼링을 효과적인 솔루션으로 사용할 수 있습니다. 헤더 () 함수와 페이지 출력 순서 간의 관계를 이해하면 잘못된 통화 순서로 인한 오류 및 예기치 않은 동작을 피하는 데 도움이됩니다.
Header () 함수 및 출력 버퍼링을 합리적으로 사용하면 PHP 스크립트가 예상대로 작동하고 불필요한 오류를 피할 수 있습니다.