2

如何获取服务器 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()似乎需要额外的步骤/连接(如果我错了,请纠正我)。

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

编辑:

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

4

2 回答 2

1

更新:不,除非您代理自己的请求,否则这是不可能的。将您的请求发送到面向公众的 URL,然后将它们重定向到内部变体,您可以在此过程中看到标头。但这并不是一件容易的事,而且性能也很费力。或者你可以编写一个 Http Server 扩展,看看它会把你带到哪里:)

例子:

  • 请求来到 /page.html
  • 您附加 ?proxy=true 并转发到 /page.html?proxy=true
  • 尝试在内部加载新 URL,将原始请求转发给您的内部处理程序
  • 检查所有来自本地 IP 的 $_GET['proxy'] === 'true' 请求的内部处理
  • 如果您有代理 === 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]

尝试这个。

于 2012-10-20T16:11:55.213 回答
0

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

于 2012-10-20T16:09:59.530 回答