自己写的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&amp;java(二)
Oct 09 PHP
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
使用 MySQL 开始 PHP 会话
Dec 21 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
用PHP读取超大文件的实例代码
Apr 01 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
php单文件版在线代码编辑器
Mar 12 PHP
3种php生成唯一id的方法
Nov 23 PHP
详解 PHP加密解密字符串函数附源码下载
Dec 18 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 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购物车实现代码
2011/10/10 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
PHP学习笔记之session
2018/05/06 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
Vuex 入门教程
2018/01/10 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
学习python 之编写简单乘法运算题
2016/02/27 Python
独特的python循环语句
2016/11/20 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
通过python3实现投票功能代码实例
2019/09/26 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
房地产销售员的自我评价分享
2013/12/04 职场文书
二年级体育教学反思
2014/01/15 职场文书
教师四风问题整改措施
2014/09/25 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
销售内勤岗位职责
2015/02/10 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
DIY胆机必读:各国电子管评价
2022/04/06 无线电