Я пытаюсь использовать 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 понятия не имеет.
Как сказал @Boaz, PHP не знает, что Apache собирается установить позже.
Вы можете использовать этот подход, чтобы использовать код ошибки в PHP:
ErrorDocument 400 /error.php?error=400
ErrorDocument 401 /error.php?error=401
...
И в тесте PHP $_GET["error"]
,
Эта функция в основном сеттер / геттер для 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