Лучшая практика массовой загрузки изображений с помощью 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

См. также:  Ошибка трассировки: ModuleNotFoundError: нет модуля с именем tenorflow.keras

Возможный дубликат запросов 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

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: