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程序设计有所帮助。