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

  • Автор темы webrazrabot4ik
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.
W

webrazrabot4ik

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

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

Или может у кого есть готовый.. можно самый простой...
Думаю, что это можно сделать также как это делает любой браузер. Ничего сложного здесь нет, просто к урлу страничке, которую загрузил добавляешь относительный путь к картинке. И никакие ЧПУ - не помеха.
 
webrazrabot4ik написал(а):
Вот думаю пистаь прасер имиджей с сайтов. Вопрос в следующем.. Может кто подскажет каким образом точно вычислять полный путь к имиджу.. ведь не все сайты используют полные пути к имиджам в коде + некоторые используют ЧПУ, что приводит к запарке с директорией в которой находишься...

Или может у кого есть готовый.. можно самый простой...
проверйя 3 варианта
если в начале / - то приписывай домен
если в начале нет / - то прибавляй путь на котором находишься - query_string
ну и 3ий вариант если уже весь урл дан
 
difour написал(а):
проверйя 3 варианта
если в начале / - то приписывай домен
если в начале нет / - то прибавляй путь на котором находишься - query_string
ну и 3ий вариант если уже весь урл дан
Еще нужно проверять HTML код на <base href="...">
 
MisterX , с алгоритмом difour твой вариант получается лишним

хотя хз, веть ктонить может извращатся и написать в base href "полупуть" , но думаю такие случаи еденичны
 
sorof написал(а):
MisterX , с алгоритмом difour твой вариант получается лишним

хотя хз, веть ктонить может извращатся и написать в base href "полупуть" , но думаю такие случаи еденичны
вообще то нет, при массивном парсинге будет нужно
 
sorof написал(а):
MisterX , с алгоритмом difour твой вариант получается лишним

хотя хз, веть ктонить может извращатся и написать в base href "полупуть" , но думаю такие случаи еденичны
Да, такие случае встечаются не частно, но все же чтобы алгоритм железно работал это нужно учитывать т.к. на некоторых сайтах в <base href> может быть что угодно (сам такое видел и не раз).
 
difour написал(а):
проверйя 3 варианта
если в начале / - то приписывай домен
если в начале нет / - то прибавляй путь на котором находишься - query_string
ну и 3ий вариант если уже весь урл дан

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

плюс комбинации вышеперечисленного
 
Thoth666 написал(а):
4. вариант еще такой ./ - относительно текущего каталога
5. есть вариант ../ и далее

плюс комбинации вышеперечисленного
Это можно не учитывать, а просто подставлять в URL.
 
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"], 0, 3)=="/..")
        {
            $path["path"]["dirname"] = substr($path["path"]["dirname"], 3, strlen($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 - это может быть любой абсолютный или относительный путь, он сам определит и вернет то что нада

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

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