Вопрос по 404 и PHP - PullRequest
       12

Вопрос по 404 и PHP

1 голос
/ 05 января 2010

Так что я использую одну точку входа, найденную в моем предыдущем вопросе: Как эффективно включить config.php?

Мы все знаем, что такое 404 ошибки, поэтому объяснений здесь не требуется. Однако при использовании единственной точки входа index.php?page=pokemon она не переходит на страницу 404 при попытке доступа к несуществующей странице. Итак, как я могу решить эту проблему, которая сделает его более удобным для пользователя и направит посетителей на мою страницу 404, чтобы они не видели все ошибки PHP?

Ответы [ 3 ]

2 голосов
/ 05 января 2010

Вы должны вывести свою собственную страницу с ошибкой (например, вы можете просто include() .html файл) и установить код состояния HTTP с помощью функции header():

header("HTTP/1.0 404 Not Found");

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

1 голос
/ 05 января 2010

Полагаю, вы делаете что-то вроде if / elseif или переключателя на переменной $ page, чтобы выяснить, какую страницу отображать, верно?

Если это так, просто добавьте ELSE соотв. default: ветвь, которая будет отображать пользовательскую заметку об ошибке пользователю, если неожиданное значение передается как $ page.

НТН

0 голосов
/ 05 января 2010

Если вы на самом деле используете код пользователя187291 , измените его следующим образом:

$page = "home";
if (isset($_GET['page'])) {
    $page = $_GET['page'];
}
$file = "$page.php";
if (preg_match('/\W/', $file) || !is_file($file)) {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    // print error message
    exit;
} else {
    include $file;
}

Но поскольку вы используете header, вам нужно убедиться, что клиенту не было отправлено ни одного вывода. В противном случае заголовок HTTP уже отправлен, и вы не можете его изменить. Вы можете использовать функции управления выводом для буферизации любого вывода и сброса его в случае ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...