[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с рекурсивной функцией
Эли4ка
Добрый день!Подскажите,пожалуйста,где ошибка в данной рекурсивной функции,которая выдает следующие ошибки:
Warning: get_headers() [function.get-headers]: This function may only be used against URLs in line;
и следовательно ошибка в foreach--Warning: Invalid argument supplied for foreach() in line 25
вот код самой функции:
echo ger_header_location('http://yandex.ru/favicon.ico');
function ger_header_location($url){
$j = get_headers($url);
//print_r($j);
foreach($j as $original_test) {
$t = $t . $original_test . "\n";
}
//echo $t;
if(preg_match('/Location:(.*)/', $t, $matches)){
preg_match_all('/Location:(.*)/', $t, $matches);
$url = $matches[1][0];
ger_header_location($url);
return $url;
}
else {
return $url;
}
}


Как должна работать данная функция:
1.Дана ссылка,получаем ее заголовки
2.Оттуда ищем переадресацию
3.Если есть переадресация,то вызываем эту ф-ю еще раз,если нет.то возвращаем ту ссылку.
Спасибо.
T1grOK
1) get_headers не дружит с пробелами. Используй trim($url);
2) На всякий случай проверяй, что вернул get_header.
3)
 if(preg_match('/Location:(.*)/', $t, $matches)){
preg_match_all('/Location:(.*)/', $t, $matches);

Сомнительная конструкция..
4)
ger_header_location($url);
return $url;

Так ты результата не получишь, если рекурсия вызывается хотя бы один раз
return ger_header_location($url);


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Эли4ка
Цитата
Сомнительная конструкция..
if(preg_match('/Location:(.*)/', $t, $matches)){
        preg_match_all('/Location:(.*)/', $t, $matches);

почему это?все очевидно-если найдена переадресация,то выбираем..
P.S. Спасибо,вот эта конструкция return ger_header_location($url); исправила ситуацию,и все работает.
glock18
Цитата (Эли4ка @ 26.06.2013 - 11:21)
почему это?все очевидно-если найдена переадресация,то выбираем..


а вот лично мне очевидно, что T1grOK прав wink.gif
Эли4ка
Цитата
а вот лично мне очевидно, что T1grOK прав

glock18,а тогда как правильнее сделать то?
glock18
ну, хотя бы вместо
    if(preg_match('/Location:(.*)/', $t, $matches)){
preg_match_all('/Location:(.*)/', $t, $matches);


можно просто
    if(preg_match_all('/Location:(.*)/', $t, $matches)){

но, учитывая, что совпадение только одно обрабатывается, то эта функция вообще не нужна, и проще просто:

    if(preg_match('/Location:(.*)/', $t, $matches)){
Эли4ка
Цитата
но, учитывая, что совпадение только одно обрабатывается, то эта функция вообще не нужна, и проще просто:

да,Вы правы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.