" 태그 뒤에 공백이 없는 것을 포함하여 헤더를 사용하기 전에는 출력이 있을 수 없습니다! ! 3. 헤더 뒤의 PHP 코드도 실행됩니다. 계속: 문제: 일반적으로 헤더 기능 이전의 입력 콘텐츠가 헤더 기능 이전에 나타나지 않습니다."/> " 태그 뒤에 공백이 없는 것을 포함하여 헤더를 사용하기 전에는 출력이 있을 수 없습니다! ! 3. 헤더 뒤의 PHP 코드도 실행됩니다. 계속: 문제: 일반적으로 헤더 기능 이전의 입력 콘텐츠가 헤더 기능 이전에 나타나지 않습니다.">

>백엔드 개발 >PHP 튜토리얼 >PHP 헤더 실패 원인 분석 및 해결 방법

PHP 헤더 실패 원인 분석 및 해결 방법

黄舟
黄舟원래의
2017-02-28 09:33:021819검색

헤더("location:test.php")를 사용하여 PHP에서 점프할 때 다음 사항에 주의하세요.

1 위치와 공백이 있으면 안 됩니다. ":" 그렇지 않으면 오류가 발생합니다.

2. 헤더를 사용하기 전에는 포함 페이지에서 "?>" 태그 뒤에 공백이 없어야 합니다. !

3. 헤더 뒤의 PHP 코드도 실행됩니다.

계속:

문제: 헤더 기능 앞에 콘텐츠를 입력합니다.

일반적으로 html 콘텐츠는 헤더 기능 앞에 출력할 수 없습니다. setcookie() 및 세션 함수와 유사한 헤더 함수, 이러한 함수는 출력 스트림에 메시지 헤더 정보를 추가해야 합니다. header()가 실행되기 전에 echo와 같은 문이 있는 경우 나중에 header()를 만나면 "경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 전송되었습니다...."라는 오류가 보고됩니다. 즉, 이들 함수 앞에는 텍스트, 빈 줄, 캐리지 리턴 등이 있어서는 안 되며, header() 함수 뒤에 exit() 함수를 추가하는 것이 가장 좋습니다. 예를 들어 다음과 같이 잘못 작성하면 두 PHP 코드 조각 사이에 빈 줄이 있습니다.

//여기에 빈 줄이 있어야 합니다

이유:

PHP 스크립트가 실행되기 시작하면 http 메시지 헤더(제목) 정보와 본문 정보를 동시에 보낼 수 있습니다(header() 또는 SetCookie() 함수에서). 대신 목록에 저장됩니다. 이를 통해 기본 헤더(예: Content-Type 헤더)를 포함한 헤더 정보를 수정할 수 있습니다. 그러나 일단 스크립트가 헤더가 아닌 출력을 보내면(예: HTML 또는 print( ) 호출), PHP는 먼저 모든 헤더를 보낸 다음 HTTP 헤더를 종료해야 합니다. 그런 다음 본문 데이터를 계속 보내야 합니다. 이 시점부터 헤더 정보를 추가하거나 수정하려는 시도는 허용되지 않으며 위의 오류 중 하나가 발생합니다. 메시지가 전송됩니다.

해결책:

캐시를 열도록 php.ini를 수정하고(output_buffering), 출력_버퍼링=0을 출력_버퍼링=4096으로 변경

하거나 프로그램에서 캐시 함수 ob_start(), ob_end_flush() 등을 사용합니다. 원칙은 다음과 같습니다. output_buffering이 활성화되면 스크립트가 출력을 보낼 때 PHP는 HTTP 헤더를 보내지 않습니다. 대신, 이 출력을 동적으로 증가하는 캐시로 연결합니다(중앙 집중식 출력 메커니즘이 있는 PHP 4.0에서만 사용 가능). 헤더는 실제로 전송되지 않으므로 헤더를 수정/추가하거나 쿠키를 설정할 수 있습니다. 모든 스크립트가 종료되면 PHP는 자동으로 HTTP 헤더를 브라우저에 보낸 다음 출력 버퍼의 내용을 보냅니다.

위 내용은 PHP Header 실패 원인 분석 및 해결 방법에 대한 자세한 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!

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