per rispondere alla tua domanda su ciò che è la differenza, ho trovato this comment nella documentazione di PHP (grazie Steven):
http_response_code
è fondamentalmente un modo veloce di scrivere un colpo di testa di stato http , con il valore aggiunto che PHP risolverà una frase ragionevole di per fornire il codice di risposta corrispondente a uno dei valori in un'enumerazione che mantiene all'interno di php-src/main/http_status_codes.h. Nota che questo significa che il tuo codice di risposta deve corrispondere a un codice di risposta che PHP conosce. Non è possibile creare codici di risposta utilizzando questo metodo, tuttavia è possibile utilizzare il metodo di intestazione .
In sintesi - Le differenze tra http_response_code
e header
per l'impostazione dei codici di risposta:
Utilizzando http_response_code
causerà PHP per abbinare e applicare una Frase Reason da un elenco di frasi Motivo che sono hard-coded in il codice sorgente PHP.
A causa del precedente punto 1, se si utilizza http_response_code
è necessario impostare un codice noto a PHP. Non è possibile impostare il proprio codice personalizzato, , tuttavia è possibile impostare un codice personalizzato (e Frase motivo) se si utilizza il metodo di intestazione .
ero curioso di sapere come alcuni quadri popolari inviare l'intestazione in una risposta standard:
Symfony (e Laravel, per eredità) imposta l'intestazione grezzo:
// status
header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode);
Zend Framework 2 imposta anche l'intestazione non elaborata:
public function renderStatusLine()
{
$status = sprintf(
'HTTP/%s %d %s',
$this->getVersion(),
$this->getStatusCode(),
$this->getReasonPhrase()
);
return trim($status);
}
e così fa Yii
protected function sendHeaders()
{
if (headers_sent()) {
return;
}
$statusCode = $this->getStatusCode();
header("HTTP/{$this->version} $statusCode {$this->statusText}");
// ...
Come nota aggiuntiva, ho incontrato uno scenario in IIS/FastCGI dove 'http_response_code' non funziona, ma è ancora possibile impostarlo tramite' header'. –