Aby odpowiedzieć na pytanie o to, co jest różnica, znalazłem this comment w docs PHP (dzięki Steven):
http_response_code
jest po prostu skrótem sposób pisania nagłówek stanu http , z dodatkowym bonusem że PHP opracuje odpowiednie zdanie przyczyny , aby zapewnić dopasowanie kodu odpowiedzi do jednej z wartości w wyliczeniu, które zachowuje w obrębie php-src/main/http_status_codes.h. Zauważ, że oznacza to, że twój kod odpowiedzi musi być zgodny z kodem odpowiedzi, o którym wie PHP. Nie można utworzyć własnych kodów odpowiedzi za pomocą tej metody, jednak można użyć metody nagłówkowej .
Podsumowując - Różnice między http_response_code
i header
do ustawiania kodów odpowiedzi:
Korzystanie http_response_code
spowoduje PHP aby dopasować i zastosować frazę Reason z listy fraz powodu, że są zakodowane w kodu źródłowego PHP.
Z uwagi na powyższy punkt 1, jeśli używasz http_response_code
musisz ustawić kod, o którym wie. Nie można ustawić własnego niestandardowego kodu, , ale można ustawić niestandardowy kod (i wyrażenie przyczyny), jeśli używana jest metoda nagłówka .
byłem ciekaw jak niektóre popularne ramy wysłać nagłówek w standardowej odpowiedzi:
Symfony (i Laravel, przez dziedziczenie) ustawia surowego nagłówka:
// status
header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode);
Zend Framework 2 ustawia także nagłówek wiersza:
public function renderStatusLine()
{
$status = sprintf(
'HTTP/%s %d %s',
$this->getVersion(),
$this->getStatusCode(),
$this->getReasonPhrase()
);
return trim($status);
}
I tak robi Yii
protected function sendHeaders()
{
if (headers_sent()) {
return;
}
$statusCode = $this->getStatusCode();
header("HTTP/{$this->version} $statusCode {$this->statusText}");
// ...
Jako dodatkowe noty, jakie napotkał scenariusz pod IIS/FastCGI gdzie 'http_response_code' nie działa, ale nadal można ustawić poprzez' header'. –