自己写的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
php 文件夹删除、php清除缓存程序
Aug 25 PHP
php 冒泡排序 交换排序法
May 10 PHP
php文件上传的简单实例
Oct 19 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 PHP
laravel高级的Join语法详解以及使用Join多个条件
Oct 16 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 PHP
详解PHP设计模式之依赖注入模式
May 25 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
与数据库连接
2006/10/09 PHP
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
一个很不错的PHP翻页类
2009/06/01 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
四年级下册教学反思
2014/02/01 职场文书
员工趣味活动方案
2014/08/27 职场文书
出租房屋协议书
2014/09/14 职场文书
党建工作整改措施
2014/10/28 职场文书
2014年政协工作总结
2014/12/09 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
2015年安全工作总结范文
2015/04/02 职场文书