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 相关文章推荐
php学习之变量的使用
May 29 PHP
php 调试利器debug_print_backtrace()
Jul 23 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
php类的定义与继承用法实例
Jul 07 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
功能强大的PHP发邮件类
Aug 29 PHP
php将html转为图片的实现方法
May 19 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
php集成开发环境详解
Sep 24 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新手上路(十四)
2006/10/09 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
JavaScript 对象模型 执行模型
2009/12/06 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
python基础教程之序列详解
2014/08/29 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
如何理解python面向对象编程
2020/06/01 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
国贸专业的职业规划书
2014/03/15 职场文书
物理教育专业求职信
2014/06/25 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
优秀党员先进材料
2014/12/18 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
民事代理词范文
2015/05/25 职场文书
公司管理制度范本
2015/08/03 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android