自己写的php curl库实现整站克隆功能


Posted in PHP onFebruary 12, 2015

有时候经常会用到一些在线手册,比如国内或国外的,有些是访问速度慢,有些是作者直接吧网站关闭了,有些是服务器总是宕机,所以还是全盘克隆到自己服务器比较爽。

库特点:

给定一初始连接,初始链接以下的层级所有文件会拷贝到本地。
多次克隆可以配置是否覆盖。
可以配置是否下载图片。
所有链接替换为相对链接,所以可以随便rewrite。
绝对不会出现文件覆盖等问题。
最NB的特点是,没有比这更NB的库了。

SVN:http://svn.phpdr.net/repos/ares/php/library/trunk/lib/CurlMulti/MyCurl/Clone.php

三水点靠木下载:http://xiazai.3water.com/201502/other/CurlMulti.rar

克隆结果展示(这个克隆操作几秒钟就完成了):

克隆源网站:http://www.laruence.com/manual/
克隆结果:http://manual.phpdr.net/yaf/

Demo代码:

<?php

class Controller_Spider extends MyYaf_Controller_Base{

 function init(){

  parent::init();

  if(!$this->getRequest()->isCli()){

      Ares_Http::error403();

  }

  include 'CurlMulti/CurlMulti.php';

  include 'CurlMulti/MyCurl.php';

  include 'phpQuery.php';

 }

}
<?php

class YafdocController extends Controller_Spider {

 function init() {

  parent::init ();

  include 'CurlMulti/MyCurl/Clone.php';

 }

 function indexAction() {

  $url = 'http://www.laruence.com/manual';

  $dir = Yaf_Application::app ()->getAppDirectory () . '/data/manual';

  $cacheDir = $this->getBaseDir () . '/cache/curl';

  if (! is_dir ( $cacheDir )) {

   mkdir ( $cacheDir );

  }

  $curl = new CurlMulti ();

  $curl->maxThread = 10;

  $curl->cache ['enable'] = true;

  $curl->cache ['enableDownload'] = true;

  $curl->cache ['dir'] = $cacheDir;

  $curl->cache ['compress'] = true;

  $clone = new MyCurl_Clone ( $curl, $url, $dir );

  $clone->overwrite = true;

  $clone->start ();

  return false;

 }

}
PHP 相关文章推荐
2.PHP入门
Oct 09 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
解析strtr函数的效率问题
Jun 26 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
php检查字符串中是否有外链的方法
Jul 29 PHP
php+ajax实现无刷新分页
Nov 18 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 #PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 #PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 #PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 #PHP
PHP获取数组长度或某个值出现次数的方法
Feb 11 #PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 #PHP
php使用类继承解决代码重复的问题
Feb 11 #PHP
You might like
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
python3 实现的人人影视网站自动签到
2016/06/19 Python
实例讲解Python爬取网页数据
2018/07/08 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
PyTorch预训练的实现
2019/09/18 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
家长给小学生的评语
2014/01/30 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
安全温馨提示语大全
2015/07/14 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL