php中adodbzip类实例

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • 一款简单实用的php操作mysql数据库类

    本文实例讲述了一款简单实用的php操作mysql数据库类.分享给大家供大家参考.具体如下: 复制代码 代码如下: /* 本款数据库连接类,他会自动加载sql防注入功能,过滤一些敏感的sql查询关键词,同时还可以增加判断字段 show table status的性质与show table类 获取数据库所有表名等.*/ @ini_set('mysql.trace_mode','off'); class mysql {  public $dblink;  public $pconnect;  priv

  • 简单实用的PHP防注入类实例

    本文实例讲述了简单实用的PHP防注入类.分享给大家供大家参考.具体如下: PHP防注入注意要过滤的信息基本是get,post,然后对于sql就是我们常用的查询,插入等等sql命令了,下面我给各位整理两个简单的例子,希望这些例子能给你网站带来安全. PHP防注入类代码如下: 复制代码 代码如下: <?php /**  * 参数处理类  * @author JasonWei  */ class Params {     public $get = array();       public $pos

  • php表单敏感字符过滤类

    本文实例讲述了php表单敏感字符过滤类及其用法.分享给大家供大家参考.具体分析如下: 复制代码 代码如下: /** * 表单生成验证文件 */ $_form = new formHtmlFind(); class formHtmlFind{         /**          * 输出表单函数          * $formKey  表单键          * $infoArray 更新时的原始信息数组          */           public function for

  • php中Array2xml类实现数组转化成XML实例

    本文实例讲述了php中Array2xml类实现数组转化成XML的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php class Array2xml {     var $xml;     function array2xml($array,$encoding='utf-8') {         $this->xml='<?xml version="1.0" encoding="'.$encoding.'"?>'

  • PHP多线程类及用法实例

    本文实例讲述了PHP多线程类及用法.分享给大家供大家参考.具体分析如下: 一般来说可通过WEB服务器来实现PHP多线程功能,当然,对多线程有深入理解的人都知道通过WEB服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程. 但不管怎么样,它还是能满足我们的一些需要的,在需要类似多线程的功能方面还是可以采用这个类,代码如下: 复制代码 代码如下: /** * @title: PHP多线程类(Thread) * @version: 1.0 * * PHP多线程应用示例: * requ

  • php网页病毒清除类

    本文实例讲述了php网页病毒清除类.分享给大家供大家参考.具体如下: 相信很多人的网页经常被无故的在php,asp,html,js 等文件后台加上一些木马地址,造成了很大的困扰!我以前有个站就是这样,所以一恨之下写了这段代码,文章虽然有一点浪费资源了,但是总比我们手动清除要好吧,下面我为讲讲程序的清除病毒的原理吧. 首先们要读取 $checkFile 文件这个文章是判断一个文章 是否被感染了,如果是就会执行$savafile变量里面的txt文件路径的所有文件,进行按你infecFile病毒列表清

  • php树型类实例

    本文实例讲述了php树型类.分享给大家供大家参考.具体分析如下: 该实例原理简单,学过数据结构的一看就明白是什么道理了,不过今天在使用时数据中出现了子节点id(71)小于父节点id(104).导致部分子节点没被存储入数组,修改了一下,实例代码如下: 复制代码 代码如下: <?php class tree {     var $data = array();     var $child = array(-1=>array());     var $layer = array(-1=>-1

  • php递归json类实例

    本文实例讲述了php递归json类的实现方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: <?php /*   * @ anthor:QD  * @ time:  2013-09-27  */ class json{  private $Arr = array(); //传入数组  //构造器  public function json($array)  {   if(!is_array($array)) return false;   $this->Arr = $arr

  • PHP内存缓存Memcached类实例

    本文实例讲述了PHP内存缓存Memcached类.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: <?PHP class MemcacheModel { private $mc = null; /** * 构造方法,用于添加服务器并创建memcahced对象 */ function __construct(){ $params = func_get_args(); $mc = new Memcache; //如果有多个memcache服务器 if( count($params)

  • PHP生成RSS文件类实例

    本文实例讲述了PHP生成RSS文件类文件.分享给大家供大家参考.具体如下: PHP RSS 生成类实例代码如下: 复制代码 代码如下: <?php if (defined('_class_rss_php')) return; define('_class_rss_php教程',1); /**    *  使用说明:  *  $rss = new rss('redfox','http://jb51.net/',"redfox's blog");  *  $rss->addit

  • 常见php数据文件缓存类汇总

    本文实例汇总了常见php数据文件缓存类.分享给大家供大家参考.具体分析如下: 数据文件缓存的做法我们常用的有php文件缓存与利用memcache来缓存数据,下面面我分别总结了memcache缓存数据与数据文件缓存.感兴趣的朋友可以参考一下. 1.对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了. 2.对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cac

随机推荐