2010-07-20 1 views
6

У нас есть часть устаревшего кода, который (ab) использует вызовы fopen() для ресурсов через HTTP: @fopen ('http://example.com').Будет ли PHP работать с 301 переадресацией?

Мы хотим переместить example.com на другой хост, а затем отправить 301 Постоянно перемещенный. Однако мы не совсем уверены, что @fopen() будет следовать этому. Первоначальные тесты показывают мне, что это не так. Но, возможно, я пропустил часть конфигурации.

+1

Я предвижу рефакторинг в вашем будущем! – Stephen

+0

Конечно. Это перенаправление - это первый шаг в этом рефакторинге, на самом деле :) – berkes

ответ

3

Начиная с версии 5.1.0, есть max_redirects option, что делает Еореп HTTP обертка следовать Location редирект:

Максимальное количество переадресаций, чтобы следовать. Значение 1 или меньше означает, что переадресации не выполняются.

По умолчанию 20.

Вы можете установить его в явном виде, в случае, если ваш конфиг отключает это. Пример, измененный из документов:

<?php 

$url = 'http://www.example.com/'; 

$opts = array(
     'http' => array('method' => 'GET', 
         'max_redirects' => '20') 
     ); 

$context = stream_context_create($opts); 
$stream = fopen($url, 'r', false, $context); 

// header information as well as meta data 
// about the stream 
var_dump(stream_get_meta_data($stream)); 

// actual data at $url 
var_dump(stream_get_contents($stream)); 
fclose($stream); 
?>