Как скачать картинку со стороннего сайта php

/ 👁 2748

Бывают ситуации, когда изображение или группу изображений нам нужно скачать на наш проект.

Это часто бывает нужно в проектах интернет магазинов, когда можно выгрузить с сайта поставщика ссылки на картинки товаров. Но чтобы не давать кучу внешних ссылок на другой сайт, мы хотим скачать эти картинки к себе на сервер и давать ссылки уже на них.

Вот эту несложную задачу мы и будем сегодня реализовывать.

Заливаем изображения с других сайтов на наш сайт

Для простоты восприятия я создам массив, со ссылками на какие-то картинки на стороннем ресурсе. По факту же, вы можете хранить эти ссылки в базе данных и получать их оттуда. Всё зависит от задачи.

Например, на практике мне отправляют такие ссылки в Exel файле, а оттуда я уже заливаю их в специально созданную таблицу в базе данных и оттуда достаю порциями. Почему порциями? Чтобы не было серверной ошибки таймаута.

В своем проекте я создам файл index.php, где будет сам код.

Кроме этого создадим папку для картинок на том же уровне, что и файл index.php. Я назову ее photo.

Каждую картинку я буду сохранять в отдельной подпапке внутри папки photo. Скрипт сам будет создавать эти подпапки. Если вам это не нужно, то просто измените код и сохраняйте всё в папке photo.

Давайте для начала создадим массив со ссылками. Мне нравятся таксы, так что я нашла на Яндекс картинках 5 фото с таксами и скопировала их url-ы.

 

<?php

$images_arr = array(
    'https://avatars.mds.yandex.net/get-zen_doc/3504171/pub_601d803486f4e22208de1763_601d803a86f4e22208de2257/scale_1200',
    'https://glorypets.ru/wp-content/uploads/2020/09/4-Aristokratichnost.jpg',
    'https://porodisobak.ru/wp-content/uploads/2021/07/krolichya-taksa-kak-vyglyadit-97.jpg',
    'https://avatars.mds.yandex.net/get-zen_doc/1221883/pub_5f07503bed054f0cd8f49506_5f0756bf8792403544ecb639/scale_1200',
    'https://ferret-pet.ru/wp-content/uploads/4/3/c/43c6ca41d8e303d0f86b528add446a8f.jpeg',
);

Массив с фото у нас есть.

Теперь в переменную запишем путь до папки photo.

$path_to_folder_images = getcwd().'/photo/';

Php функция getcwd() получает имя текущего рабочего каталога, а в конец мы дописываем имя нашей папки.

Теперь в цикле мы будем перебирать наш массив, создавать внутри папки photo папку под каждую картинку. Я буду называть ее по индексу элемента в массиве, но вы можете это поменять, как вам нужно.

Потом мы будем вызывать функцию, которую еще не написали, но напишем на следующем шаге.

 

foreach ($images_arr as $key => $img) {
        mkdir($path_to_folder_images.$key, 0777);
        save_from_url($img, $path_to_folder_images . $key . '/' . $key . '.jpg');
        }

Теперь напишем функцию save_from_url.

Как видите, в нее мы передаем сам урл картинки и записываемые данные (формируем название файла для записи). Я также буду называть сами картинки по их ключу в массиве.

Если вы захотите назвать картинку как ссылку, то будьте осторожны и замените все слеши в url адресе на другие символы. Иначе скрипт будет интерпретировать это как путь и вы получите ошибку.

Теперь сама функция.

 

function save_from_url($url, $destination){
    $raw = file_get_contents(trim($url));
    file_put_contents($destination, $raw);
}

Функция file_get_contents читает содержимое файла в строку, а функция  file_put_contents пишет данные в файл.

Всё готово и можно тестировать. Ниже привожу полный код примера.

 

<?php

$images_arr = array(
    'https://avatars.mds.yandex.net/get-zen_doc/3504171/pub_601d803486f4e22208de1763_601d803a86f4e22208de2257/scale_1200',
    'https://glorypets.ru/wp-content/uploads/2020/09/4-Aristokratichnost.jpg',
    'https://porodisobak.ru/wp-content/uploads/2021/07/krolichya-taksa-kak-vyglyadit-97.jpg',
    'https://avatars.mds.yandex.net/get-zen_doc/1221883/pub_5f07503bed054f0cd8f49506_5f0756bf8792403544ecb639/scale_1200',
    'https://ferret-pet.ru/wp-content/uploads/4/3/c/43c6ca41d8e303d0f86b528add446a8f.jpeg',
);


$path_to_folder_images = getcwd().'/photo/';


    foreach ($images_arr as $key => $img) {
        mkdir($path_to_folder_images.$key, 0777);
        save_from_url($img, $path_to_folder_images . $key . '/' . $key . '.jpg');
        }

function save_from_url($url, $destination){
    $raw = file_get_contents(trim($url));
    file_put_contents($destination, $raw);
}

Если теперь в браузере я запущу свой скрипт, то моя папка photo наполнится подпапками с нужными мне картинками.

Так мы загрузили картинки со сторонних ресурсов себе в проект.

Пишите комментарии, если урок был полезен. Удачи в разработке.

Tags:

Leave a Reply