自己写的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中在数据库中保存Checkbox数据(2)
Oct 09 PHP
如何开发一个虚拟域名系统
Oct 09 PHP
echo(),print(),print_r()之间的区别?
Nov 19 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
Zend Studio使用技巧两则
Apr 01 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 PHP
php中pcntl_fork详解
Apr 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
PHP函数常用用法小结
2010/02/08 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
js实现随机点名程序
2020/09/17 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
Python 字典dict使用介绍
2014/11/30 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
Python中如何导入类示例详解
2019/04/17 Python
Python中base64与xml取值结合问题
2019/12/22 Python
Django 返回json数据的实现示例
2020/03/05 Python
python 通过文件夹导入包的操作
2020/06/01 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
大学生个人总结的自我评价
2013/10/05 职场文书
房屋改造计划书
2014/01/10 职场文书
学习计划书怎么写
2014/09/15 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
新郎接新娘保证书
2015/05/08 职场文书
大学生村官入党自传
2015/06/26 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
php去除数组中为0的元素的实例分析
2021/11/17 PHP