好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
PHP中如何返回HTTP响应代码? 关闭 返回上一级  

PHP中如何返回HTTP响应代码?
+ 查看更多

发布日期:2017-03-25 15:01
分类:PHP
浏览次数:406

我有一个PHP脚本,它需要使用类似HTTP 200 OK或者4XX码或者5XX码的HTTP响应码(状态码)做出响应。
在PHP中,我如何做到这一点?


问题解答回答

我刚发现这个问题,认为需要一个更加全面的回答:
在PHP 5.4中有三种方法可以做到这一点:
1.自行组织响应码(PHP>=4.0)
header()函数有一个特殊的用法,它找到一个HTTP响应行并且让你用一个自定义码替代那行。

header("HTTP/1.1 200 OK");

但是,需要对(Fast)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以上版本才可使用。

 

2.header函数的第三个参数(PHP >= 4.3)
显然,使用第一个方法时会有一些问题。我认为其中最大的问题是它被PHP或者网络服务器部分解析而且没有文档化。
从4.3版本起header函数有了第三个参数,它让你有点轻松地设置响应码,但是使用它需要第一个参数是非空字符串。这里有两个可选方案:

header(':', true, 404);
header('X-PHP-Response-Code: 404', true, 404);

我推荐第二种。第一种在我测试过的所有浏览器上都有效,但是一些小型浏览器或者网络爬虫无法处理只含有一个冒号的标题行。第二个方法中的头字段当然是不标准的并且可修改的。我只是选了一个具有较高描述性的名字。
 

3.http_response_code函数 (PHP >= 5.4)

The http_response_code() 函数在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;
    }
}
上一篇PHP中如何判断一个字符串中是否包含了别的字符串?
在PHP中,单引号字符串和双引号字符串之间有什么区别?下一篇
下一篇在PHP中,单引号字符串和双引号字符串之间有什么区别?

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号