За последние 24 часа нас посетил 17631 программист и 1321 робот. Сейчас ищут 1068 программистов ...

Загрузка картинок с сайта (грабер)

Тема в разделе "Прочие вопросы по PHP", создана пользователем lawr, 11 фев 2013.

  1. lawr

    lawr Активный пользователь

    С нами с:
    24 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    Здравствуйте всем. Есть необходимость скачать пару сотен изображений с сайта.
    Пользуюсь Curl.
    Вот код:
    Код (Text):
    1. <? $a = "http://site.ru/images/product_images/popup_images/";
    2. $b = 120;
    3. $c= "_0";
    4. $$a = $b.$c.".jpg";
    5. while ($b < 128)   
    6. $ch = curl_init('$a${$a}');
    7. $fp = fopen($b.$c.".jpg", "w+");
    8. curl_setopt($ch, CURLOPT_FILE, $fp);
    9. curl_setopt($ch, CURLOPT_HEADER, 0);
    10. curl_exec($ch);
    11. curl_close($ch);
    12. fclose($fp);
    13. $b++; ?>
    Отдельно качает. А вот в цикле нет. Подскажите куда смотреть.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.099
    Симпатии:
    1.243
    Адрес:
    там-сям
    Код (Text):
    1. $$a
    - так и должно быть?

    Код (Text):
    1. while ($b < 128)  
    2. $ch = curl_init('$a${$a}');
    -помоему это вечный бессмысленный и беспощадный цикл
     
  3. lawr

    lawr Активный пользователь

    С нами с:
    24 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    $$a- так и должно быть. почему вечный? на старте $b=120. $b++. пока $b меньше 120 цикл повторяется.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.099
    Симпатии:
    1.243
    Адрес:
    там-сям
    точно так и должно быть? [ намекаю: два доллара. два! ]
    посмотри в чужом коде фигурные скобки. они не зря там
     
  5. lawr

    lawr Активный пользователь

    С нами с:
    24 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    чужой код для склейки переменных
    Код (Text):
    1. <?php
    2.     // говорим, что имя переменной $$a - "hello"
    3. $a = "hello";
    4.     // здесь в $hello помещаем слово "world"
    5. $$a = "world";
    6.     // далее распечатаем, будет: hello world
    7. print "$a ${$a}"; ?>
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    скачайте с пом. wget а скриптом потом уже раскидаете как нужно
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. <?php
    2. $a='hello'; 
    3.     // здесь в $hello помещаем слово "world" 
    4. $a.='world'; 
    5.     // далее распечатаем, будет: hello world
    6. echo $a;
    7. ?>
     
  8. lawr

    lawr Активный пользователь

    С нами с:
    24 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    Ой что то я не посмотрев копирнул. Вы правы через точку и один знак $. И все же почему не качает?
    Или Curl не может с лету собранные ссылки качать?
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Не понял... Что качать?)
    Говорите подробнее, показывайте примеры и вам помогут...
     
  10. lawr

    lawr Активный пользователь

    С нами с:
    24 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    Есть сайт. Надо скачать много картинок с него. В преддверии разговоров "хорошо или плохо" скажу, что есть разрешение на это.
    Картинки имеют url вида http://site.ru/cat/image/1_0.jpg(2_0.jpg).
    Пытаюсь curl'у скормить собранные в цикле url'ы следующим способом.
    Код (Text):
    1.     <? $a = "http://site.ru/images/product_images/info_images/";
    2. $b = "120";
    3. $num = "$b";
    4. $c= "_0";
    5. $e = ".jpg";
    6. $url = $a.$num.$c.$e;  
    7. $ch = curl_init('$url');
    8. $fp = fopen($b.$c.".jpg", "w+");
    9. curl_setopt($ch, CURLOPT_FILE, $fp);
    10. curl_setopt($ch, CURLOPT_HEADER, 0);
    11. curl_exec($ch);
    12. curl_close($ch);
    13. fclose($fp); ?>
    использую while.
     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    И что это?
    $ch = curl_init( ' $url ' );

    Вы видимо не различаете синтаксис кавычек, раз пишите такую ерундистику

    Так нельзя писать...
    Ибо переменная не будет выполнена и будет просто текст...

    А вообще на будущее, не надо такие скрипты писать, к чему делать так:
    $b = "120";
    $num = "$b";
    И на кой черт столько переменных, вы там че делаете еп?(
    Переменные выше одинаковые, только вот зачем было создавать их 2 и еще и в " $ b " присваивать второй... ОМГ...

    $num = $b; да и вообще... Тут ваше вот это:

    Код (PHP):
    1. $a = "http://site.ru/images/product_images/info_images/"; 
    2. $b = "120";
    3. $num = "$b";
    4. $c= "_0";
    5. $e = ".jpg";
    6. $url = $a.$num.$c.$e;
    Можно удалять закрыв глаза...

    ГОВНО КОД ЕЩЕ ТОТ........
     
  12. lawr

    lawr Активный пользователь

    С нами с:
    24 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    Про $num = "$b" соглашусь. А как еще собрать ссылку для Curl вида http://site.ru/images/product_images/info_images/129_0.jpg? где меняется только цифра 129? причем меняется от 1 до 250.
    и сохранить надо с теми же именами?
    Данный код работает и качает как надо. Возможно не идеален. Если подскажите как не говнокодить буду благодарен.
    Код (Text):
    1.  
    2. $b = "120";
    3. while ($b < 130)
    4. {
    5.     $b++;
    6. $a = "http://site.ru/images/product_images/info_images/".$b."_0.jpg";
    7. $ch = curl_init("$a");
    8. $fp = fopen("".$b."_0.jpg", "w+");
    9. curl_setopt($ch, CURLOPT_FILE, $fp);
    10. curl_setopt($ch, CURLOPT_HEADER, 0);
    11. curl_exec($ch);
    12. curl_close($ch);
    13. fclose($fp);
    14. }
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $b=120;
    2. while($b < 130) {
    3.     ++$b;
    4.     $ch=curl_init('http://site.ru/images/product_images/info_images/'.$b.'_0.jpg');
    5.     $fp=fopen($b.'_0.jpg','w+');
    6.     curl_setopt($ch,CURLOPT_FILE,$fp);
    7.     curl_setopt($ch,CURLOPT_HEADER,0);
    8.     curl_exec($ch);
    9.     curl_close($ch);
    10.     fclose($fp);
    11. } 
     
  14. lawr

    lawr Активный пользователь

    С нами с:
    24 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    Т.е. Ваш код отличается только одинарными ковычками?
    и сокращением данной строки?
    Код (Text):
    1. $ch = curl_init("$a");
    Спасиибо за критику. Иногда она помогает включить мозг.
     
  15. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Да вот на какой вы делаете туда эти ковычки?
    Код (PHP):
    1. $ch = curl_init($a); 
    Если в не видите отличие, то без комментариев)))
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    лучше скажи человеку в чем оно состоит.
     
  17. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Да думаю он понял))
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет. не понял. и даже не сможет сформулировать запрос в гугл =)