提问人:Jeff 提问时间:10/21/2012 最后编辑:Jeff 更新时间:10/21/2012 访问量:1610
如何使用PHP获取Apache HTTP响应代码(或服务器响应的第一行)
How to get Apache HTTP response code (or first line of server response) with PHP
问:
如何获取服务器的 HTTP 响应的第一行(在我的情况下为 Apache2)以在我的 PHP 脚本中使用?例如:
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中设置,我可以用来从PHP获取响应代码,但是有其他方法吗?ErrorDocument 403 /index.php
$_SERVER["REDIRECT_STATUS"]
编辑:
为了清楚起见,我发现除了响应的第一行或响应代码之外,几乎返回所有数据都很奇怪。也许这是HTTP协议/服务器技术/PHP之间的一般限制?也许我不应该尝试在我的PHP脚本中访问此信息?$_SERVER
答:
您是询问远程主机还是本地计算机的响应代码?在第一种情况下,您可以使用设置了标头选项的 CURL 请求“ping”计算机,并检索响应标头的各种设置。
评论
更新:不,这是不可能的除非您代理自己的请求。将您的请求发送到面向公众的 URL,然后将它们重定向到内部变体,您将在此过程中看到标头。但这并非易事,而且对性能也很费力。或者,您可以编写一个 Http 服务器扩展,看看它会将您带到哪里:)
例:
- 请求进入 /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]
试试这个。
评论
string(23) "Content-type: text/html"
headers_list()
评论