下面发出一个子请求并输出其主体 HTTP 响应内容:
<?php
if (condition()) {
virtual('/vh/test.php');
}
?>
有没有办法获取它的响应头?
我的目标是将我的请求(带有请求标头)转发到其他主机上的其他位置,这是通过 Apache ProxyPass 指令完成的,并将其响应(标头和内容)设置为对我的请求的响应。
所以我的服务器将充当反向代理。但它会在转发请求之前测试一些需要完成 php 上下文的条件。
下面发出一个子请求并输出其主体 HTTP 响应内容:
<?php
if (condition()) {
virtual('/vh/test.php');
}
?>
有没有办法获取它的响应头?
我的目标是将我的请求(带有请求标头)转发到其他主机上的其他位置,这是通过 Apache ProxyPass 指令完成的,并将其响应(标头和内容)设置为对我的请求的响应。
所以我的服务器将充当反向代理。但它会在转发请求之前测试一些需要完成 php 上下文的条件。
可以说,当前页面有自己的original
标题。通过使用virtual()
,您将强制 apache 执行子请求,这会生成额外的virtual
标头。您可能会通过以下方式获得这两个标题组的差异(通过保存每个标题组apache_response_headers()
)array_diff()
:
<?php
$original = apache_response_headers();
virtual('somepage.php');
$virtual = apache_response_headers();
$difference = array_diff($virtual, $original);
print_r($difference);
?>
但是,由于以下原因,它不会帮助您更改当前的请求标头:
为了运行子请求,所有缓冲区都被终止并刷新到浏览器,挂起的标头也被发送。
这意味着,您不能再发送标头了。您应该考虑使用 ofcURL
代替:
<?php
header('Content-Type: text/plain; charset=utf-8');
$cUrl = curl_init();
curl_setopt($cUrl, CURLOPT_URL, "http://somewhere/somepage.php");
curl_setopt($cUrl, CURLOPT_HEADER, true);
curl_setopt($cUrl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($cUrl);
curl_close($cUrl);
print_r($response);
?>
您可以使用 HTTP 库 - http://au1.php.net/manual/en/httprequest.send.php