自己写的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下判断数组中是否存在相同的值array_unique
Mar 25 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
Apr 14 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
php生成带logo二维码方法小结
Apr 08 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
php实现图片上传、剪切功能
May 07 PHP
php中序列化与反序列化详解
Feb 13 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP检查URL包含特定字符串实例方法
Feb 11 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 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
8个PHP数组面试题
2015/06/23 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
用JS控制回车事件的代码
2011/02/20 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
理解javascript回调函数
2014/12/28 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
js省市区级联查询(插件版&amp;无插件版)
2017/03/21 Javascript
Vuex提升学习篇
2018/01/11 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
python flask框架实现重定向功能示例
2019/07/02 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
雅虎笔试题(字符串操作)
2015/03/24 面试题
关于礼仪的演讲稿
2014/01/04 职场文书
宿舍打麻将检讨书
2014/01/24 职场文书
食品安全承诺书范文
2014/08/29 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
亲属关系公证书样本
2015/01/23 职场文书
2015年人事专员工作总结
2015/04/29 职场文书
上学路上观后感
2015/06/16 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
Redis实现订单过期删除的方法步骤
2022/06/05 Redis