自己写的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笔试题
Aug 04 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
php preg_replace替换实例讲解
Nov 04 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
Mar 10 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
Jun 09 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
May 01 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
IStream与TStream之间的相互转换
2008/08/01 PHP
php中常用的预定义变量小结
2012/05/09 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP解析RSS的方法
2015/03/05 PHP
Yii快速入门经典教程
2015/12/28 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
Highcharts入门之简介
2016/08/02 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
Python写的一个简单DNS服务器实例
2014/06/04 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
小区门卫工作职责
2013/12/14 职场文书
关于人生的感言
2014/01/17 职场文书
学习礼仪心得体会
2014/09/01 职场文书
实习计划书范文
2015/01/16 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
高一语文教学反思
2016/02/16 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL