Страница ошибки PHP 404 не будет отображать содержимое - PullRequest
0 голосов
/ 13 апреля 2009

У меня проблема с реализацией пользовательских страниц 404 ошибок на моем веб-хосте Windows / IIS / PHP. Всякий раз, когда я пытаюсь отправить сообщение о состоянии 404 в заголовке, клиенту не отправляется содержимое, и вместо этого отображается пустая страница.

Вот очень простой скрипт, который я использую:

<?php
  header('HTTP/1.1 404 Not Found');
  header('Status: 404 Not Found');
  var_dump(headers_list());
?>

На моем компьютере разработчика выводится (отображается в браузере)

array(2) { [0]=>  string(23) "X-Powered-By: PHP/5.2.6" [1]=>  string(21) "Status: 404 Not Found" }

На моем хосте нет вывода. Я не могу сгенерировать ничего, кроме пустой страницы, независимо от того, какой контент повторяется PHP или включен ниже как обычный HTML, хотя PHP обрабатывает, например, ведение журнала, запись в базу данных и т. д. продолжаются как обычно.

Кто-нибудь может подсказать, в чем может быть проблема или как ее решить?

Ответы [ 6 ]

5 голосов
/ 13 апреля 2009

«пустая страница» пахнет как error_reporting (0), скрывая сообщения об ошибках, которые вы получите. Может быть, есть какой-то вывод перед вашими заголовками, и это вызывает ошибку Проверьте это.

2 голосов
/ 13 апреля 2009

Если PHP настроен на вашем хосте для запуска через CGI, может быть невозможно сгенерировать 404 страницы с ошибками в IIS (за исключением лжи и возврата 200 OK, что плохо). Конечно, мне не удалось убедить IIS 4-6.0 разрешить ошибки CGI 404 в браузерах.

Как правило, вы все равно не хотите, чтобы PHP запускал CGI, есть и другие проблемы, связанные с тем, что он медленный. В IIS предпочтение отдается расширению PHP ISAPI (хотя я не пробовал его и не могу подтвердить, что оно решает эту конкретную проблему).

2 голосов
/ 13 апреля 2009

Что если вы поместите текст после тегов PHP?

Кроме того, убедитесь, что ваш скрипт не выдает ошибки на вашем хосте, будь то проверка журналов ошибок apache, запуск php -l в вашем скрипте или включение error_reporting и display_errors.

1 голос
/ 20 августа 2009

У меня та же проблема с PHP 5.2.6 в Linux. Я считаю, что первые 8109 байт не распечатываются веб-сервером.

IE6 игнорирует пользовательские страницы ошибок длиной менее 512 байт. Это может быть объяснением этой проблемы, но, возможно, вы все равно тестировали в нескольких браузерах.

0 голосов
/ 14 апреля 2009

Мой совет: не устанавливайте заголовок HTTP / 1.1 404 самостоятельно, и пусть веб-сервер сделает это за вас.

Традиционно это делается с помощью заголовка Status, который веб-сервер должен принять и превратить в заголовок HTTP / 1.0 или 1.1 404. Not Found.

(Примечание: заголовок Status не является настоящим HTTP-заголовком и используется исключительно для передачи информации из приложения на сам сервер.)

0 голосов
/ 14 апреля 2009

Убедитесь, что ваш хост позволяет вам менять заголовки на лету с помощью PHP. Мой хост не позволяет мне устанавливать заголовок 404 через PHP, хотя другие заголовки (301, тип контента) хороши.

...