header("HTTP/1.0 404 Not Found"); ^ ^ ^ A B C header(" ",false,404); ^ ^ ^ C D B http_response_code(404); ^ B A: Defines HTTP header B: Response code C: Message D: To replace prevIoUs header or not
这些和最好使用哪一个有什么区别?我对参数的理解是否正确?
谢谢,
Tugzrida.
http_response_code
is basically a shorthand way of writing a http
status header,with the added bonus that PHP will work out a suitable
Reason Phrase to provide by matching your response code to one of the
values in an enumeration it maintains within
PHP-src/main/http_status_codes.h. Note that this means your response
code must match a response code that PHP knows about. You can’t create
your own response codes using this method,however you can using the
header method.In summary – The differences between
http_response_code
andheader
for setting response codes:
Using
http_response_code
will cause PHP to match and apply a Reason Phrase from a list of Reason Phrases that are hard-coded into
the PHP source code.Because of point 1 above,if you use
http_response_code
you must set a code that PHP knows about. You can’t set your own custom code,
however you can set a custom code (and Reason Phrase) if you use the
header method.
我很好奇一些流行的框架如何在标准响应中发送标头:
// status header(sprintf('HTTP/%s %s %s',$this->version,$this->statusCode,$this->statusText),true,$this->statusCode);
Zend Framework 2还设置了原始标题:
public function renderStatusLine() { $status = sprintf( 'HTTP/%s %d %s',$this->getVersion(),$this->getStatusCode(),$this->getReasonPhrase() ); return trim($status); }
Yii也是如此
protected function sendHeaders() { if (headers_sent()) { return; } $statusCode = $this->getStatusCode(); header("HTTP/{$this->version} $statusCode {$this->statusText}"); // ...