Я написал программу PHP, я использую функции session_start()
и header()
, я знаю, что должен использовать эти функции, прежде чем отправлять что-либо клиенту. это нормально, но для теста я отправляю тестовое сообщение клиенту с echo "test";
перед использованием header (), но я не получил никаких ошибок и функции заголовка без проблем!
В предыдущих версиях PHP в это время я получаю сообщение вроде:
Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:22) in /some/file.php on line 60
Я не знаю, почему я не получил сообщение об ошибке!
Моя версия php – 5.3.1, а error_reporting
– на E_ALL
Вы не видите ошибку, потому что
а. буферизация вывода включена
б. сервер игнорирует вашу функцию error_reporting, потому что что-то другое указывает, что иначе запускает phpinfo();
и посмотреть, что он там говорит о output buffering
и об error_reporting
.
Это может быть возможно, потому что вы записываете в выходной буфер (ob_start), который фактически ничего не возвращает клиенту, пока вы явно не очистите буфер (ob_flush или ob_end_ *), или скрипт не закончится.
Тот факт, что вы не можете отправлять заголовки после того, как вы начали писать основную часть вашего ответа HTTP, – это не php, а ограничение протокола HTTP, поэтому это тоже не может быть версией.
Многие фреймворки, такие как Zend Framework, используют выходные буферы, поэтому разработчику не нужно заботиться о заказе.
Я нашел проблему, я не использую FrameWork.
проблема была error_reporting('E_ALL');
Я написал этот код в первой моей программе, поэтому PHP не возвратил никаких ошибок! Я удалил эту строку, и я получаю ошибки!
Это шутит, потому что эта строка говорит PHP, чтобы показать ВСЕ ошибки! Я не знаю, почему PHP не показывает никаких ошибок.