自己写的php curl库实现整站克隆功能

有时候经常会用到一些在线手册,比如国内或国外的,有些是访问速度慢,有些是作者直接吧网站关闭了,有些是服务器总是宕机,所以还是全盘克隆到自己服务器比较爽。

库特点:

给定一初始连接,初始链接以下的层级所有文件会拷贝到本地。
多次克隆可以配置是否覆盖。
可以配置是否下载图片。
所有链接替换为相对链接,所以可以随便rewrite。
绝对不会出现文件覆盖等问题。
最NB的特点是,没有比这更NB的库了。

SVN:http://svn.phpdr.net/repos/ares/php/library/trunk/lib/CurlMulti/MyCurl/Clone.php

我们下载:http://xiazai.jb51.net/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;
 }
}

(0)

相关推荐

  • php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误

    16.__toString()方法 我们前面说过在类里面声明"- "开始的方法名的方法(PHP 给我们提供的),都是在 某一时刻不同情况下自动调用执行的方法,"__toString()"方法也是一样自动被调用的,是在 直接输出对象引用时自动调用的, 前面我们讲过对象引用是一个指针,比如说:"$p=new Person()"中,$p 就是一个引用,我们不能使用echo 直接输出$p,这样会输出"Catchable fatal error:

  • PHP对象克隆clone用法示例

    本文实例讲述了PHP对象克隆clone用法.分享给大家供大家参考,具体如下: 浅克隆:只是克隆对象中的非对象非资源数据,即对象中属性存储的是对象类型,则会出现克隆不完全 <?php class B{ public $val = 10; } class A{ public $val = 20; public $b; public function __construct(){ $this->b = new B(); } } $obj_a = new A(); $obj_b = clone $ob

  • PHP类和对象相关系统函数与运算符小结

    本文总结了PHP类和对象相关系统函数与运算符.分享给大家供大家参考,具体如下: 系统函数 class_exists() 判断某个类是否存在 interface_exists() 判断接口是否存在 get_class() / __CLASS__ 获取某个对象所处的类名 get_parent_class() 获取某个对象所属父类的类名 get_class_methods() 获取一个类所有方法,返回索引数组 get_class_vars() 获取一个类所有属性,下标为属性名 get_declared

  • 关于phpwind克隆用户的方法

    作者:lcx 来源:vbs小铺 首先将字符集中的174转一下,wscript.echo "%"&CStr(Hex(ascb(chrb(174)))),url编码的结果为%AE.当然你用别的字符集里(129-255)的也可以, 我用的是174.然后用achilles(安焦有下),修改post数据,在用户名后加上%AE提交即可.你用别的即时提交工具,好比mini browse也是可以的,这样可以防止注册码的问题.

  • PHP编程中的__clone()方法使用详解

    可以在对象类中定义一个__clone()方法来调整对象的克隆行为.此方法的代码将在克隆操作期间执行.除了将所有现有对象成员复制到目标对象之外,还会执行__clone()方法指定的操作.下面修改Corporate_Drone类,增加以下方法: function __clone() { $this->tiecolor = "blue"; } 之后,创建一个新的Corporate_Drone对象,增加employeeid成员的值,克隆这个对象,然后输出一些数据,从而显示克隆对象的tie

  • php实现对象克隆的方法

    本文实例讲述了php实现对象克隆的方法.分享给大家供大家参考.具体如下: <?php //定义类staff,其中包括属性id和name class staff { private $id; private $name; function setID($id) { $this->id = $id; } function getID() { return $this->id; } function setName($name) { $this->name = $name; } func

  • PHP简单遍历对象示例

    本文实例讲述了PHP简单遍历对象的方法.分享给大家供大家参考,具体如下: 对象可以使用foreach进行遍历,只能遍历属性以及访问范围内的 <?php class bee{ public $a = 1; protected $b = 2; private $c = 3; } $obj = new bee(); foreach($obj as $key => $val){ echo $key.'-'.$val; } 运行结果如下: a-1 更多关于PHP相关内容感兴趣的读者可查看本站专题:<

  • PHP数据对象PDO操作技巧小结

    本文实例讲述了PHP数据对象PDO操作技巧.分享给大家供大家参考,具体如下: PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. <?php try { $dsn = "mysql:host=localhost; port=3306; dbname=wsq_hotel; charset=utf-8"; $user = 'root'; $psw ='root'; $pdo = new PDO($dsn,$user,$psw); $sql = 'sele

  • 自己写的php curl库实现整站克隆功能

    有时候经常会用到一些在线手册,比如国内或国外的,有些是访问速度慢,有些是作者直接吧网站关闭了,有些是服务器总是宕机,所以还是全盘克隆到自己服务器比较爽. 库特点: 给定一初始连接,初始链接以下的层级所有文件会拷贝到本地. 多次克隆可以配置是否覆盖. 可以配置是否下载图片. 所有链接替换为相对链接,所以可以随便rewrite. 绝对不会出现文件覆盖等问题. 最NB的特点是,没有比这更NB的库了. SVN:http://svn.phpdr.net/repos/ares/php/library/tru

  • PHP的cURL库功能简介 抓取网页、POST数据及其他

    无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,反应釜cURL 是一个功能强大的PHP库.本文主要讲述如果使用这个PHP库. 启用 cURL 设置 首先,我们得先要确定我们的PHP是否开启了这个库,你可以通过使用php_info()函数来得到这一信息. 复制代码 代码如下: <?php phpinfo(); ?> 如果你可以在网页上看到下面的输出,那么表示cURL库已被开启. 如果你看到的话,那么你需要设置你的PHP并开启这个库.如果你是在

  • 用JS写的一个Ajax库(实例代码)

    myajax是一个用js编写的一个跨浏览器的ajax库,支持get, post, jsonp请求,精巧,简单. 一.发送GET请求: myajax.get({ <span style="white-space:pre"> </span>data: {}, //参数 url: "", //请求地址 //发生错误是调用 error: function(data) { }, //请求成功调用 success: function(data){ <

  • 使用mysql_udf与curl库完成http_post通信模块示例

    使用mysql_udf与curl库完成http_post通信模块(mysql_udf,multi_curl,http,post) 这个模块其目前主要用于xoyo江湖的sns与kingsoft_xoyo自主研发的TCSQL数据库做数据同步,当有feed插入sns数据库,使用触 发器调用该模块,向tcsql数据库发送同步数据.也可以使用该模块与其它使用socket接口的数据库或程序做转发与同步.http_post模块主要使用mysql_udf接口,与curl库两部分技术.mysql_udf是mysq

  • PHP的cURL库简介及使用示例

    使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库. PHP中的CURL函数库(Client URL Library Function) 复制代码 代码如下: curl_close - 关闭一个curl会话 curl_copy_handle - 拷贝一个curl连接资源的所

  • C++调用libcurl开源库实现邮件的发送功能流程详解

    目录 1.为啥要选择libcurl库去实现邮件的发送 2.调用libcurl库的API接口实现邮件发送 3.构造待发送的邮件内容 4.开通163发送邮件账号的SMTP服务 5.排查接收的邮件内容为空的问题 libcurl中封装了支持这些协议的网络通信模块,支持跨平台,支持Windows,Unix,Linux等多个操作系统.libcurl提供了一套统一样式的API接口,我们不用关注各种协议下网络通信的实现细节,只需要调用这些API就能轻松地实现基于这些协议的数据通信.本文将简单地讲述一下使用lib

  • Python实现并行抓取整站40万条房价数据(可更换抓取城市)

    写在前面 这次的爬虫是关于房价信息的抓取,目的在于练习10万以上的数据处理及整站式抓取. 数据量的提升最直观的感觉便是对函数逻辑要求的提高,针对Python的特性,谨慎的选择数据结构.以往小数据量的抓取,即使函数逻辑部分重复,I/O请求频率密集,循环套嵌过深,也不过是1~2s的差别,而随着数据规模的提高,这1~2s的差别就有可能扩展成为1~2h. 因此对于要抓取数据量较多的网站,可以从两方面着手降低抓取信息的时间成本. 1)优化函数逻辑,选择适当的数据结构,符合Pythonic的编程习惯.例如,

  • C语言使用openSSL库AES模块实现加密功能详解

    本文实例讲述了C语言使用openSSL库AES模块实现加密功能.分享给大家供大家参考,具体如下: 概述 在密码学里面一共有3中分类: 1.对称加密/解密 对称加密比较常见的有DES/AES.加密方和解密方都持有相同的密钥.对称的意思就是加密和解密都是用相同的密钥. 2.非对称加密/解密 常见的加密算法DSA/RSA.如果做过Google Pay的话,应该不会陌生.非对称意味着加密和解密使用的密钥不是相同的.这种应用的场合是需要保持发起方的权威性,比如Google中一次支付行为,只能Google通

  • Python基于OpenCV库Adaboost实现人脸识别功能详解

    本文实例讲述了Python基于OpenCV库Adaboost实现人脸识别功能.分享给大家供大家参考,具体如下: 以前用Matlab写神经网络的面部眼镜识别算法,研究算法逻辑,采集大量训练数据,迭代,计算各感知器的系数...相当之麻烦~而现在运用调用pythonOpenCV库Adaboost算法,无需知道算法逻辑,无需进行模型训练,人脸识别变得相当之简单了. 需要用到的库是opencv(open source computer vision),下载安装方式如下: 使用pip install num

  • ASP.NET Core扩展库之Http请求模拟功能的使用

    如今,完全独立的业务应用几乎不存在,不管是在企业内部微服务之间的调用,还是与外部第三方服务的调用,Http的API交互是常见的场景,这些实际情况给我们的开发带来了比较大的挑战,一是第三方服务可能会牵制我们的开发进度,特别是在多团队开发的情况下,由于依赖于其他团队的服务,有时候需要等待其他团队的进度,导致自己团队的无效等待.有时因为其他团队的延期,导致团队的被动延期.二是第三方服务的质量问题或开发过程中的频繁更新导致的部署问题,将严重拖累自己团队的开发进度,同时让你无法专心的开发自己的服务.三是单

随机推荐