php中adodbzip类实例


Posted in PHP onDecember 08, 2014

本文实例讲述了php中adodbzip类程序代码。分享给大家供大家参考。具体如下:

<?php 

/** 

 * AdodbZip 1.1 

 *  

 * 代码示例: 

 * include_once 'AdodbZip.php'; 

 * $db = AdodbZip::init(NewADOConnection('mysql教程t')); 

 * echo $db->GetOne('SELECT NOW()'); 

 *  

 * 流程说明: 

 * 1. 如果$extract_dir里的Adodb程序文件存在,并且$zip_file不存在;则使用$extract_dir里的Adodb程序文件。 

 * 2. 如果$extract_dir里的Adodb程序文件存在,并且$zip_file存在;则比较修改时间,$extract_dir里的Adodb程序文件更新为较新的。 

 * 3. 如果$extract_dir里的Adodb程序文件不存在,并且$zip_file存在;则$extract_dir里的Adodb程序文件从$zip_file解压获得。 

 * 4. 如果 $extract_dir里的Adodb程序文件不存在,并且$zip_file不存在;则从$zip_url下载Adodb的Zip文件,并解压Adodb的程序文件。 

 * 其他说明: 

 * 1. $extract_dir可自定义。如果将Adodb的Zip包完全解压到此目录,则可忽略$zip_url和$zip_file设置项,这和传统使用Adodb一样。 

 * 2. $zip_file可自定义。如果$zip_file存在,则可忽略$zip_url,这样可整站统一使用$zip_file。 

 * 3. $zip_url可自定义。可随时修改Adodb版本,此时$zip_file和$extract_dir最好使用默认值,各版本互不干扰。 

 * 4. $server、$user、$pwd、$db可自定义。默认是mysql默认值,此项只有调用AdodbZip::init方法后才起效果。 

 * 5. $charset可自定义。默认不改变编码,此项只有调用AdodbZip::init方法后才起效果。 

 * 6. AdodbZip::init方法里可增加Adodb初始化值。 

 */ 

 

/** 

 * AdodbZip启动项 

 */ 

// 设定参数 

AdodbZip::$zip_url = 'http://c.net教程works-kr-1.dl.sourceforge.net/project/adodb/adodb-php5-only/adodb-509-for-php5/adodb509.zip'; //[设置项]Adodb的Zip文件下载地址,文件比较大建议先下载或者解压 

AdodbZip::$zip_file = sys_get_temp_dir () . preg_replace ( '/^.*/(adodb.*?.zip)$/i', 'adodb/$1', AdodbZip::$zip_url ); //[设置项]Adodb的Zip文件缓存位置 

AdodbZip::$entry_dir = 'adodb5'; 

AdodbZip::$extract_dir = sys_get_temp_dir () . 'adodb/' . AdodbZip::$entry_dir; //[设置项]Adodb程序文件缓存位置 

AdodbZip::$server = 'localhost'; //[设置项]服务器  

AdodbZip::$user = 'root'; //[设置项]用户名 

AdodbZip::$pwd = ''; //[设置项]密码 

AdodbZip::$db = 'test'; //[设置项]数据库教程 

AdodbZip::$charset = ''; //[设置项]编码 

 

// 注册协议 

if (! in_array ( 'AdodbZip', stream_get_wrappers () )) { 

 stream_wrapper_register ( 'AdodbZip', 'AdodbZip' ); 

} 

// 定义常量 

if (! defined ( 'ADODB_DIR' )) { 

 define ( 'ADODB_DIR', 'AdodbZip:/' ); 

} 

// 包含程序 

require_once (ADODB_DIR . '/adodb.inc.php'); 

// $db = AdodbZip::init(NewADOConnection('mysqlt')); // [选择项]引用即定义$db 

// return AdodbZip::init(NewADOConnection('mysqlt')); // [选择项]引用即返回$db,注意只可引用一次。 

 

/** 

 * AdodbZip类定义 

 */ 

class AdodbZip { 

  

 /** 

  * Adodb变量 

  */ 

 public static $zip_url; 

 public static $zip_file; 

 public static $entry_dir; 

 public static $extract_dir; 

 public static $server; 

 public static $user; 

 public static $pwd; 

 public static $db; 

 public static $charset; 

  

 /** 

  * Stream变量 

  */ 

 private $handle; 

 public $context; 

  

 /** 

  * Adodb函数组 

  */ 

  

 /** 

  * init 

  * @param adodb &$adodb 

  * @return adodb 

  */ 

 public static function init(&$adodb) { 

  $adodb->Connect ( self::$server, self::$user, self::$pwd, self::$db ); 

  if(self::$charset!=''){ 

   $adodb->Execute('SET NAMES '.self::$charset.';'); 

  } 

  return $adodb; 

 } 

  

 /** 

  * Stream函数组 

  */ 

  

 /** 

  * __construct 

  */ 

 public function __construct() { 

 } 

  

 /** 

  * stream_cast 

  * @param int $cast_as 

  * @return resource 

  */ 

 public function stream_cast($cast_as) { 

  return false; 

 } 

  

 /** 

  * stream_close 

  */ 

 public function stream_close() { 

  fclose ( $this->handle ); 

 } 

  

 /** 

  * stream_eof 

  * @return bool 

  */ 

 public function stream_eof() { 

  return feof ( $this->handle ); 

 } 

  

 /** 

  * stream_flush 

  * @return bool 

  */ 

 public function stream_flush() { 

  return fflush ( $this->handle ); 

 } 

  

 /** 

  * stream_lock 

  * @param mode $options 

  * @return bool 

  */ 

 public function stream_lock($options) { 

  return flock ( $this->handle, $options ); 

 } 

  

 /** 

  * stream_open 

  * @param string $path 

  * @param string $mode 

  * @param int $options 

  * @param string &$opend_path 

  * @return bool 

  */ 

 public function stream_open($path, $mode, $options, &$opend_path) { 

  // 验证文件地址 

  if (! preg_match ( '/^.*?://(.*)$/', $path, $matches )) { 

   return false; 

  } 

  $tmp_file = self::$extract_dir . DIRECTORY_SEPARATOR . $matches [1]; 

  $entry_file = self::$entry_dir . '/' . str_replace ( '\', '/', $matches [1] ); 

  $zip_file = self::$zip_file; 

  // 验证程序文件 

  if (! file_exists ( $tmp_file ) || file_exists ( $zip_file ) && filectime ( $tmp_file ) < filectime ( $zip_file )) { 

   // 下载文件 

   if (! file_exists ( $zip_file )) { 

    // 目录处理 

    if (! is_dir ( dirname ( self::$zip_file ) )) { 

     if (mkdir ( dirname ( self::$zip_file ), 0777, true ) === false) { 

      header ( 'Content-type: text/html;charset=utf-8' ); 

      die ( '请创建目录 ' . $zip_dir ); 

     } 

    } 

    // 下载文件 

    if (! file_exists ( self::$zip_file )) { 

     $break = true; 

     do { 

      $url_arr = parse_url ( self::$zip_url ); 

      $fp = fsockopen ( $url_arr ['host'], isset ( $url_arr ['port'] ) ? ( int ) $url_arr ['port'] : 80, $errno, $errstr, 10 ); 

      if ($fp === false) { 

       break; 

      } 

      $out = "GET " . $url_arr ['path'] . " HTTP/1.0rnHost: " . $url_arr ['host'] . " rnConnection: closernrn"; 

      fputs ( $fp, $out ); 

      if (feof ( $fp )) { 

       break; 

      } 

      $buffer = fgets ( $fp, 1024 ); 

      if (! preg_match ( '/^HTTP/1.d 200 /i', $buffer )) { 

       break; 

      } 

      $content_length = false; 

      $content_start = false; 

      while ( ! feof ( $fp ) ) { 

       $buffer = fgets ( $fp, 1024 ); 

       if ($buffer === "rn") { 

        $content_start = true; 

        break; 

       } 

       if (preg_match ( '/^Content-Length:s*(d+)/i', $buffer, $matches )) { 

        $content_length = ( int ) $matches [1]; 

       } 

      } 

      if ($content_length === false || $content_start === false) { 

       break; 

      } 

      $content = stream_get_contents ( $fp ); 

      if ($content === false) { 

       break; 

      } 

      $result = file_put_contents ( self::$zip_file, $content ); 

      unset ( $content ); 

      if ($result === false) { 

       break; 

      } 

      fclose ( $fp ); 

     } while ( $break = false ); 

     if ($break) { 

      header ( 'Content-type: text/html;charset=utf-8' ); 

      die ( '请下载文件 <a href="' . self::$zip_url . '">' . self::$zip_url . '.zip</a > 保存为 ' . self::$zip_file ); 

     } 

    } 

   } 

   // 创建目录 

   $tmp_dir = dirname ( $tmp_file ); 

   if (! is_dir ( $tmp_dir )) { 

    if (mkdir ( $tmp_dir, 0777, true ) === false) { 

     header ( 'Content-type: text/html;charset=utf-8' ); 

     die ( '请创建目录 ' . $tmp_dir ); 

    } 

   } 

   // 打开压缩文件 

   $zip = zip_open ( $zip_file ); 

   if (! is_resource ( $zip )) { 

    return false; 

   } 

   // 寻找解压文件 

   do { 

    $entry = zip_read ( $zip ); 

    if (! is_resource ( $entry )) { 

     return false; 

    } 

    if (zip_entry_name ( $entry ) == $entry_file) { 

     break; 

    } 

   } while ( true ); 

   // 转存压缩文件 

   zip_entry_open ( $zip, $entry ); 

   file_put_contents ( $tmp_file, zip_entry_read ( $entry, zip_entry_filesize ( $entry ) ) ); 

   zip_entry_close ( $entry ); 

   zip_close ( $zip ); 

  } 

  // 打开文件 

  $this->handle = fopen ( $tmp_file, $mode ); 

  if (! is_resource ( $this->handle )) { 

   return false; 

  } 

  return true; 

 } 

  

 /** 

  * stream_read 

  * @param int $count 

  * @return string 

  */ 

 public function stream_read($count) { 

  return fread ( $this->handle, $count ); 

 } 

  

 /** 

  * stream_seek 

  * @param int $offset 

  * @param int $whence=SEEK_SET 

  * @return bool 

  */ 

 public function stream_seek($offset, $whence = SEEK_SET) { 

  return fseek ( $this->handle, $offset, $whence ); 

 } 

  

 /** 

  * stream_set_option 

  * @param int $option 

  * @param int $arg1 

  * @param int $arg2 

  * @return bool 

  */ 

 public function stream_set_option($option, $arg1, $arg2) { 

  return false; 

 } 

  

 /** 

  * stream_stat 

  * @return array 

  */ 

 public function stream_stat() { 

  return fstat ( $this->handle ); 

 } 

  

 /** 

  * stream_tell 

  * @return int 

  */ 

 public function stream_tell() { 

  return ftell ( $this->handle ); 

 } 

  

 /** 

  * stream_write 

  * @param string $data 

  * @return int 

  */ 

 public function stream_write($data) { 

  return fwrite ( $this->handle, $data ); 

 } 

  

 /** 

  * url_stat 

  * @param string $path 

  * @param int $flag 

  * @return array 

  */ 

 public function url_stat($path, $flag) { 

  if (! preg_match ( '/^.*?://(.*)$/', $path, $matches )) { 

   return false; 

  } 

  $tmp_file = self::$extract_dir . DIRECTORY_SEPARATOR . $matches [1]; 

  if (file_exists ( $tmp_file )) { 

   if ($flag & STREAM_URL_STAT_LINK) { 

    return lstat ( $tmp_file ); 

   } else { 

    return stat ( $tmp_file ); 

   } 

  } 

  if ($flag & STREAM_URL_STAT_QUIET) { 

   $arr = array ('dev' => 0, 'ino' => 0, 'mode' => 0, 'nlink' => 0, 'uid' => 0, 'gid' => 0, 'rdev' => 0, 'size' => 0, 'atime' => 0, 'mtime' => 0, 'ctime' => 0, 'blksize' => 0, 'blocks' => 0 ); 

   return array_merge ( array_values ( $arr ), $arr ); 

  } 

  return false; 

 } 

} 

?>

使用实例代码如下:
<?php 

 include_once 'AdodbZip.php';  

 $db = AdodbZip::init(NewADOConnection('mysqlt'));  

 echo $db->GetOne('SELECT NOW()');  

 ?>

也是两步.

1. 包含AdodbZip.php文件

2. AdodbZip::init(...)函数对adodb连接类进行初始化

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
超级简单的发送邮件程序
Oct 09 PHP
PHP4实际应用经验篇(7)
Oct 09 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
php生成zip压缩文件的方法详解
Jun 09 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
PHP常用的排序和查找算法
Aug 06 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
php fseek函数读取大文件两种方法
Oct 12 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 #PHP
PHP内存缓存Memcached类实例
Dec 08 #PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 #PHP
PHP模块memcached使用指南
Dec 08 #PHP
PHP原生函数一定好吗?
Dec 08 #PHP
thinkphp中ajax与php响应过程详解
Dec 08 #PHP
一款简单实用的php操作mysql数据库类
Dec 08 #PHP
You might like
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
phpfpm的作用和用法
2019/10/10 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Python 函数返回值的示例代码
2019/03/11 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
《庐山的云雾》教学反思
2014/04/22 职场文书
活动总结书
2014/05/08 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
开学典礼校长致辞
2015/07/29 职场文书
初中英语教学随笔
2015/08/15 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript