PHP数据处理之下载远程图片到本地

一、场景

有这么一个地址https://book.yunzhan365.com/yngc/gmhg/mobile/index.html?from=groupmessage&isappinstalled=0我们希望能把这本书下载到本地,用来学习,页面如下:

在这里插入图片描述

二、猜想

  • 1、大家可以看到这个页面类似一张图片,应该是有图片地址什么的。我们可以直接F12去选中元素,尝试查看图片的地址
  • 2、大家可以看到下方中间我圈出了一个红色的1/100,目前猜测:这个大概意思的图片的数量

三、验证猜想

1、F12尝试查看图片地址

  • 如下图,可以发现并没有我们意料中的图片地址
    在这里插入图片描述

2、那我们就查看是不是在网络数据中

  • F12之后,先点击删除,然后依次点击: 网络 -> 所有 -> F5刷新页面 -> 随便点一个链接地址 -> 点击响应,看一下有没有哪个响应是返回一直图片的,如下图

在这里插入图片描述

3、验证其它页面数据是否同理

  • 我们可以发现,往右边翻的时候:页面会提前缓存下一页(就是两张图片)的数据:意思就是第一页就缓存了(1,2,3)3张图片;第二页(2,3)提前读取了下一页的(4,5)两张图片,以此类推…读到(14,15)页的时候,提前读取了(16,17)页的图片。
  • 往左边翻页反之:第100页,提前读取(98,99)页的数据;第(98,99)页,提前读取(96,97)页的数据
    在这里插入图片描述

4、图片地址

四、代码思路

根据以上结论,可以出一道题:已知有100张图片,https://book.yunzhan365.com/yngc/gmhg/files/thumb/page.jpg,page的值为[1, 100],请把这些图片下载到本地

【编码思路(这里跟语言没什么关系)】

  • 1、for循环从1-100
  • 2、远程图片下载到本地
  • 3、(递归)创建文件夹,给文件夹最大权限(这个看情况)

五、实现代码

//我这个Demo在命令行中执行:在命令行执行的话需要配置PHP的环境变量
public function test() {
    
    
    set_time_limit(0); //在命令行执行不存在超时问题,可以不设置这一句;如果是在浏览器执行,为防止超时,请设置这一句
    $pageTotal = 100;
    for ($page = 1; $page <= $pageTotal; $page ++) {
    
    
        $url = "https://book.yunzhan365.com/yngc/gmhg/files/mobile/{
      
      $page}.jpg";
        self::download($url, 'images/厨房抽油烟风机/');
        echo "第[{
      
      $page}]张图片下载完成" . PHP_EOL;
    }
}

function download($url, $path = 'images/') {
    
    
    if (!file_exists($path)) {
    
    
        self::createDirectory($path);
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    $file = curl_exec($ch);
    curl_close($ch);
    $filename = pathinfo($url, PATHINFO_BASENAME);
    $resource = fopen($path . $filename, 'a');
    fwrite($resource, $file);
    fclose($resource);
}

function createDirectory($dir) {
    
    
    return  is_dir ( $dir ) or self::createDirectory(dirname( $dir )) and  (mkdir ( $dir , 0777) && chmod($dir, 0777));
}

六、结果

代码在命令行执行打印截图

在这里插入图片描述

文件夹效果图.jpg

在这里插入图片描述

七、其他

猜你喜欢

转载自blog.csdn.net/qq_36025814/article/details/111474858