@sla_vka69

Как загрузить изображения по ссылке на сервер?

Написал парсинг товаров для интернет магазина, но появилась проблема: Большое кол-во изображений (около 1000) нужно загрузить на сервер (у каждого своя ссылка) при этом уменьшить их вес (т.к. весят по 2-8 МБ) до 200-500 кб. Подскажите, как это сделать, чтобы скрипт не перегружал оперативную память. Загрузка изображений уже реализована. Использую curl для загрузки изображения в класс (временный файл), затем изменяю его размер, и сохраняю на сервер, но этот метод перегружает оперативную память, и скрипт не успевает доработать, загружаются не все изображения. Imagemagick на хостинге нет
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 4
dimonchik2013
@dimonchik2013
non progredi est regredi
можно порезать через CDN
Ответ написан
Комментировать
webtop
@webtop
Web developer
А можно глянуть код, который скачивает картинки и перегружает оперативную память?
Явно в нем есть проблема. Не может скачивание и уменьшение картинки грузить память.
А так можно попробовать грузить порциями (по 50-100 шт, в зависимости от нужд.)
или, как написали выше, воспользоваться промежуточным сервисом для генерации миниатюр.
Ответ написан
Таким кодом я смог из 17МБ преобразовать в 1МБ без потери качества, меньше чем за секунду и оперативная память не нагрузилась, чтобы скачать все фото по очереди воспользуйся foreach.
Foreach (php.net/manual/ru/control-structures.foreach.php)
GD (php.net/manual/en/book.image.php):
$url = "http://site.com/image.png"; \\ссылка на изображение
imagejpeg(
imagecreatefromstring(
        file_get_contents($url)
    ), 
    "название_изображения.jpg" \\название изображения
);
Ответ написан
Комментировать
@ReFeRy
Загрузка 1000 изображений с ресайзом это задача не для одной итерации скрипта. Судя по вашему словесному описанию, есть один лишний пункт - сохранение большой картинки во временный файл, это совершенно лишнее. Да и curl лишний, если он заводится только для картинки. Ну, и разбивайте скрипт на несколько итераций.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы