自己写的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(1)
Oct 09 PHP
如何分别全角和半角以避免乱码
Oct 09 PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
PHP 日期加减的类,很不错
Oct 10 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
开启PHP的伪静态模式
Dec 31 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 PHP
PHP下载文件函数与用法示例
Sep 27 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
动易数据转成dedecms的php程序
2007/04/07 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
简单实现node.js图片上传
2016/12/18 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
使用Python对Excel进行读写操作
2017/03/30 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
python对excel文档去重及求和的实例
2018/04/18 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
Oracle快照(snapshot)
2015/03/13 面试题
小学生三分钟演讲稿
2014/08/18 职场文书
2014年变电站工作总结
2014/12/19 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle