4

下面发出一个子请求并输出其主体 HTTP 响应内容:

<?php 
if (condition()) {
    virtual('/vh/test.php');
}
?>

有没有办法获取它的响应头?

我的目标是将我的请求(带有请求标头)转发到其他主机上的其他位置,这是通过 Apache ProxyPass 指令完成的,并将其响应(标头和内容)设置为对我的请求的响应。

所以我的服务器将充当反向代理。但它会在转发请求之前测试一些需要完成 php 上下文的条件。

4

2 回答 2

3

可以说,当前页面有自己的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);
?>
于 2013-10-05T18:27:23.163 回答
0

您可以使用 HTTP 库 - http://au1.php.net/manual/en/httprequest.send.php

于 2013-10-05T18:29:49.047 回答