加入收藏 | 设为首页 | 会员中心 | 我要投稿 怀化站长网 (https://www.0745zz.cn/)- 语音技术、云资源管理、物联设备、云计算、决策智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php中adodbzip类实例

发布时间:2022-06-22 08:44:16 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了php中adodbzip类,以实例形式详细讲述了adodbzip类文件的实现方法与使用技巧,注释中包含详尽的功能说明,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php中adodbzip类程序代码,分享给大家供大家参考,具体如下: ?php /** * Adod
  这篇文章主要介绍了php中adodbzip类,以实例形式详细讲述了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程序设计有所帮助。

(编辑:怀化站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读