PHP小偷程序的设计与实现方法详解


Posted in PHP onOctober 15, 2016

本文实例讲述了PHP小偷程序的设计与实现方法。分享给大家供大家参考,具体如下:

其实自己一直想做一个内涵图片的网站,以前的想法是做一个CMS,然后自己上传一些图片。。

开始真这么做的,没什么动力。之后就放弃了,后来研究了一个CURL。反正还是把这个想法实现比较好。

用PHP盗图,就好比:穿着袜子穿凉鞋一样。虽然没问题,但看着确实蛋疼。

我先说一下我对PHP小偷程序的设计,PHP不支持多线程,这样就只能分先后顺序来做了

获取到目标网站的HTML页面+解析HTML页面获取到图片存储的连接+用二进制方式读取并且保存在本地+重命名  == 流程OK

你现在用两种方式来运行程序:

第一种:用游览器跑程序(多半会卡死,设置超时和内存大小就OK,你之间比较难等)

另一种:用命令行启动PHP(不存在PHP超时的问题)

/**
*HTML解析类
*author:Summer
*date:2014-08-22
**/
 class Analytical{
  public function __construct()
  {
     require_once('Class/SimpleHtmlDom.class.php');
     $this->_getDir();
  }
  private function _getDir()
  {
    $dir = "../TMP/HTML/Results/1";
    $imgBIG = "../TMP/IMG/JPG/BIG";
    $it = new DirectoryIterator($dir."/");
    foreach($it as $file) {
     //用isDot ()方法分别过滤掉“.”和“..”目录
     if (!$it->isDot()) {
       $dirs = $dir."/".$file ;
       $tmp = explode(".",$file);
       $html = file_get_html($dirs);
       $ulArr = $html->find('img');
       foreach($ulArr as $key=>$value)
       {
         if ($value->class == "u")
         {
           $url = http://3water.com.$value->src;
           $infomation = file_get_contents($url);
           $result = $this->saveHtml($infomation, $imgBIG, $tmp['0'].".jpg");
           if($result)
           {
            echo $file."OK\n";
           }
         }
       }
     }
   }
  }
   private function saveHtml($infomation,$filedir,$filename)
   {
     if(!$this->mkdirs($filedir))
     {
       return 0;
     }
     $sf = $filedir."/".$filename;
     $fp=fopen($sf,"w"); //写方式打开文件
     return fwrite($fp,$infomation); //存入内容
     fclose($fp); //关闭文件
   }
   //创建目录
   private function mkdirs($dir)
   {
     if(!is_dir($dir))
     {
       if(!$this->mkdirs(dirname($dir))){
         return false;
       }
       if(!mkdir($dir,0777)){
         return false;
       }
     }
     return true;
   }
 }
new Analytical();

上面这个是HTML页面获取IMG的连接地址的过程。

用到了两个比较重要的东西:

1.PHP的DOM解析扩展simplehtmldom

2.PHP的目录迭代器

理解这两个东西了。这个分析类就没难点了。

在说说如果获取需要解析的页面呢?

其实跟上面的原理的是一样的。主要获取页面的URL,然后通过CURL去读取页面,返回一个HTML字符串,

再通过保存函数包HTML页面保存到本地。

我这里是因为要采集页面里面的图片(为了防止别人防盗链),所以设计的比较复杂。

而且为什么要分开,是因为simplehtmldom对象是很庞大的,而且拆开进行这样对流程更加清楚。

肯定有人会说,那为什么不用正则去匹配就跳过了HTML保存到本地的环节了,BINGO!我只能懒得写正则而已。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP读取flv文件的播放时间长度
Sep 03 PHP
php图片的裁剪与缩放生成符合需求的缩略图
Jan 11 PHP
PHP设计模式之责任链模式的深入解析
Jun 13 PHP
php中异常处理方法小结
Jan 09 PHP
twig里使用js变量的方法
Feb 05 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
基于php判断客户端类型
Oct 14 #PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 #PHP
php生成与读取excel文件
Oct 14 #PHP
基于PHP实现用户注册登录功能
Oct 14 #PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 #PHP
php车辆违章查询数据示例
Oct 14 #PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 #PHP
You might like
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
django实现模型字段动态choice的操作
2020/04/01 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
加拿大探亲邀请信
2014/01/28 职场文书
八一慰问活动方案
2014/02/07 职场文书
高一新生军训方案
2014/05/12 职场文书
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android