Загрузка картинки, с удалённого сервера

Тема в разделе "PHP", создана пользователем Сергiй, 26 окт 2009.

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

    Сергiй

    Регистр.:
    19 ноя 2006
    Сообщения:
    351
    Симпатии:
    338
    Народ, посоветуйте, каким способом закачать картинку с удалённого сервера, ссылки имеются Перейти по ссылке , только загрузить в конкретную папку
     
  2. wwwitalya

    wwwitalya Создатель

    Регистр.:
    4 май 2009
    Сообщения:
    45
    Симпатии:
    18
    file_get_contents()
    file_put_contents()
     
    Сергiй нравится это.
  3. Eihwaz

    Eihwaz

    Регистр.:
    7 окт 2007
    Сообщения:
    156
    Симпатии:
    54
    PHP:
    <?php
    // Массив с файлами
    $files_array = array('http://www.server.com/picture_1.jpg',
                         
    'http://www.server.com/picture_2.jpg',
                         
    'http://www.server.com/picture_3.jpg',
                         
    'http://www.server.com/picture_4.jpg',
                         
    'http://www.server.com/picture_5.jpg',
                         
    'http://www.server.com/picture_6.jpg',
                         
    'http://www.server.com/picture_7.jpg',
                         
    'http://www.server.com/picture_8.jpg');

    // Директория, куда копировать
    $copy_dir 'files/';

    foreach(
    $files_array as $link_to_file) {
        
    // Узнаем имя файла, отбрасывая путь к нему
        
    $filename substr(strrchr($link_to_file'/'), 1);
        
    // Пытаемся копировать в указанную директорию
        
    if(!@copy($link_to_file$copy_dir $filename)) {
            die(
    'Не получилось');
        }
    }
    ?>
     
    irk и Сергiй нравится это.
  4. Сергiй

    Сергiй

    Регистр.:
    19 ноя 2006
    Сообщения:
    351
    Симпатии:
    338
    В этом случае, если картинка уже присутствует, скрипт пропускает или копирует её ? или поставить ещё одно условие?
    PHP:
    if (isset ($filename)){
    echo 
    "Картинка уже есть";
    }    
     else {
        
    // Пытаемся копировать в указанную директорию
        
    if(!@copy($link_to_file$copy_dir $filename)) {
            die(
    'Не получилось');
        }
     }
    но тут не уверен, если проверять будет в папке, или както на это надо указать?
     
  5. Eihwaz

    Eihwaz

    Регистр.:
    7 окт 2007
    Сообщения:
    156
    Симпатии:
    54
    Пользуйтесь функцией file_exists:
    PHP:
    if(file_exists($file)) {
        
    // переименовываем файл.
    }
     
    Сергiй нравится это.
  6. FL@SH

    FL@SH Читатель

    Заблокирован
    Регистр.:
    20 июл 2008
    Сообщения:
    193
    Симпатии:
    25
    Вот, добавил проверку файла на существование и вывод сообщения о результатах
    PHP:
    <?php
    // Массив с файлами
    $files_array = array('http://www.server.com/picture_1.jpg',
                         
    'http://www.server.com/picture_2.jpg',
                         
    'http://www.server.com/picture_3.jpg',
                         
    'http://www.server.com/picture_4.jpg',
                         
    'http://www.server.com/picture_5.jpg',
                         
    'http://www.server.com/picture_6.jpg',
                         
    'http://www.server.com/picture_7.jpg',
                         
    'http://www.server.com/picture_8.jpg');

    // Директория, куда копировать
    $copy_dir 'files/';
    $no_copy = array();
    foreach(
    $files_array as $link_to_file) {
        
    // Узнаем имя файла, отбрасывая путь к нему
        
        
    $filename substr(strrchr($link_to_file'/'), 1);
        
    // Если файл существует - добавляем к названию уникальный префикс
        
    if( file_exists($copy_dir $filename) ) {
            
    $filename time()."_".$filename;
        }
        
    // Пытаемся копировать в указанную директорию
        
    if(!@copy($link_to_file$copy_dir $filename)) {
           
    $no_copy[] = $link_to_file;
        }
    }

    if( 
    count($no_copy) ) {
        echo 
    "Не получилось скопировать ".count($no_copy)." файлов:<br />";
        foreach(
    $no_copy as $no_copy_link) {
            echo 
    $no_copy_link."<br />";
        }
    } else {
        echo 
    "Все файлы (".count($files_array).")были успешно скопированы!";
    }
    ?> 
    Добавлено через 2 минуты
    И ещё, парни, зачем при неудачном копировании сразу прерывать работу скрипта?
    PHP:
    if(!@copy($link_to_file$copy_dir $filename)) {
       die(
    'Не получилось');
    }
    В моём варианте работа скрипты не прерывается, а просто по окончании выводится статус-сообщение с файлами, которые не удалось скопировать
     
    Сергiй нравится это.
  7. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    Скажите а в случае загрузки больших файлов,можно ли както визуально отобразить ход загрузки файла на сервер?
     
  8. stan-3d

    stan-3d Создатель

    Регистр.:
    19 мар 2009
    Сообщения:
    12
    Симпатии:
    0
  9. zss

    zss Постоялец

    Регистр.:
    22 июн 2007
    Сообщения:
    55
    Симпатии:
    6
    Хочу расширить вопрос, если время выполнения скрипта большое, то как уведомить клиента о состоянии его запроса?
     
  10. Eihwaz

    Eihwaz

    Регистр.:
    7 окт 2007
    Сообщения:
    156
    Симпатии:
    54
    Да, че-то я затупил, уже не помню, почему именно так написал :)
    Можно подробнее, откуда и куда собираетесь копировать?
     
Статус темы:
Закрыта.