php中adodbzip类实例
本文实例讲述了php中adodbzip类程序代码。分享给大家供大家参考。具体如下:
<?php
/**
 *AdodbZip1.1
 * 
 *代码示例:
 *include_once'AdodbZip.php';
 *$db=AdodbZip::init(NewADOConnection('mysql教程t'));
 *echo$db->GetOne('SELECTNOW()');
 * 
 *流程说明:
 *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
//returnAdodbZip::init(NewADOConnection('mysqlt'));//[选择项]引用即返回$db,注意只可引用一次。
 
/**
 *AdodbZip类定义
 */
classAdodbZip{
 
 /**
 *Adodb变量
 */
 publicstatic$zip_url;
 publicstatic$zip_file;
 publicstatic$entry_dir;
 publicstatic$extract_dir;
 publicstatic$server;
 publicstatic$user;
 publicstatic$pwd;
 publicstatic$db;
 publicstatic$charset;
 
 /**
 *Stream变量
 */
 private$handle;
 public$context;
 
 /**
 *Adodb函数组
 */
 
 /**
 *init
 *@paramadodb&$adodb
 *@returnadodb
 */
 publicstaticfunctioninit(&$adodb){
 $adodb->Connect(self::$server,self::$user,self::$pwd,self::$db);
 if(self::$charset!=''){
  $adodb->Execute('SETNAMES'.self::$charset.';');
 }
 return$adodb;
 }
 
 /**
 *Stream函数组
 */
 
 /**
 *__construct
 */
 publicfunction__construct(){
 }
 
 /**
 *stream_cast
 *@paramint$cast_as
 *@returnresource
 */
 publicfunctionstream_cast($cast_as){
 returnfalse;
 }
 
 /**
 *stream_close
 */
 publicfunctionstream_close(){
 fclose($this->handle);
 }
 
 /**
 *stream_eof
 *@returnbool
 */
 publicfunctionstream_eof(){
 returnfeof($this->handle);
 }
 
 /**
 *stream_flush
 *@returnbool
 */
 publicfunctionstream_flush(){
 returnfflush($this->handle);
 }
 
 /**
 *stream_lock
 *@parammode$options
 *@returnbool
 */
 publicfunctionstream_lock($options){
 returnflock($this->handle,$options);
 }
 
 /**
 *stream_open
 *@paramstring$path
 *@paramstring$mode
 *@paramint$options
 *@paramstring&$opend_path
 *@returnbool
 */
 publicfunctionstream_open($path,$mode,$options,&$opend_path){
 //验证文件地址
 if(!preg_match('/^.*?://(.*)$/',$path,$matches)){
  returnfalse;
 }
 $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.d200/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('请下载文件<ahref="'.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)){
   returnfalse;
  }
  //寻找解压文件
  do{
   $entry=zip_read($zip);
   if(!is_resource($entry)){
    returnfalse;
   }
   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)){
  returnfalse;
 }
 returntrue;
 }
 
 /**
 *stream_read
 *@paramint$count
 *@returnstring
 */
 publicfunctionstream_read($count){
 returnfread($this->handle,$count);
 }
 
 /**
 *stream_seek
 *@paramint$offset
 *@paramint$whence=SEEK_SET
 *@returnbool
 */
 publicfunctionstream_seek($offset,$whence=SEEK_SET){
 returnfseek($this->handle,$offset,$whence);
 }
 
 /**
 *stream_set_option
 *@paramint$option
 *@paramint$arg1
 *@paramint$arg2
 *@returnbool
 */
 publicfunctionstream_set_option($option,$arg1,$arg2){
 returnfalse;
 }
 
 /**
 *stream_stat
 *@returnarray
 */
 publicfunctionstream_stat(){
 returnfstat($this->handle);
 }
 
 /**
 *stream_tell
 *@returnint
 */
 publicfunctionstream_tell(){
 returnftell($this->handle);
 }
 
 /**
 *stream_write
 *@paramstring$data
 *@returnint
 */
 publicfunctionstream_write($data){
 returnfwrite($this->handle,$data);
 }
 
 /**
 *url_stat
 *@paramstring$path
 *@paramint$flag
 *@returnarray
 */
 publicfunctionurl_stat($path,$flag){
 if(!preg_match('/^.*?://(.*)$/',$path,$matches)){
  returnfalse;
 }
 $tmp_file=self::$extract_dir.DIRECTORY_SEPARATOR.$matches[1];
 if(file_exists($tmp_file)){
  if($flag&STREAM_URL_STAT_LINK){
   returnlstat($tmp_file);
  }else{
   returnstat($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);
  returnarray_merge(array_values($arr),$arr);
 }
 returnfalse;
 }
}
?>使用实例代码如下:
<?php
 include_once'AdodbZip.php'; 
 $db=AdodbZip::init(NewADOConnection('mysqlt')); 
 echo$db->GetOne('SELECTNOW()'); 
 ?>也是两步.
1.包含AdodbZip.php文件
2.AdodbZip::init(...)函数对adodb连接类进行初始化
希望本文所述对大家的PHP程序设计有所帮助。