如何使用PHP获取Apache HTTP响应代码(或服务器响应的第一行)

时间:2012-10-20 16:04:06

标签: php apache2 httpresponse

如何在PHP脚本中使用服务器的HTTP响应的第一行(在我的情况下为Apache2)?例如:

HTTP/1.1 200 OK
HTTP/1.1 404 Not Found
Etc.

或者更好的是,只获取我的服务器发送给客户端的HTTP响应代码。

令我惊讶的是,$_SERVER没有它。 http_response_code()似乎只获得响应代码,如果它首先由PHP设置的话。 apache_response_headers()似乎没有它。 get_headers()似乎需要一个额外的步骤/连接(如果我错了,请纠正我)。

如果我在httpd.conf中设置ErrorDocument 403 /index.php,我可以使用$_SERVER["REDIRECT_STATUS"]从PHP获取响应代码,但还有其他方法吗?

修改

为了清楚起见,我发现奇怪的是$_SERVER几乎返回每一位数据,除了响应的第一行或响应代码。也许这是HTTP协议/服务器技术/ PHP之间的一般限制?也许我不应该尝试在我的PHP脚本中访问这些信息?

2 个答案:

答案 0 :(得分:1)

更新:不可能除非您代理自己的请求。将您的请求发送到面向公众的URL,然后将它们重定向到内部变体,您就可以看到流程中的标题。但这也不是一件容易的壮举和性能征税。或者你可以写一个Http Server扩展,看看你需要的地方:)

示例:

  • 请求来到/page.html
  • 你追加?proxy = true并转发到/page.html?proxy=true
  • 尝试在内部加载新URL,将原始请求转发给内部处理程序
  • 检查您的内部处理是否所有$ _GET ['proxy'] ==='true'请求来自本地IP
  • 如果您有代理=== true,那么按照通常的方式处理
  • /page.html从/page.html?proxy=true
  • 获取数据
  • 记录标题
  • 将数据转发回原始客户
  • (如果做错了,不是很容易和性能负担)

第一次尝试回答

http://php.net/manual/en/function.headers-list.php - 可能是这个吗?

但这适用于您即将发送的标题......

register_shutdown_function(function(){
    // Headers are really sent here, do some comparison
    var_dump(headers_list());
});

.htaccess 变体,用于将所有丢失的文件定向到index.php。

RewriteEngine on
#If handler file is missing, pull index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L,NC]

试试这个。

答案 1 :(得分:0)

您是否要求远程主机或本地计算机的响应代码?在第一种情况下,您可以使用设置了标题选项的CURL请求“ping”机器,并检索响应标头的各种设置。