Проблема с заголовком PHP с ob_start () и ob_end_flush ()

Я получаю проблему с заголовком, в то время как я использую ob_start() в начале страницы и ob_end_flush() в конце. Потому что я использую функцию заголовка после выполнения какого-либо запроса.

  ob_start(); include_once("header.php"); global $db; $countstmt="SELECT COUNT(*) FROM tbl_lib_hours dh WHERE book_id IN(SELECT book_id FROM tbl_book WHERE user_id=".$_SESSION['uid'].") "; $delHourExist=$db->query($countstmt); if($delHourExist){ header("location:edit_delivery_hours.php"); } .... include_once('footer.php'); ob_end_flush(); 

В header.php я также добавил ob_start (); и в footer.php я добавил ob_end_flush (); , но я думаю, что это не проблема, хотя другие страницы работают с тем же сценарием, который я пишу выше

Ошибка, которую я получаю:

Предупреждение: невозможно изменить информацию заголовка – заголовки, уже отправленные в D: \ xampp \ htdocs \ project \ add_book_hours.php в строке 9

Solutions Collecting From Web of "Проблема с заголовком PHP с ob_start () и ob_end_flush ()"

Я немного озадачен предупреждающим сообщением, которое не включает местоположение кода, вызвавшего отправку первого контента клиенту. Функция headers_sent () также может вернуть это местоположение. Итак, для целей отладки, пожалуйста, попробуйте

 if($delHourExist) { if ( headers_sent($path, $lineno) ) { echo '<pre>Debug: output started at ', $path, ':', $lineno, "</pre>\n"; } header("location: edit_delivery_hours.php"); } 

Есть ли место перед первым <?php ?

Есть ли UTF8-BOM в начале файла?

В вашем коде много невидимого вывода:

 <?php ob_start();?> --- THERE IS A LINE RETURN HERE --- --- SPACES OR TABS ---<?php include_once("header.php"); ?> --- LINE RETURN --- --- AND HERE ---<?php global $db; ... 

Завершите запуск и завершение тэгов php. Просто сделайте это:

 <?php ob_start(); include_once("header.php"); global $db; ... 

Убедитесь, что нет результата, и перед вызовом ob_start () нет пробелов вне ваших тегов. Если ваша ошибка находится в строке 9, у вас есть куча строк до этого вызова, что может быть проблемой. Вы можете опубликовать все эти строки, пронумерованные, чтобы мы могли внимательно их рассмотреть.

Я думаю, проблема может заключаться в том, что вы пытаетесь изменить заголовки, после того как вы уже отправили что-то еще на выход. Даже при использовании буферизации я не думаю, что это возможно. Я думаю, вам нужно вызвать ob_end_clean (), чтобы отбросить текущий буфер и записать информацию заголовка.

Я разрешаю проблему mi с некоторыми пробелами в моем скрипте с ob_start (); ob_end_flush (); и ob_end_clean (); Таким образом, вы можете проверить свой код

 <?php ob_start(); include_once("header.php"); global $db; $countstmt="SELECT COUNT(*) FROM tbl_lib_hours dh WHERE book_id IN(SELECT book_id FROM tbl_book WHERE user_id=".$_SESSION['uid'].")"; $delHourExist=$db->query($countstmt); if($delHourExist) { ob_end_flush(); ob_end_clean(); header("location:edit_delivery_hours.php"); } include_once('footer.php'); ?>