Я только что нашел этот вопрос и подумал, что ему нужен более полный ответ:
Начиная с PHP 5.4 есть три способа сделать это:
Сборка ответасобственный код (PHP> = 4.0)
Функция header()
имеет специальный вариант использования, который обнаруживает строку ответа HTTP и позволяет заменить ее на пользовательскую
header("HTTP/1.1 200 OK");
Однако для (быстрого) CGI PHP требуется специальная обработка:
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == 'cgi')
header("Status: 404 Not Found");
else
header("HTTP/1.1 404 Not Found");
Примечание: Согласно HTTP RFC , Фраза причины может быть любой произвольной строкой (соответствующей стандарту), но ради совместимости с клиентом я не рекомендую помещать туда случайную строку.
Примечание: php_sapi_name()
требуется PHP 4.0.1
3-й аргумент функции заголовка (PHP> = 4.3)
Очевидно, что есть несколько проблем при использовании этого первого варианта.Самым большим из них, на мой взгляд, является то, что он частично анализируется PHP или веб-сервером и плохо документирован.
Начиная с версии 4.3, у функции header
есть 3-й аргумент, который позволяет вам несколько удобно устанавливать код ответано использование этого требует, чтобы первый аргумент был непустой строкой.Вот два варианта:
header(':', true, 404);
header('X-PHP-Response-Code: 404', true, 404);
Я рекомендую второй .Первый работает во всех протестированных мною браузерах, но у некоторых второстепенных браузеров или веб-сканеров может возникнуть проблема со строкой заголовка, которая содержит только двоеточие.Название поля заголовка во 2-м.вариант, конечно, никак не стандартизирован и может быть изменен, я просто выбрал, надеюсь, описательное имя.
функция http_response_code (PHP> = 5.4)
http_response_code()
*Функция 1055 * была введена в PHP 5.4, и она сделала вещи намного проще.
http_response_code(404);
Вот и все.
Совместимость
Вотфункция, которую я приготовил, когда мне требовалась совместимость ниже 5,4, но требовалась функциональность «новой» функции http_response_code
.Я считаю, что PHP 4.3 более чем достаточно для обратной совместимости, но вы никогда не знаете ...
// For 4.3.0 <= PHP <= 5.4.0
if (!function_exists('http_response_code'))
{
function http_response_code($newcode = NULL)
{
static $code = 200;
if($newcode !== NULL)
{
header('X-PHP-Response-Code: '.$newcode, true, $newcode);
if(!headers_sent())
$code = $newcode;
}
return $code;
}
}