Бывают ситуации, когда изображение или группу изображений нам нужно скачать на наш проект.
Это часто бывает нужно в проектах интернет магазинов, когда можно выгрузить с сайта поставщика ссылки на картинки товаров. Но чтобы не давать кучу внешних ссылок на другой сайт, мы хотим скачать эти картинки к себе на сервер и давать ссылки уже на них.
Вот эту несложную задачу мы и будем сегодня реализовывать.
Заливаем изображения с других сайтов на наш сайт
Для простоты восприятия я создам массив, со ссылками на какие-то картинки на стороннем ресурсе. По факту же, вы можете хранить эти ссылки в базе данных и получать их оттуда. Всё зависит от задачи.
Например, на практике мне отправляют такие ссылки в 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 наполнится подпапками с нужными мне картинками.
Так мы загрузили картинки со сторонних ресурсов себе в проект.
Пишите комментарии, если урок был полезен. Удачи в разработке.