Лучшая практика массовой загрузки изображений с помощью curl?

У меня есть скрипт для веб-приложения Laravel 5.4, который должен загружать большое количество изображений (10 КБ). Мне интересно, как лучше всего справиться с этим. В настоящее время я беру данные base64_encode() из удаленного образа и записываю их в локальную папку с помощью функции file_put_contents(). Это работает нормально, но некоторые изображения могут загружаться/записываться более 10 секунд, а изображение умножается на 10 тысяч. Честно говоря, эти изображения довольно большие, но я хотел бы, чтобы этот процесс происходил быстрее, поэтому я прошу совета!

Мой текущий процесс подобен этому;

  1. Я прочитал файл JSON, содержащий все ссылки на изображения, которые мне нужно скачать.
  2. Я преобразовываю данные JSON в массив с помощью json_decode(), перебираю все ссылки с помощью цикла foreach() и позволяю curl обрабатывать все остальное.

Все соответствующие части кода выглядят так:

<?php // Defining the paths for easy access. $__filePath = public_path() . DIRECTORY_SEPARATOR . «importImages» . DIRECTORY_SEPARATOR . «images» . DIRECTORY_SEPARATOR . «downloadList.json»; $__imagePath = public_path() . DIRECTORY_SEPARATOR . «importImages» . DIRECTORY_SEPARATOR . «images»; // Decode the json array into an array readable by PHP. $this->imagesToDownloadList = json_decode(file_get_contents($__filePath)); // Let’s loop through the image list and try to download // all of the images that are present within the array. foreach ($this->imagesToDownloadList as $IAN => $imageData) { $__imageGetContents = $this->curl_get_contents($imageData->url); $__imageBase64 = ($__imageGetContents) ? base64_encode($__imageGetContents) : false; if( !file_put_contents($__imagePath . DIRECTORY_SEPARATOR . $imageData->filename, base64_decode($__imageBase64)) ) { return false; } return true; }

А функции curl_get_contents выглядят так:

<?php private function curl_get_contents($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($ch); curl_close($ch); return $data; }

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

Массовая загрузка — посмотрите здесь: Позволяет асинхронно обрабатывать несколько дескрипторов cURL php.net/manual/en/function.curl-multi-init.php   —  person CarrotCake    schedule 31.01.2017

Возможный дубликат запросов PHP Multiple Curl   —  person CarrotCake    schedule 31.01.2017

И напишите файлы с помощью cUrl stackoverflow.com/questions/25081667/   —  person CarrotCake    schedule 31.01.2017

Ах, как ни странно, я не наткнулся на эту функцию во время поиска в Google. Я собираюсь реализовать ее и запустить через несколько тестов, чтобы увидеть разницу, которую она делает. Спасибо за быстрые ответы!   —  person CarrotCake    schedule 31.01.2017

Источник: ledsshop.ru

Стиль жизни - Здоровье!