загрузить файл по ссылке?

Тема в разделе "PHP", создана пользователем sunyang, 19 май 2011.

Модераторы: latteo
  1. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    мне нужно выцепить картинку по ссылке
    /welcome/images/uploads/221060913-4.jpg
    и загрузить ее к себе на сервак в папку:
    \image\data

    как можно реализовать?
     
  2. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    PHP:
    copy('http://site.com/welcome/images/uploads/221060913-4.jpg''image/data/221060913-4.jpg');
     
  3. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    вариантов море и для этого и придумали Гугль :)
    PHP:
    $home_url_img="/image/data/".basename($url_img);
    $image=file_get_contents($url_img);
    $fp=fopen($home_url_img,"w+");
    fwrite($fp,$image);
    fclose($fp); 
     
  4. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Все красиво, только я бы последние 3 строчки заменил на file_put_contents(); ;)
     
  5. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    а как переименовать загружаемый файл?

    Добавлено через 10 минут
    вот скриптина для загрузки файла:

    PHP:
    <?

    if (
    $_POST[ok]) {

    // Определяем директорию на сервере.
    $upfiledir $_SERVER[DOCUMENT_ROOT]."/foto/";
    // Полное имя загружаемого файла
    $upfile $upfiledir basename($_FILES[load_imd][name]);
    // если файл перемещен в нужную директорию выводим информацию
    if (move_uploaded_file($_FILES[load_imd][tmp_name], $upfile ) ) 
     {

     
    // Данная переменная хранит относительную ссылку, которую можно поместить в БД
     
    $uplink "foto/".$_FILES[load_imd][name]; 
     
    // Инфа о файле
    echo "Файл ".$_FILES[load_imd][name]." успешно загружен на сервер! <br />
     Размер: "
    .$_FILES[load_imd][size]." байт. <br />
     Мим-тип: "
    .$_FILES[load_imd][type];
     } 

    ?>
    <form action='<?=$_SERVER[PHP_SELF]?>' method='POST' enctype='multipart/form-data' >
    <br />Фото: <input type='file' name='load_imd'> <br />
    <input type='submit' name='ok' value='Добавить' />
    </form>

    Как дописать переименование файла?
     
  6. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    как вариант(если расширение файла неизвестно) можно так
    PHP:
    <?php
    $name 
    explode('.',$_FILES[load_imd][name]);//отделяем расширение если неизвестно какое оно
    $new_name ='novoeimia';//новое имя
    $rasshirenie $name[1];//расширение
    copy("foto/".$_FILES[load_imd][name], "foto/".$new_name.$rasshirenie);//копируем с новым именем
    unlink("foto/".$_FILES[load_imd][name]);//удаляем старый файл
     
  7. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    с переименованием разобрался. А как изменить размер изображения?
     
  8. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    PHP:
    function img_resize($src$dest$width$height$rgb=0xFFFFFF$quality=100)
    {
    //echo $src;
      
    if (!file_exists($src)) return false;

      
    $size getimagesize($src);
    //print_r ($size);
      
    if ($size === false) return false;

      
    // Определяем исходный формат по MIME-информации, предоставленной
      // функцией getimagesize, и выбираем соответствующую формату
      // imagecreatefrom-функцию.
      
    $format strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
      
    $icfunc "imagecreatefrom" $format;
      if (!
    function_exists($icfunc)) return false;

      
    $x_ratio $width $size[0];
      
    $y_ratio $height $size[1];

      
    $ratio       min($x_ratio$y_ratio);
      
    $use_x_ratio = ($x_ratio == $ratio);

      
    $new_width   $use_x_ratio  $width  floor($size[0] * $ratio);
      
    $new_height  = !$use_x_ratio $height floor($size[1] * $ratio);
      
    $new_left    $use_x_ratio  floor(($width $new_width) / 2);
      
    $new_top     = !$use_x_ratio floor(($height $new_height) / 2);

      
    $isrc $icfunc($src);
      
    $idest imagecreatetruecolor($width$height);

      
    imagefill($idest00$rgb);
      
    imagecopyresampled($idest$isrc$new_left$new_top00
        
    $new_width$new_height$size[0], $size[1]);

      
    imagejpeg($idest$dest$quality);

      
    imagedestroy($isrc);
      
    imagedestroy($idest);

      return 
    true;

    }

    //$src - исходный файл
    $size getimagesize($src);
    $width $size[0];//ширина исходного файла
    $height $size[1];//высота исходного файла
    $width_news_images 200//новая ширина
    $new_height round($width_news_images *  $height/$width);
    //echo $new_height;
    img_resize($src,$dest,$width_news_images,$new_height,80);
    //по адресу $dest будет файл изображения с новыми размерами
    можно так :)
     
  9. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    а в $src передать $_FILES[load_imd][tmp_name] ?
     
  10. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    путь надо передать
    PHP:
    $src "foto/".$_FILES[load_imd][name];