zl程序教程

您现在的位置是:首页 >  后端

当前栏目

php中adodbzip类实例

2023-06-13 09:15:32 时间

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