file_get_contents скачивание картинок

Тема в разделе "PHP", создана пользователем new_forward, 24 янв 2014.

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

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Доброго времени суток!

    Отправляю на другой сервер урлы картинок которые надо скачать...

    Код:
    ini_set("user_agent", "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)");
            $d = file_get_contents('http://mysite.ru/photos/i_'.$up_id.'_0.jpg');
            file_put_contents('avto_foto_ads/i_'.$up_id.'_0.jpg',$d);
          
            ini_set("user_agent", "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)");
            $d2 = file_get_contents('http://mysite.ru/photos/i_'.$up_id.'_601.jpg');
            file_put_contents('avto_foto_ads/i_'.$up_id.'_601.jpg',$d2);
    
    Первая скачивается вторая, файл 0 килобайт...Что не так?

    Поменял местами, скачался второй, наверно потому что малого размера, в php.ini как описано здесь увеличил настройки http://softodom.com/173/kak-uvelichit-dopustimyjj-razmer-zagruzhaemogo-fajjla-cherez-php.html

    И все равно тоже самое...
     
    Последнее редактирование: 24 янв 2014
  2. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    Если скачивать CURL-ом, можно получить более подробную информацию - ошибки, хедеры, и тд.
    Для начала - просто сделать echo $url и посмотреть, лежит ли по этому адресу картинка.
     
  3. 01K

    01K

    Регистр.:
    27 июн 2013
    Сообщения:
    271
    Симпатии:
    40
    По идеи должно работать. Попробуйте так + пример с CURL'ом
    Код:
    <?php 
          function download_remote_file($file_url, $save_to)
          {
            $content = file_get_contents($file_url);
            file_put_contents($save_to, $content);
          }
     
    ini_set("user_agent", "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"); 
    download_remote_file('http://mysite.ru/photos/i_'.$up_id.'_0.jpg', 'avto_foto_ads/i_'.$up_id.'_0.jpg');
    download_remote_file('http://mysite.ru/photos/i_'.$up_id.'_601.jpg', 'avto_foto_ads/i_'.$up_id.'_601.jpg');
    
    
    
    
    
    
        function download_remote_file_with_curl($file_url, $save_to)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_POST, 0);
            curl_setopt($ch,CURLOPT_URL,$file_url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $file_content = curl_exec($ch); curl_close($ch);
            $downloaded_file = fopen($save_to, 'w');
            fwrite($downloaded_file, $file_content);
            fclose($downloaded_file);
        }
    
        download_remote_file_with_curl('http://mysite.ru/photos/i_'.$up_id.'_0.jpg');
        download_remote_file_with_curl('http://mysite.ru/photos/i_'.$up_id.'_601.jpg');
    
    ?>
    
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    file_get_contents в случае неудачи вернёт false. Что при автоматическом конвертации в строку функцией file_put_contents() даст пустую строку - мы ведь помним, что php язык с динамической типизацией.

    curl позволяет сохранять загружаемый url сразу в файл
    PHP:
    $fp fopen('avto_foto_ads/i_'.$up_id.'_601.jpg'"w");
    ....
    curl_setopt($ch,CURLOPT_FILE$fp);
    curl_exec($ch);
    fclose($fp);
    Если при закачке не дёргать туда-сюда curl_init(); curl_close($ch); - это может ускорить загрузку, есть сервера для загрузки с которых это всё таки требуется, но такие сервера скорее исключение из правил.
     
Статус темы:
Закрыта.