내 페이지 중 하나의 드롭 다운 상자에 서버 측 유효성 검사를 일부 추가했으며 페이지가 더 이상 작동하지 않을 때 추가했습니다. 내가 추가 한 코드는 다음과 같습니다.코드가 ob_start()에서만 작동하는 이유는 혼란 스럽습니다.
$show_form = true;
if (isset($_POST['submit'])) {
//All of the server side validations
$validator = new FormValidator();
$validator->addValidation("hospital_name","dontselect=000","No facility was chosen");
if ($validator->ValidateForm()) {
// All the variables from the submission form
$userid = $_SESSION['user_id'];
$hosp = $_POST['hospital_name'];
header('Location: ../site_hospital' . $hosp . '/hospital_submitform.php?usr=' . $userid . '&&hosp=' . $hosp);
exit;
$show_form = false;
} else {
echo "<B style='color:red;'>The following errors occurred:</B>";
$error_hash = $validator->GetErrors();
foreach ($error_hash as $inpname => $inp_err) {
echo "<p style='color:red;'>$inp_err</p>\n";
}
}}
if (true == $show_form) {
순전히 기회를 통해 ob_start(); 페이지의 시작 부분에 디버깅의 일부로 갑자기 내 코드가 제대로 작동하지만 왜 그럴 수 있는지 알지 못하고 커뮤니티가 교육 된 추측을 왜 버릴 수 있는지 기대하고있었습니다. 코드가 작동을 멈추었을 때 위의 헤더 명령을 실행하지 않으면 ob_start()를 추가했을 때 페이지가 새로 고침되고 위치가 변경되지 않습니다. 페이지의 맨 위에는 계획대로 페이지가 리디렉션됩니다. 따라서 전반적인 질문은 페이지가 ob_start없이 header 명령을 사용하여 직접 지시하지 않는 이유입니까? 확신 할 수있는 세부 사항과 코드가 확실한 답을 얻기 위해 필요하지만, 누군가가 이전에이 문제를 겪었거나 교육받은 추측을 통해 내 자신의 답변으로 인도 할 수 있기를 바랍니다. 어떤 통찰력에도 감사드립니다.
[PHP가 이미 보낸 헤더] (URL : http://stackoverflow.com/questions/8028957/headers-already-sent-by-php) – mario