PHP:如何发送HTTP响应代码?

2023-12-03

我有一个 PHP 脚本,需要使用 HTTP 响应代码(状态代码)进行响应,例如 HTTP 200 OK 或某些 4XX 或 5XX 代码。

我怎样才能在 PHP 中做到这一点?


我刚刚发现这个问题并认为它需要更全面的答案:

As of PHP 5.4有三种方法可以实现此目的:

自己组装响应代码(PHP >= 4.0)

The 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");

Note:根据HTTP RFC, the 原因短语可以是任何自定义字符串(符合标准),但为了客户端兼容性我do not建议在那里放置一个随机字符串。

Note: php_sapi_name()需要PHP 4.0.1

标头函数的第三个参数 (PHP >= 4.3)

使用第一个变体时显然存在一些问题。我认为最大的问题是它部分是由 PHP 或 Web 服务器解析的,并且文档很少。

从 4.3 开始,header函数有第三个参数,可让您轻松地设置响应代码,但使用它需要第一个参数是非空字符串。这里有两个选项:

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

我推荐第二个。首先does适用于我测试过的所有浏览器,但某些小型浏览器或网络爬虫可能会出现标题行仅包含冒号的问题。第二个标题字段名称。变体当然没有以任何方式标准化并且可以修改,我只是选择了一个希望具有描述性的名称。

http_response_code 函数 (PHP >= 5.4)

The http_response_code()PHP 5.4 中引入了函数,它使事情变得简单a lot easier.

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;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP:如何发送HTTP响应代码? 的相关文章

  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 如何访问带有美元符号的 PHP 对象属性?

    我有一个 PHP 对象 其属性中有一个美元 符号 如何访问该属性的内容 例子 echo object gt variable Ok echo object gt variable WithDollar Syntax error With 变
  • 显示带有 id 的内部连接的名称[重复]

    这个问题在这里已经有答案了 我有这个查询 select from countrysegments inner join country on countrysegments country id country id inner join
  • RuntimeException - 会话存储未根据请求设置 - Laravel Socialite - Facebook

    我在用着Laravel 5 7 and Laravel Socialite 3 1 我想使用登录Facebook我刚刚为此项目配置了应用程序 这些是我为此配置的主要文件 env FACEBOOK CLIENT ID FACEBOOK CLI
  • php / phpDoc - @return $this 类的实例?

    如何在 phpDoc 中将方法标记为 返回当前类的实例 在下面的示例中 我的 IDE Netbeans 将看到 setSomething 始终返回foo object 但如果我扩展对象 情况就不是这样了 它会返回 this 在第二个示例中是
  • 如何处理PDO异常[重复]

    这个问题在这里已经有答案了 我正在尝试与PDOphp 上的类 但我在找到处理错误的正确方法时遇到了一些麻烦 我编写了以下代码
  • Symfony/Doctrine 重新排列数据库列

    当我使用doctrine schema update命令行生成表时 Doctrine 或Symfony 似乎想要添加一个命令来重新排列我的列 将键放在它出现的前面 我想知道是否 更希望在哪里 我可以禁用环境的这个 功能 所以当我去生成我的表
  • 计算帖子中使用 WordPress 短代码的次数

    我有以下 WordPress 短代码功能 function wp shortcode static i 1 return i i return return add shortcode shortcode wp shortcode 这很好用
  • 如何从文件中获取整个函数

    好的 我现在正在逐行阅读一个文件 我知道文件中的每个函数名称 因为它是在 XML 文档中的其他位置定义的 应该是这样的 function function name 其中 function name 是函数的名称 我从 XML 文档中获取所
  • Symfony2 实体字段在选项为空时显示所有条目

    我的 Symfony2 项目中有一个实体类型表单字段 builder this gt createFormBuilder projects this gt getProjects builder gt add project entity
  • 多维数组中的数组排列保留键 PHP

    这两天我一直在疯狂地尝试完成这个任务 也许你可以启发我 这是针对赛马投注排列的 每次用户玩游戏时 我都会得到一个多维数组 2 个级别 第一级包含比赛 ID 第二级包含用户为该比赛选择的马匹 它看起来像这样 play array 4 gt a
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • PHP cURL 看不到 /etc/hosts 文件

    我在让 PHP cURL 库识别我在我的文件中创建的别名时遇到了麻烦 etc hosts file 这就是我的 etc hosts现在归档 192 168 0 20 www example dev 在另一端 192 168 0 20 Apa
  • Yii2 组件将数据传递给 __construct

    我有一个库 我想将其用作组件 在配置文件中我这样设置 components gt superLib gt class gt SuperLib construct gt first second Maybe Yii 2 have proper
  • Laravel 5 命名约定

    我对 Laravel 约定有点困惑 因为我是这个框架的新手 我正在关注 Jeffrey Way 他使用的 Laracasts 视频Plural对于控制器名称 E g 页面控制器 卡片控制器 帖子控制器 但如果我参考官方文档Laravel g
  • MySQL如何从多个表中获取数据

    我正在寻找 php MySQL jquery 的帮助 我有2张桌子 table1表 1 有 4 列 id 标题 desc thumb img tabel2表 2 有 3 列 id 表 id img 我只想将 2 个表与 get QS 的值进
  • WordPress 子主题包括包含文件

    我在一家WordPress使用 AMPPS 作为本地主机在我的本地计算机上进行设置 使用 Delta 主题 我创建了一个子主题 delta2 child 初始设置效果很好 但是 我需要更改包含文件夹中名为 home slider php 的
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • 通过 IP 地址限制 Laravel 错误日志

    When debug被设定为true在 Laravel 的app config php有什么方法可以限制结果Whoops包含对某些 IP 地址的堆栈跟踪的错误页面 并且不在该列表中的 IP 显示特定视图 Thanks 没有内置 但是你可能可

随机推荐

  • 使用 pd.read_clipboard 读取漂亮打印/格式化的数据帧?

    这是另一个数据框question Location Date Value India 2015 03 15 200 India 2015 02 15 140 India 2015 01 15 155 India 2015 12 15 85
  • Linux 中的 getch() 和 getche() 等效项是什么?

    我无法在 Linux 中找到 conio h 的等效头文件 有什么选择吗getch getche Linux 下的函数 我想制作一个开关盒基本菜单 用户只需按一个键即可给出选择 并且进程应该向前移动 我不想让用户在按下他的选择后按下回车键
  • 类型错误:Object(...) 不是 index.js 上的函数

    您好 当我在浏览器中运行代码时出现此错误 类型错误 Object 不是函数 src index js src index js 31 28 28 firebaseStateName firebase 29 29 30 常量初始状态 31 c
  • 如何在 Palantir Foundry 中解析 xml 文档?

    我有一套 xml我想要解析的文档 我以前曾尝试使用获取文件内容并将它们转储到单个单元格中的方法来解析它们 但是我注意到这在实践中不起作用 因为我看到运行时间越来越慢 通常只有一项任务需要执行运行数十小时 我的第一个变换是 xml内容并将其放
  • 带有光标鼠标射线原点的 aframe 嵌入场景

    嵌入场景和鼠标光标选项似乎存在错误 cursor rayOrigin mouse 我在一个盒子上放置了 mouseenter 和 mouseleave 事件来改变它的大小 只要页面包含在浏览器中 它就可以正常工作 但是当页面 可滚动 时 事
  • 使用corona sdk的后台无限

    我正在尝试滚动 Corona sdk 中的背景 无限背景 我重复使用了两张图像 854x176 我尝试了这个功能 function mov self event if self x lt 854 then self x 854 else s
  • 是否可以从本机代码访问 Dalvik VM

    我希望能够使用 Android 中的本机代码来定位 Dalvik VM 这意味着使用中列出的本机类平台 dalvik在 android 源存储库下 我特别想打电话Sync dvmLockObject及其对应物Sync dvmUnlockOb
  • 没有数组的埃拉托斯特尼筛法?

    我必须为 埃拉托斯特尼筛 算法编写一个java代码 以便在控制台上打印出达到给定最大值的素数 但我不允许使用数组 我们的教授告诉我们 只有借助循环才能做到这一点 所以我想了很多 也用谷歌搜索了很多关于这个话题的信息 但找不到答案 我认为这根
  • 无法在 Javafx 应用程序中为 javascript 创建 javax 脚本引擎

    我正在使用 NetBeans 12 0 和 windows 10 64 位 我的 JDK 是 15 0 2 和 JavaFx SDK 16 当我尝试构建我的 javafx 应用程序时 它显示以下构建错误 C Users musta OneD
  • 来自 survfit 对象和 textConnection 的中值

    我使用了其他人的方法来获取中位数survfit对象 即使用textConnecton 但我遇到了几个问题 example library survival data cancer cox ph lt coxph Surv time stat
  • php循环遍历json数组

    我有一个像这样的 json 字符串 fields string fields customers name john id d1 name mike id d2 name andrew id d3 name peter id d4 如何打印
  • PHP 5.3 中的闭包内的 $this 是否有解决方法?

    我的 IDE 警告我 thisPHP 5 4 之前的闭包中不允许使用 是否有解决方法 无需从 5 3 10 升级 PHP 看fire 方法如下
  • 在 UIPageViewController 中禁用页面滚动[重复]

    这个问题在这里已经有答案了 我正在开发使用 UIPageViewController 的应用程序 现在我想禁用页面滚动而不是手势 实际上我想在 UIPageViewController 中包含的视图中绘制签名 为此我需要禁用页面滚动 我已经
  • 如何使用 WEB-INF/lib 中的服务器 jar 覆盖服务器 jar 或使用它们?

    我有一个Web应用程序应该使用WEB INF lib中包含的JSF 2 0库 但它没有 而不是我收到异常 因为我的服务器 JBoss 4 2 也提供了JSF库 我如何强制我的应用程序使用 WEB INF lib 中的 jar Note 当我
  • 在R中使用“unlink”后如何取回文件?

    我不小心删除了一些有用的文件 文件已被删除 我在回收站中找不到它们 我想知道怎样才能拿回来 我使用的是 Windows 8 1 我的文档中的所有文件都在R中使用unlink删除了 我尝试使用R delete来恢复 但它只能恢复从回收站删除的
  • 系统/应用程序中的 APK 何时安装?

    我创建了一个自定义系统映像 并将一个额外的 APK 放入系统 应用程序中 这有点有效 我可以运行该应用程序 但是本机库未加载 loadLibrary 失败 当我打电话时pm install在 APK 上 一切正常并且本地库加载 我的结论是
  • 返回回调(从 CustomView 中打开 DialogFragment)

    这与我之前的问题有关 从 CustomView 中打开 DialogFragment 我现在需要使用回调从 DialogFragment 返回一个值 据我了解 通常会这样做 public class MyDialogFragment ext
  • 如何在乌龟中创建按钮?

    如何在turtle python中创建一个简单的按钮 如果单击它 您可以定义它来打印消息 或者做其他更复杂的事情 You can embed正如 JoshuaNixon 在他的评论中建议的那样 tkinter 中的海龟使用 tkinter
  • 微风过滤。在服务器端扩展

    我正在尝试BreezeJS 有一个要求我可以使用 expand在客户端代码中 但基于role对于该用户 服务器端不会返回该用户的所有记录 expand请求的类型 我尝试创建一个自定义BreezeQueryable属性并重写一个方法来完全过滤
  • PHP:如何发送HTTP响应代码?

    我有一个 PHP 脚本 需要使用 HTTP 响应代码 状态代码 进行响应 例如 HTTP 200 OK 或某些 4XX 或 5XX 代码 我怎样才能在 PHP 中做到这一点 我刚刚发现这个问题并认为它需要更全面的答案 As of PHP 5