이 기사의 예에서는 PHP 프로그래밍 과정에서 자주 발생하는 문제인 헤더 정보를 수정할 수 없습니다 - 헤더가 이미 전송되었습니다라는 PHP 프롬프트에 대한 솔루션을 설명합니다. 이 기사에서는 예제 형식으로 솔루션을 분석합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 방법은 다음과 같습니다.
이제 다음 코드를 살펴보세요.
<?php ob_start(); setcookie("username","test",time()+3600); echo "the username is:".$HTTP_COOKIE_VARS["username"]."\n"; echo "the username is:".$_COOKIE["username"]."\n"; print_r($_COOKIE); ?>
PHP 파일에 액세스할 때 경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미
에서 전송되었습니다.오류 원인:
이유는 PHP 프로그램의 헤드에 header("content-type: text/html; charset=utf-8"); 을 추가하면 위의 오류가 페이지에 나타나기 때문입니다.
header('Content-Type:text/html;charset= UTF-8'); 헤더를 보내기 전에 출력을 가질 수 없고 공백도 있을 수 없으므로 header(...) 앞의 공백을 제거해야 합니다. 또는 다른 출력을 제거합니다. 다른 파일이 포함된 경우 다른 파일에도 출력이 있는지 확인해야 합니다.
인터넷에서 일부 정보를 확인한 결과 php.ini 파일의 구성에 문제가 있는 것을 발견했습니다. php.ini 파일의 출력_버퍼링이 기본적으로 꺼짐으로 설정되어 있는 것을 발견했습니다. 하지만 내 시도는 결과를 얻지 못했습니다.
데이터가 브라우저에 출력되기 전에 setcookie 함수를 전송해야 합니다
위의 제한 사항에 따라 setcookie() 함수를 실행할 때 "정의되지 않은 인덱스", "헤더 정보를 수정할 수 없습니다 - 헤더가 이미 전송되었습니다"... 등과 같은 문제가 자주 발생합니다. "헤더 정보를 수정할 수 없습니다 - 헤더는 이미 전송되었습니다." 쿠키를 생성하기 전에 브라우저로의 데이터 출력을 지연시키는 방법입니다. 따라서 프로그램 앞에 ob_start() 함수를 추가할 수 있습니다.
ob_start() 함수는 버퍼를 여는 데 사용됩니다. 예를 들어 header() 함수 앞에 캐리지 리턴, 공백, 줄바꿈 등의 출력이 있으면 "Header had all Ready"라는 오류가 발생합니다. send by". 이 경우 먼저 ob_start()를 사용할 수 있습니다. 버퍼를 여는 PHP 코드의 데이터 블록 및 echo() 출력은 버퍼에 들어가고 즉시 출력되지 않습니다!
문제 해결 방법:
//在header()之前 ob_start(); //打开缓冲区 echo \"Hellon\"; //输出 header("location:index.php"); //把浏览器重定向到index.php ob_end_flush();//输出全部内容到浏览器 ?>
이 기사가 모든 사람이 PHP 프로그래밍을 배우는 데 도움이 되기를 바랍니다.