加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

在PHP中发送HTTP响应代码的最佳方式

发布时间:2020-05-25 08:48:43 所属栏目:PHP 来源:互联网
导读:通过阅读 PHP规范和Stack Overflow上的其他问题,我可以看到三种从PHP发送HTTP响应代码的方法: header(HTTP/1.0 404 Not Found); ^ ^ ^ A B Cheader( , false, 404); ^ ^ ^

通过阅读 PHP规范和Stack Overflow上的其他问题,我可以看到三种从PHP发送HTTP响应代码的方法:

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.

为了回答你关于有什么区别的问题,我在PHP文档中找到了 this comment(感谢Steven):

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 and header
for setting response codes:

  1. 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.

  2. 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.

我很好奇一些流行的框架如何在标准响应中发送标头:

Symfony(和Laravel,继承)设置原始标题:

// 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}");
    // ...

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读