自己写的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中的string类型使用说明
Jul 27 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
PHP正则验证Email的方法
Jun 15 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
Oct 22 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
php基于SQLite实现的分页功能示例
Jun 21 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 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和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
你常见到的runtime exception
2016/09/05 面试题
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
英语文学专业学生的自我评价
2013/10/31 职场文书
户外婚礼策划方案
2014/02/08 职场文书
家长通知书家长评语
2014/04/17 职场文书
服务口号大全
2014/06/11 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
python面向对象版学生信息管理系统
2021/06/24 Python