경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 ERROR에 의해 전송되었습니다.
저는 이 오류로 인해 한동안 어려움을 겪고 있습니다.
처음에는 그냥 공백이라고 생각했는데, 좀 더 조사해 보니 다음과 같은 문제가 있을 것 같습니다.
이 헤더 스테이트먼트 전에 사용자에게 출력을 송신할 수 있는 스테이트먼트를 찾습니다.하나 또는 여러 개를 찾으면 코드를 변경하여 헤더 문을 이전으로 이동합니다.복잡한 조건문은 문제를 복잡하게 만들 수 있지만 문제를 해결하는 데 도움이 될 수도 있습니다.가능한 한 빨리 헤더 값을 결정하고 이를 설정하는 PHP 스크립트의 맨 위에 있는 조건식을 고려해 보십시오.
include 헤더가 헤더와 함께 문제의 원인이라고 생각합니다만, 이 에러를 해소하기 위해서 코드를 재배치하는 방법을 알 수 없습니다.
오류를 제거하려면 어떻게 해야 하나요?
<?php
$username = $password = $token = $fName = "";
include_once 'header.php';
if (isset($_POST['username']) && isset($_POST['password']))
$username = sanitizeString($_POST['username']);
$password = sanitizeString($_POST['password']); //Set temporary username and password variables
$token = md5("$password"); //Encrypt temporary password
if ($username != 'admin')
{
header("Location:summary.php");
}
elseif($username == 'admin')
{
header("Location:admin.php");
}
elseif($username == '')
{
header("Location:index.php");
}
else
die ("<body><div class='container'><p class='error'>Invalid username or password.</p></div></body>");
if ($username == "" || $token == "")
{
echo "<body><div class='container'><p class='error'>Please enter your username and password</p></div></body>";
}
else
{
$query = "SELECT * FROM members WHERE username='$username'AND password = '$token'"; //Look in table for username entered
$result = mysql_query($query);
if (!$result)
die ("Database access failed: " . mysql_error());
elseif (mysql_num_rows($result) > 0)
{
$row = mysql_fetch_row($result);
$_SESSION['username'] = $username; //Set session variables
$_SESSION['password'] = $token;
$fName = $row[0];
}
}
?>
장기적으로는 PHP 스크립트의 모든 출력을 변수에 버퍼링해야 합니다.여기에는 헤더와 본문 출력이 포함됩니다.그런 다음 스크립트의 마지막에 필요한 출력을 수행합니다.
문제의 가장 빠른 해결 방법은 다음과 같습니다.
ob_start();
이 스크립트에서만 필요한 경우 스크립트의 첫 번째 항목으로 지정합니다.모든 스크립트에 필요한 경우 헤더에 첫 번째 항목으로 추가합니다.php 파일.
그러면 PHP의 출력 버퍼 기능이 활성화됩니다.PHP에서는 무언가를 출력할 때(에코 또는 인쇄를 실행) HTTP 헤더를 전송해야 합니다.출력 버퍼링을 켜면 스크립트로 출력할 수 있지만, PHP는 버퍼가 플러시될 때까지 헤더를 전송할 필요가 없습니다.이 기능을 켜고 끄지 않으면 스크립트 실행이 완료된 후 PHP가 버퍼에 있는 모든 항목을 자동으로 플러시합니다.대부분의 경우 전원을 켜기만 해도 전혀 문제가 되지 않으며 구성에 따라서는 성능이 약간 향상될 수 있습니다.
php.ini 컨피규레이션파일을 변경할 수 있는 접근권이 있는 경우 다음을 검색하여 변경 또는 추가할 수 있습니다.
output_buffering = On
그러면 ob_start()를 호출할 필요 없이 출력 버퍼링이 꺼집니다.
출력 버퍼링에 대한 자세한 내용은http://http://php.net/manual/en/book.outcontrol.php 를 참조해 주세요.
에 체크하다echo,print()또는printr()인크루드 파일에서header.php.
이것이 문제일 수도 있고 MVC 파일이 있는 경우 다음 시간 이후에 공백 수를 확인합니다.?>이것 또한 문제가 될 수 있습니다.
에 몇 가지 문제가 있습니다.header()콜, 그 중 하나가 문제의 원인일 수 있습니다.
- 이거를 넣어야 되는데
exit()각 후에header("Location:그렇지 않으면 코드 실행이 계속됩니다. - 다음 시간 이후에 공간이 있어야 합니다.
:라고 쓰여 있다"Location: http://foo" - 에서 상대 URL을 사용할 수 없습니다.
Location헤더와 같은 절대 URL을 형성해야 합니다.http://www.mysite.com/some/path.php
콘텐츠를 출력한 후 헤더 정보를 보내려고 합니다.
이를 수행하려면 출력 버퍼링을 찾습니다.
따라서 다음을 사용하십시오.ob_start();
언급URL : https://stackoverflow.com/questions/9707693/warning-cannot-modify-header-information-headers-already-sent-by-error
'programing' 카테고리의 다른 글
| JavaScript:사용자 브라우저가 Chrome인지 확인하는 방법 (0) | 2023.02.03 |
|---|---|
| PHP에서 @ 연산자를 사용하여 오류 억제 (0) | 2023.02.03 |
| 디렉토리가 비어 있는지 확인하기 위해 PHP를 사용하는 방법은 무엇입니까? (0) | 2023.02.03 |
| Django에서 manage.py CLI를 사용하여 데이터베이스에서 모든 테이블을 삭제하려면 어떻게 해야 합니까? (0) | 2023.02.03 |
| 여러 Vue 애플리케이션, 여러 엔트리 파일, 동일한 Vuex/Vue3 Compostition Api 스토어 [반응성 상실] (0) | 2023.02.03 |