2013-10-05 7 views
4

Следующая делает суб-запрос и выводит его содержимое ответа HTTP тела:получить PHP виртуальных() заголовки ответа

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

Есть ли способ, чтобы получить свои заголовки ответа?

Моя цель состоит в том, чтобы направить свой запрос (с заголовков запроса) в другом месте на другом хосте, что достигается с директивой Apache ProxyPass, и установить его ответа (заголовки и содержимое) в ответ на мою просьбу.

Таким образом, мой сервер будет действовать как обратный прокси. Но он проверит некоторое условие, которое требует выполнения php-контекста, перед отправкой запроса.

+3

Если вы действительно настаиваете на делать это с PHP, попробуйте CURL: http://www.php.net/manual /en/intro.curl.php –

ответ

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); 
?> 

Однако это не поможет вам изменить текущие заголовки запроса из-за this:

Чтобы запустить суб-запрос, все буферы завершаются и очищаются до браузера , также отправляются ожидающие заголовки.

Это означает, что вы больше не можете отправлять заголовки. Вы должны рассмотреть использование cURL вместо:

<?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); 
?> 
Смежные вопросы