http_response_code () всегда возвращает 200, даже на 404

Я пытаюсь использовать Apache’s ErrorDocument обрабатывать ошибки клиента и сервера, передавая их error.php,

.htaccess

ErrorDocument 400 /error.php
...
ErrorDocument 404 /error.php
...
ErrorDocument 511 /error.php

error.php

var_dump(http_response_code());

Итак, я указываю свой браузер на mywebsite.com/noeutdhoaeu, которого не существует. Ответ от сервера 404 Not Found, как и следовало ожидать. Но PHP дает мне 200,

Что дает?

редактировать: У меня есть такой же точный код на моем локальном хосте на основе Apache, и он работает просто отлично. Вот почему я задаю этот вопрос. PHP полностью осознает, что в моей локальной среде произошла ошибка 404. Однако в моей хостинговой среде PHP понятия не имеет.

3

Решение

Как сказал @Boaz, PHP не знает, что Apache собирается установить позже.

Вы можете использовать этот подход, чтобы использовать код ошибки в PHP:

ErrorDocument 400 /error.php?error=400
ErrorDocument 401 /error.php?error=401
...

И в тесте PHP $_GET["error"],

3

Другие решения

Эта функция в основном сеттер / геттер для PHPкод ответа. Без параметров эта функция возвращает текущий код ответа по PHP. Поскольку код ответа по умолчанию 200без установки другого кода, сначала передав параметр, 200 всегда будет возвращен.

Смотрите этот пример в руководство:

var_dump(http_response_code()); // int(200) - default
http_response_code(404); // set a new code
var_dump(http_response_code()); // int(404) - new code

Стоит также отметить, что header() Вызовы также могут повлиять на возвращаемое значение этой функции, например:

header('http/1.0 404 not found');
var_dump(http_response_code()); // int(404) - new code
4

По вопросам рекламы [email protected]