Даунлодер картинок

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 20 фев 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Здравствуйте.
    Решил написать даунлодер картинок.
    Столкнулся с проблемой, спарсиваю путь src'а и пути не всегда прямые, есть косвенные пути. Может кто встречал класс или функцию которая скачивает картинки, независимо от типа пути к картинке.
     
  2. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Function: _expandlinks
    Purpose: expand each link into a fully qualified URL
    Input:
    $links the links to qualify
    $URI the full URI to get the base from
    Output: $expandedLinks the expanded links


    PHP:
        function _expandlinks($links,$URI)
        {
            
    preg_match("/^[^\?]+/",$URI,$match);
            
    $match preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]);
            
    $match preg_replace("|/$|","",$match);
            
    $match_part parse_url($match);
            
    $match_root =
            
    $match_part["scheme"]."://".$match_part["host"];
            
    $search = array(     "|^http://".preg_quote($this->host)."|i",
                                
    "|^(\/)|i",
                                
    "|^(?!http://)(?!mailto:)|i",
                                
    "|/\./|",
                                
    "|/[^\/]+/\.\./|"
                            
    );
            
    $replace = array(    "",
                                
    $match_root."/",
                                
    $match."/",
                                
    "/",
                                
    "/"
                            
    );            
            
    $expandedLinks preg_replace($search,$replace,$links);
            return 
    $expandedLinks;
        }
     
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Не работает.

    PHP:
       function _expandlinks($links,$URI)
        {
            
    preg_match("/^[^\?]+/",$URI,$match);
            
    $match preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]);
            
    $match preg_replace("|/$|","",$match);
            
    $match_part parse_url($match);
            
    $match_root =
            
    $match_part["scheme"]."://".$match_part["host"];
            
    $search = array(     "|^http://".preg_quote([U]$this[/U]->host)."|i",
                                
    "|^(\/)|i",
                                
    "|^(?!http://)(?!mailto:)|i",
                                
    "|/\./|",
                                
    "|/[^\/]+/\.\./|"
                            
    );
            
    $replace = array(    "",
                                
    $match_root."/",
                                
    $match."/",
                                
    "/",
                                
    "/"
                            
    );            
            
    $expandedLinks preg_replace($search,$replace,$links);
            return 
    $expandedLinks;
        }  
        
        
    $links="http://site.ru/templates/default/im/video.jpg";
    var_dump (_expandlinks($links,'http://site.ru'));     
    Ошибка:

    Fatal error: Using $this when not in object context in ***\qualify.php on line 11
     
  4. nimnul

    nimnul Создатель

    Регистр.:
    24 мар 2008
    Сообщения:
    15
    Симпатии:
    4
    Очевидно, вместо $this->host должно быть $match_part["host"]
     
  5. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Заменил, всё работает.
    Но результат не верно :)
     
  6. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Что именно не верно? Не все выкусывает? Неправильно подставляет? Неправильно заменяет? Заменяет на неправильные ссылки? Или вообще не заменяет?
     
  7. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Написал функцию, всё работает.
    Пользуйтесь, кому надо.
    Важно мнение специалостов.
    function full_url ($url,$host)
    {
    if ($url[0]=='/')
    {$host_tmp=str_replace ("http://","",$host);
    $ar=explode ("/",$host_tmp);
    $fullurl='http://'.$ar[0].$url;}

    elseif ($url[0]=='h'&&$url[4]==':'){
    $fullurl=$url;

    }

    else
    {
    $host_tmp=str_replace ("http://","",$host);
    $ar=explode ("/",$host_tmp);
    unset ($ar[count($ar)-1]);
    $fullurl='http://'.implode ("/",$ar).'/'.$url;
    }

    return ($fullurl);

    }
     
Статус темы:
Закрыта.