自己写的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 相关文章推荐
php写的带缓存数据功能的mysqli类
Sep 06 PHP
浅谈discuz密码加密的方式
May 22 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
php简单备份与还原MySql的方法
May 09 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 PHP
PHP数组访问常用方法解析
Sep 05 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小技巧之过滤ascii控制字符
2014/05/14 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
微信小程序实现电子签名功能
2020/07/29 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
八年级物理教学反思
2014/01/19 职场文书
岗位职责说明书
2014/05/07 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
股份转让协议书范本
2015/01/27 职场文书
论语读书笔记
2015/06/26 职场文书
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js