使用curl的最佳批量图像下载练习?

时间:2017-01-31 14:27:51

标签: php laravel curl download

我有一个运行Laravel 5.4 web应用程序的脚本,应该下载大量图像(10k)。我想知道处理这个问题的最佳方法是什么。我目前从远程映像中获取base64_encode()数据,并将其写入具有函数file_put_contents()的本地文件夹。这样可以正常工作,但有些图像下载/写入的时间可能超过 10秒,图像时间为1万次。很公平,这些图像相当大,但我希望看到这个过程发生得更快,因此我在寻求建议!

我目前的流程是这样的;

  1. 我读了一个包含我必须拥有的所有图像链接的JSON文件 下载。
  2. 我将JSON数据转换为带有json_decode()的数组,然后使用foreach()循环遍历所有链接,让curl处理其余部分。
  3. 代码的所有相关部分如下所示:

    <?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;
    }
    

    我希望有人可以通过我可以应用的当前方式应用这种大量下载来启发我。

0 个答案:

没有答案