PHP 프로그래밍에서 헤더 () 함수는 일반적으로 특히 페이지 리디렉션을 수행 할 때 원시 HTTP 헤더를 보내는 데 사용됩니다. 일반적인 사용에는 페이지 리디렉션, 컨텐츠 유형 설정 등이 포함됩니다. 헤더 () 함수는 강력하지만 실제 개발에서는 개발자가 종종 세트 HTTP 헤더가 효과적이지 않은 문제에 직면합니다. 이 기사는 PHP에서 헤더 () 함수의 설정을 확인하고 디버깅하여 올바르게 적용되는지 확인하는 방법을 살펴 봅니다.
출력하기 전에 헤더 () 함수를 호출해야합니다. Header ()을 호출하기 전에 스크립트에 출력 (공백, 라인 브레이크 또는 HTML 태그 등)을 출력 한 경우 PHP는 HTTP 헤더를 올바르게 설정하지 않습니다.
컨텐츠 출력을 미리하지 않도록 다음 방법으로 출력 버퍼가 켜져 있는지 확인할 수 있습니다.
ob_start(); // 출력 버퍼를 켭니다
// 다른 코드
header("Location: http://m66.net"); // 리디렉션
ob_end_flush(); // 출력 버퍼 컨텐츠 및 닫기
OB_START ()는 출력 버퍼를 활성화하여 모든 출력 컨텐츠가 버퍼에 일시적으로 저장되고 스크립트가 실행될 때까지 브라우저에 출력되지 않도록합니다.
컨텐츠가 출력되었는지 확실하지 않은 경우 Headers_Sent () 함수를 사용하여 콘텐츠가 출력되었는지 확인할 수 있습니다. 이 함수는 출력이 발생했는지 여부를 나타내는 부울 값을 반환합니다.
if (headers_sent($file, $line)) {
echo "Headers already sent in $file on line $line";
} else {
header("Location: http://m66.net"); // 리디렉션
}
Headers_Sent ()가 true를 반환하면 PHP가 Header () 을 호출하기 전에 컨텐츠를 출력하여 HTTP 헤더 설정이 실패하게됩니다. 출력 파일과 줄 번호는 개발자가 문제의 근본 원인을 찾는 데 도움이됩니다.
헤더 () 함수로 전달 된 매개 변수가 정확하고 예상대로 있는지 확인하십시오. 예를 들어, 페이지 리디렉션이 수행되면 URL이 유효하고 올바르게 형식화되어야합니다. URL이 상대 경로를 사용하는 경우 현재 페이지의 경로와 일치해야합니다. 외부 도메인 이름이 관련된 경우 아래와 같이 도메인 이름이 올바른지 확인하십시오.
header("Location: http://m66.net/somepage.php");
exit(); // 사용 exit() 스크립트 실행을 중지하십시오,确保리디렉션生效
일부 PHP 구성은 특히 특정 서버 구성에서 헤더 () 함수의 동작에 영향을 줄 수 있습니다. 예를 들어, output_buffering 설정은 HTTP 헤더 전송에 영향을 줄 수 있습니다. php.ini의 관련 설정을 확인하여 Header ()가 제대로 작동하지 않는 구성 항목이 있는지 확인할 수 있습니다.
output_buffering = On
output_buffering이 ON 으로 설정되면 PHP는 스크립트가 실행될 때까지 응답을 보내기 전에 모든 출력 내용을 버퍼에 저장합니다.
PHP 오류 로그를 활성화하면 헤더 () 함수 실행을 올바르게 디버깅하는 데 도움이 될 수 있습니다. 오류 로그를 확인하면 헤드와 관련된 경고 나 오류가 있는지 확인할 수 있습니다.
php.ini 에서 오류 로그 활성화 :
log_errors = On
error_log = /path/to/error.log
로깅이 활성화되면 PHP는 실행 중 오류를 기록하여 개발자가 Header ()를 호출 할 때 문제가 있는지 이해하도록 돕습니다.
헤더 () 함수가 호출되면 브라우저에서받은 응답 헤더 정보를 브라우저의 개발자 도구를 통해 볼 수 있습니다. Chrome 브라우저에서 F12를 눌러 개발자 도구를 열고 "네트워크"탭으로 전환하고 페이지를 새로 고치면 전송 된 HTTP 요청 및 응답 헤더를 볼 수 있습니다.
페이지가 예상대로 컨텐츠 유형을 리디렉션하거나 설정하지 않으면 응답 헤더에 설정 한 헤더 () 정보가 포함되어 있는지 확인할 수 있습니다. 그렇지 않은 경우 PHP 스크립트가 헤더를 올바르게 보내지 않음을 의미합니다.
경우에 따라 Header ()을 호출 한 후에는 exit () 또는 die () 함수를 사용하여 스크립트 실행을 중지하여 리디렉션 또는 기타 헤더 작업이 즉시 적용되도록해야합니다.
header("Location: http://m66.net");
exit();
exit ()가 사용되지 않으면 스크립트가 계속 실행되어 후속 출력이 이전에 설정된 HTTP 헤더를 덮어 씁니다.
PHP에서 헤더 () 함수를 확인하고 디버깅 할 때 출력 버퍼 확인, Headers_Sent () 함수 사용, 기능 매개 변수가 올바른지 확인, PHP 설정 구성 및 브라우저 응답 헤더보기를 포함하여 여러 각도에서 문제를 해결할 수 있습니다. 이러한 방법을 통해 헤더 () 함수 설정이 효과적이지 않은 문제를 효과적으로 해결하여 PHP 스크립트가 예상대로 작동하도록합니다.