PHP 코드를 작성해 본 분들이라면 대부분 이런 어리둥절한 경고를 접하셨을 거라 생각합니다.. 오늘은 그 문제를 해결해보겠습니다...........
PHP를 읽은 후 매뉴얼에서 대답은 다음과 같습니다.
"경고: 세션 쿠키를 보낼 수 없습니다. 헤더가 이미 전송되었습니다..." 또는 "헤더 정보를 추가할 수 없습니다. 헤더가 이미 전송되었습니다..."라는 메시지입니다.
header(), setcookie() 및 세션 함수는 출력 스트림에 헤더 정보를 추가해야 합니다. 그러나 헤더 정보는 다른 출력 콘텐츠보다 먼저 전송될 수 있습니다. 이러한 기능을 사용하기 전에는 HTML과 같은 출력이 있을 수 없습니다. headers_sent() 함수는 스크립트가 헤더를 보냈는지 확인합니다. "출력 제어 기능"을 참조하십시오.
의미: 위 기능을 사용하기 전에 텍스트, 빈 줄, 캐리지 리턴, 공백 등을 사용하지 마십시오. 하지만. . . 문제는 이 답변이 만족스럽지 않다는 것입니다. 다른 PHP 환경에서는 프로그램이 정상적으로 실행되는 경우가 많기 때문입니다.
우선, 이 오류는 어떻게 발생합니까? PHP가 HTTP 헤더 출력과 본문 출력을 어떻게 처리하는지 살펴보겠습니다.
PHP 스크립트가 실행되면 헤더 정보와 본문 정보를 동시에 보낼 수 있습니다. 헤더 정보(header() 또는 SetCookie() 함수)는 즉시 전송되지 않고 목록에 저장됩니다. 이를 통해 기본 헤더(예: Content-Type 헤더)를 포함한 헤더 정보를 수정할 수 있습니다. 그러나 스크립트가 헤더가 아닌 출력(예: HTML 또는 print() 호출 사용)을 보내면 PHP는 먼저 모든 헤더를 보낸 다음 HTTP 헤더를 종료해야 합니다. 그런 다음 계속해서 기본 데이터를 보내십시오. 이 시점부터 헤더 정보를 추가하거나 수정하려는 시도는 허용되지 않으며 위의 오류 메시지 중 하나가 전송됩니다.
알았어! 그럼 해결해보자:
멍청한 방법: 오류 경고를 표시하지 마세요!
구체적인 방법은 말씀드리지 않겠습니다. ^_^#
해결책:
1) PHP 편집 권한이 있는 분만 해당됩니다. INI 사람들
PHP를 엽니다. ini 파일(나보다 여러분의 PHP에 대해 더 잘 알아야 합니다. ini는 어디에 있습니까?)
output_buffering =을 찾아서 on 또는 임의의 숫자로 변경합니다. IIS6인 경우 ON으로 변경하십시오. 그렇지 않으면 PHP 효율성이 매우 느려집니다.
2) 가상 호스트를 사용하면 PHP를 편집할 수 없습니다. INI, 어떻게 해야 하나요?
간단합니다.
공간의 루트 디렉터리에 하나를 만듭니다. htaccess 파일의 내용은 다음과 같습니다.
AllowOverride All
PHP_FLAG output_buffering On
불행한 상황은: 여전히 작동하지 않습니까? 모든 웹 페이지를 표시할 수 없습니다.
그러면 공간 제공자를 호출할 수 있습니다. 공간 제공자를 꾸짖고 아파치를 달라고 요청하세요. htaccess AllowOverride 열기
3) PHP 파일
ob_start()
에서 해결하여 출력 버퍼링 메커니즘을 활성화합니다. 출력 버퍼링은 여러 수준을 지원합니다. 예를 들어 ob_start() 함수는 여러 번 호출될 수 있습니다.
ob_end_flush()
출력 버퍼(출력 버퍼)를 보내고 출력 버퍼링 메커니즘을 비활성화합니다.
ob_end_clean()
출력 버퍼를 보내지 않고 지우고 출력 버퍼링을 비활성화합니다.
ob_get_contents()
현재 출력 버퍼를 문자열로 반환합니다. 스크립트에서 내보낸 모든 출력을 처리할 수 있습니다.
원칙:
output_buffering이 활성화되면 스크립트가 출력을 보낼 때 PHP는 HTTP 헤더를 보내지 않습니다. 대신, 이 출력을 동적으로 증가하는 캐시로 연결합니다(중앙 집중식 출력 메커니즘이 있는 PHP 4.0에서만 사용 가능). 헤더는 실제로 전송되지 않으므로 헤더를 수정/추가하거나 쿠키를 설정할 수 있습니다. 모든 스크립트가 종료되면 PHP는 자동으로 HTTP 헤더를 브라우저에 보낸 다음 출력 버퍼의 내용을 보냅니다.
위에서는 플래시 쿠키의 내용을 포함하여 PHP 세션 쿠키 오류를 완전히 제거하기 위해 플래시 쿠키를 도입했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.