【问题标题】:How to download images from various URL (same path)如何从各种 URL(相同路径)下载图像
【发布时间】:2016-09-20 16:09:11
【问题描述】:

我想从一个 URL 下载大约 200 张图片。例如:获取www.web.com/images/001.png并下载,获取www.web.com/images/002.png并下载并在200.png完成。

我已经阅读了Grab/download images from multiple pages using php preg_match_all & cURL,但我不知道如何修改 PHP 来做那件事。

如果您能帮助我,我将不胜感激。非常感谢

【问题讨论】:

    标签: php image curl download


    【解决方案1】:

    想到的最简单的方法是创建一个 for 循环,它从 1 计数到 200,然后对于每个计数,它都会请求图像并将其保存到磁盘(我假设您想保存图像到您的磁盘)。 工作示例可以在底部找到。


    让我们从设置一些变量开始:

    $baseUrl = 'http://www.web.com/';
    $localDirectory = 'downloaded_images/';
    $maxImageNumber = 200;
    

    第一个变量$baseUrl 定义从哪里加载图像。第二个定义将保存图像的本地目录。 请确保该目录存在,然后再运行代码,因为它不会自动生成。最后一个变量,$maxImageNumber 存储最大的图像编号,我们将需要 for 循环。

    设置好变量后,我们就可以编写for循环了。用分号分隔;,括号中包含三个部分。第一个是我们将向上计数的数字的起点。第二个确保我们不会超出我们的限制,最后一个只是声明将使用++ 简写来计算数字。

    for($imageNumber = 1; $imageNumber <= $maxImageNumber; $imageNumber++) {
        // code goes here
    }
    

    在这个 for 循环中,我们现在可以生成文件名并将图像下载/保存到磁盘。第一行使用函数 str_pad() 将前导 0 添加到图像文件中(就像在您的示例中一样),然后将扩展名 .png 添加到名称中。这允许我们重用文件名来加载和保存。第二行通过结合基础文件名和图像文件名使用函数file_get_contents() 加载图像。在最后一行中,我们使用file_put_contents() 将我们之前加载的$fileData 保存到磁盘(使用本地目录和图像文件名)。

    $imageFileName = str_pad($imageNumber, 3, '0', STR_PAD_LEFT) . '.png';
    $fileData = file_get_contents($baseUrl . $imageFileName);
    file_put_contents($localDirectory . $imageFileName, $fileData);
    

    完整的代码应如下所示:

    <?php
    
    $baseUrl = 'http://www.web.com/images/';
    $localDirectory = 'downloaded_images/';
    $maxImageNumber = 10;
    
    for($imageNumber = 1; $imageNumber <= $maxImageNumber; $imageNumber++) {
        $imageFileName = str_pad($imageNumber, 3, '0', STR_PAD_LEFT) . '.png';
        $fileData = file_get_contents($baseUrl . $imageFileName);
    
        file_put_contents($localDirectory . $imageFileName, $fileData);
    }
    

    万一这一切都不起作用,您可以尝试一些方法

    • 检查$localDirectory 是否存在且可写。
    • 如果file_get_contents() 不起作用,您可以use curl instead
    • 确保执行此代码的计算机可以访问远程服务器

    【讨论】:

      【解决方案2】:

      非常感谢,但请想象图片位于 www.web.com/image_0001_big.png 和 www.web.com/image_002_big.png 等等...(最后是 web.com/image_0200_big.png)

      这不起作用(我不知道为什么)

          <?php
      
      $baseUrl = 'http://www.web.com/images';
      $localDirectory = 'downloaded_images/';
      $maxImageNumber = 200;
      $input='image_';
      
      for($imageNumber = 001; $imageNumber <= $maxImageNumber; $imageNumber++) {
          $imageFileName = str_pad($input, $imageNumber, 4, '_big', STR_PAD_LEFT) . '.png';
          $fileData = file_get_contents($baseUrl . $imageFileName);
      
          file_put_contents($localDirectory . $imageFileName, $fileData);
      }
      

      谢谢。你太棒了!谢谢您的帮助!我正在学习 PHP,我还是个初学者:(

      我的错误:

      警告:str_pad() 最多需要 4 个参数,5 个在 C:\xampp\htdocs\auto.php 第 9 行给出

      警告:file_get_contents(http://www.web.com/images/.png):打开流失败:HTTP 请求失败! HTTP/1.1 404 Not Found in C:\xampp\htdocs\auto.php 第 10 行

      【讨论】:

        【解决方案3】:

        我找到了一个半解决方案:_

            <?php
        
        $baseUrl = 'http://web.com/images';
        $localDirectory = 'downloaded_images/';
        $maxImageNumber = 400;
        $input='image0';
        $input2='big';
        $extension ='.png';
        
        for($imageNumber = 100; $imageNumber <= $maxImageNumber; $imageNumber++) {
            $fileData = file_get_contents($baseUrl . $input . $imageNumber . $input2 . $extension);
            file_put_contents($localDirectory . $imageNumber, $fileData);
        }
        
        ?>
        

        问题是当... 0001 0009 0010 !!我想告诉 php “嘿,总是 4 位数字”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-05
          • 2019-12-24
          • 1970-01-01
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多