1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Алгоритм вычисления...

Тема в разделе "Web Coding", создана пользователем webrazrabot4ik, 10 ноя 2006.

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

    webrazrabot4ik Прохожие

    Вот думаю пистаь прасер имиджей с сайтов. Вопрос в следующем.. Может кто подскажет каким образом точно вычислять полный путь к имиджу.. ведь не все сайты используют полные пути к имиджам в коде + некоторые используют ЧПУ, что приводит к запарке с директорией в которой находишься...

    Или может у кого есть готовый.. можно самый простой...
     
  2. MisterX

    MisterX Постоялец

    Регистр.:
    10 ноя 2006
    Сообщения:
    101
    Симпатии:
    7
    Думаю, что это можно сделать также как это делает любой браузер. Ничего сложного здесь нет, просто к урлу страничке, которую загрузил добавляешь относительный путь к картинке. И никакие ЧПУ - не помеха.
     
  3. difour

    difour Прохожие

    проверйя 3 варианта
    если в начале / - то приписывай домен
    если в начале нет / - то прибавляй путь на котором находишься - query_string
    ну и 3ий вариант если уже весь урл дан
     
  4. MisterX

    MisterX Постоялец

    Регистр.:
    10 ноя 2006
    Сообщения:
    101
    Симпатии:
    7
    Еще нужно проверять HTML код на <base href="...">
     
  5. sorof

    sorof Прохожие

    MisterX , с алгоритмом difour твой вариант получается лишним

    хотя хз, веть ктонить может извращатся и написать в base href "полупуть" , но думаю такие случаи еденичны
     
  6. difour

    difour Прохожие

    вообще то нет, при массивном парсинге будет нужно
     
  7. MisterX

    MisterX Постоялец

    Регистр.:
    10 ноя 2006
    Сообщения:
    101
    Симпатии:
    7
    Да, такие случае встечаются не частно, но все же чтобы алгоритм железно работал это нужно учитывать т.к. на некоторых сайтах в <base href> может быть что угодно (сам такое видел и не раз).
     
  8. Thoth666

    Thoth666 Прохожие

    4. вариант еще такой ./ - относительно текущего каталога
    5. есть вариант ../ и далее

    плюс комбинации вышеперечисленного
     
  9. MisterX

    MisterX Постоялец

    Регистр.:
    10 ноя 2006
    Сообщения:
    101
    Симпатии:
    7
    Это можно не учитывать, а просто подставлять в URL.
     
  10. Ahmea

    Ahmea Прохожие

    webrazrabot4ik, я те все отвечаю и отвечаю, а благодарности никакой :D
    вот тебе мое решение, кривоватое правда :eek:
    PHP:
     function in_string($needle$haystack$insensitive 0
    {
    if (
    $insensitive
    return (
    false !== stristr($haystack$needle)) ? true false;
    else
    return (
    false !== strpos($haystack$needle)) ? true false;
    }
     
    //компоновка абсолютного и относительного путей
        
    function getHost($base$path)
        {
            
    $old $path;
            
    $temp1 explode("/"$base);
            if (
    $temp1[count($temp1)-1]!="")
                if (
    in_string("."$temp1[count($temp1)-1])==false)
                    
    $base $base."/";
            
    $temp1 explode("/"$path);
            if (
    $temp1[count($temp1)-1]!="")
                if (
    in_string("."$temp1[count($temp1)-1]) == false)
                    
    $path $path."/";
            
    $base $base." ";
            
    $path $path." ";
            
    $base = @parse_url($base);
            
    $path = @parse_url($path);
            if (isset(
    $path["host"]))
                return 
    trim($old);
            if (
    $base["path"][0]!="/")
                
    $base["path"] = "/".$base["path"];
            if (
    $path["path"][0]!="/")
                
    $path["path"] = "/".$path["path"];
            
    $base["path"] = pathinfo($base["path"]);
            
    $path["path"] = pathinfo($path["path"]);
            if (
    $base["path"]["dirname"]=="\\"$base["path"]["dirname"] = "";
            if (
    $path["path"]["dirname"]=="\\"$path["path"]["dirname"] = "";
            while (
    substr($path["path"]["dirname"], 03)=="/..")
            {
                
    $path["path"]["dirname"] = substr($path["path"]["dirname"], 3strlen($path["path"]["dirname"])-3);
                if (
    substr_count($base["path"]["dirname"], "/")>1)
                    
    $base["path"]["dirname"] = substr($base["path"]["dirname"], strpos($base["path"]["dirname"], "/"1), strlen($base["path"]["dirname"])-strpos($base["path"]["dirname"], "/"1));
                else
                    
    $base["path"]["dirname"] = "";
            }
            if (
    trim($path["path"]["basename"])=="")
                
    $url trim($base["scheme"])."://".trim($base["host"]).trim($base["path"]["dirname"]).trim($path["path"]["dirname"]);
            else
                
    $url trim($base["scheme"])."://".trim($base["host"]).trim($base["path"]["dirname"]).trim($path["path"]["dirname"])."/".trim($path["path"]["basename"]);
            
    $url str_replace("/./""/"$url);
            return 
    trim($url);
        }
    $base - это базовый урл сайта
    $path - это может быть любой абсолютный или относительный путь, он сам определит и вернет то что нада

    Кста писал граббер картинок с сайтов, так что если что могу ченить еще подсказать.

    ...
    Поправил чуток функцию.
    Еще раз поправил. Постоянно ее использую, будут еще доработки буду выкладывать.
     
Статус темы:
Закрыта.