PHP 标头速记功能在生产服务器上失败


Php header shorthand function fails on production server

基于这个答案,我正在尝试实现一个非常简单的速记函数来发送标头。

函数如下所示:

function hdr($code)
{
    if (!headers_sent())
    {
        header('x', TRUE, $code);
    }
}

现在,它在我的本地服务器中运行良好,但是一旦我投入生产,我就会得到 500,并且以下内容构成了错误日志:

[2012 年 6 月 19 日星期二 11:01:59] [错误] [客户端 87.12.83.179] 脚本中的标头格式不正确。错误的标头=x:php54.cgi

如果我这样修改函数:

function hdr($code)
{
    if (!headers_sent())
    {
        header($_SERVER['SERVER_PROTOCOL'], TRUE, $code);
    }
}

它适用于生产环境,但不适用于本地。

我想问题出在生产 php 是 cgi 脚本吗?有什么方法可以解决问题(即为所有功能提供一个功能)而不使用"代码"=>"消息"的关联数组?

问题是,标题永远不会看起来像X。标头块以类似

HTTP/1.1 200 OK

然后只有键值对跟随

A-Header: Some value

似乎,网络服务器接受没有状态的HTTP/1.1作为标题,但你不应该依赖它。此外,您的本地服务器接受X作为标题值并不意味着您应该使用它;)