Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION

12
Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#11

Вообще то проблема распространенная, решения все обсосаны.

Например, вариант собственного обхода редиректов:

<?php

$url="http://www.yandx.ru/";
//$url="http://www.yndex.ru/";

$uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 1); // возвращает заголовки!!!
// @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа

$content = curl_redirect( $ch );

echo $content;


function curl_redirect( $ch )
{
$loops = 0;
$max_loops = 10;

if ($loops++ >= $max_loops)
{
$loops = 0;
return FALSE;
}
$data = curl_exec($ch);
$temp = $data;
list($header, $data) = explode("\n\n", $data, 2);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http == 301 || $http == 302) {
$matches = array();
preg_match('/ocation:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
// print_r($url);
if (!$url)
{
$loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];

$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
//echo "\n redirect to ".$new_url;
curl_setopt($ch, CURLOPT_URL, $new_url);
return curl_redirect($ch);
} else {
$loops=0;
return $temp;
}
}
?>
skAmZ
На сайте с 04.09.2009
Offline
122
#12

Что вы тут фантазируете) В 99% случаев, данная ошибка из-за safe_mode.

Вам же почти по-русски написали: " cannot be activated when in safe_mode".

Если Вам обязательно надо ходить по редиректам, то используется код выше, лично я отключаю данную опцию.

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#13

skAmZ, это, конечно, да, самое простое в httpd закомментировать php_admin_value open_basedir ну и safe_mode выключить. Но бывают ситуации, что надо фантазировать.

skAmZ
На сайте с 04.09.2009
Offline
122
#14

Ёхан Палыч, затея, комментировать и выключать, гиблая, лучше реализовать с данными ограничениями) Тут и фантазии то собой не надо =)

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#15

skAmZ, ну и?

skAmZ
На сайте с 04.09.2009
Offline
122
#16

Ёхан Палыч, а что ну и?))) Я ещё в первом своем посте написал:

Если Вам обязательно надо ходить по редиректам, то используется код выше

Ваш т.е.)) Кто-то из нас 2-х тупит ;)

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#17
skAmZ:
Ваш т.е.)) Кто-то из нас 2-х тупит

Да? Мне показалось, что в первом посте было написано, мол, нефиг фантазировать - дело в safe_mode. Оказывается это был пост "согласен с предыдущим оратором". Ну да ладно :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий