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

news/2024/11/25 9:28:54/

  • 一、场景
  • 二、猜想
  • 三、验证猜想
    • 1、F12尝试查看图片地址
    • 2、那我们就查看是不是在网络数据中
    • 3、验证其它页面数据是否同理
    • 4、图片地址
  • 四、代码思路
  • 五、实现代码
  • 六、结果
    • 代码在命令行执行打印截图
    • 文件夹效果图.jpg
  • 七、其他

一、场景

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

在这里插入图片描述

二、猜想

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

三、验证猜想

1、F12尝试查看图片地址

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

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

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

在这里插入图片描述

  • 还真有一个地址是响应图片的,我们再点击消息头,查看图片地址:https://book.yunzhan365.com/yngc/gmhg/files/thumb/1.jpg?1582796421=&x-oss-process=image/format,webp,把图片地址输入到浏览器访问,浏览器正常显示一张图片。
    在这里插入图片描述

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/1.jpg,
  • https://book.yunzhan365.com/yngc/gmhg/files/thumb/2.jpg,
  • https://book.yunzhan365.com/yngc/gmhg/files/thumb/100.jpg

四、代码思路

根据以上结论,可以出一道题:已知有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

在这里插入图片描述

七、其他

  • 我要尝试下载更多:http://www.yunzhan365.com/explore/
  • PHP设置环境变量

http://www.ppmy.cn/news/741434.html

相关文章

数学建模常用模型(三):层次分析法

数学建模常用模型&#xff08;三&#xff09;&#xff1a;层次分析法 层次分析法&#xff08;Analytic Hierarchy Process&#xff0c;AHP&#xff09;是一种用于多准则决策分析的方法&#xff0c;由美国运筹学家托马斯L赛蒂&#xff08;Thomas L. Saaty&#xff09;于1970年提…

持续集成工具Jenkins安装和部署

前言 Jenkins的执行流程图如下&#xff1a; 1. 前期准备 1.1 安装JDK 目前新版本的Jenkins对JDK的要求基本上都在JDK11以上&#xff0c;所以我这边将我服务器的JDK版本升级成为JDK11。 具体升级步骤如下&#xff1a; 下载安装包 官网可能需要注册账号&#xff0c;这里我…

阿里秋招面试全解析(含内推岗)

每个技术人都有个大厂梦&#xff0c;我觉得这很正常&#xff0c;并不是饭后的谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司&#xff0c;如果说能够在这样的公司锻炼几年&#xff0c;相信对自己…

阿里职位层级解读(附P级详细要求)

1P 序列和 M 序列 阿里的等级&#xff0c;简单的来说可以认为是 P 序列和 M 序列&#xff0c;因为阿里巴巴是从B2B发家的&#xff0c;那时候需要管理大量的销售&#xff0c;所以建立了强大并且领先的管理体系&#xff0c;这就是 M 序列&#xff0c;随着技术的重要性不断的提高&…

阿里2019社招内推!阿里云高级专家(P8)帮内推!投递简历邮箱看正文!

阿里云项目组社招&#xff0c;有大量职位空缺&#xff01;欢迎大家投递简历到chao.wangalibaba-inc.com&#xff0c;可内推&#xff01; 优秀的在校同学也欢迎投递简历&#xff0c;参加实习和校招&#xff01;内推面试机会很大&#xff0c;请大家把握机会&#xff01; 岗位描…

华为2018校招

题目&#xff11; 题目描述 请一个在字符串中找出连续最长的数字串&#xff0c;并把这个串的长度返回&#xff1b;如果存在长度相同的连续数字串&#xff0c;返回最后一个连续数字串&#xff1b; 注意&#xff1a;数字串只需要是数字组成的就可以&#xff0c;并不要求顺序&am…

2019届华为秋招面试

其实秋招过去已经很久了&#xff0c;距离我面试华为8.17也快三个月了&#xff0c;有些已经记忆模糊&#xff0c;但是还是想记录一下。 秋招开始的比较早&#xff0c;报了华为的优招&#xff0c;大概7月份收到笔试通知&#xff0c;报的软件测试岗&#xff0c;笔试与软件开发是一…

华为云与阿里云简要区别

一、SLB 阿里云负载均衡SLB 是什么&#xff1f;如何使用&#xff1f;当你手里有很多台云服务器之后&#xff0c;需要同时为一个业务提供后台服务&#xff0c;这就涉及到服务器调度的问题。拿电商网站举例子&#xff0c;每年双11、双12活动的时候&#xff0c;各大电商网站流量激…