php中adodbzip类实例
2023-06-13 09:15:32 时间
本文实例讲述了php中adodbzip类程序代码。分享给大家供大家参考。具体如下:
/**
*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;
}
}
?>
使用实例代码如下:
include_once"AdodbZip.php";
$db=AdodbZip::init(NewADOConnection("mysqlt"));
echo$db->GetOne("SELECTNOW()");
?>
也是两步.
1.包含AdodbZip.php文件
2.AdodbZip::init(...)函数对adodb连接类进行初始化
希望本文所述对大家的PHP程序设计有所帮助。
相关文章
- shell脚本实例精讲_shell脚本编程实例
- SQL开发知识:Oracle merge语法合并更新函数实例
- Oracle中的日期范围查询实例(oracle日期范围查询)
- 开发环境配置Linux实现PHP开发环境(linux配置php)
- PHP与MySQL:搭建你的Web应用(php和mysql)
- 数据库解决PHP无法连接MySQL数据库的问题.(php无法连接mysql)
- 实现Oracle实例管理的步骤(如何创建oracle实例)
- 以PHP、MySQL 管理图片:实现一手网络图库管理(php图片mysql)
- 驱动安装Linux系统下RT3070驱动程序实例(linuxrt3070)
- 快速访问MSSQL数据库:PHP实现(php访问mssql)
- MySQL中调用自定义函数的实例(mysql调用自定义函数)
- Linux C编程大全:80个实例解析(linuxc编程80例)
- 使用PHP驱动程序实现与SQL Server数据库的连接(php连接sqlserver)
- PHP连接MSSQL数据库的实战指南(php连接mssql示例)
- PHP实现MSSQL数据库分页功能(php分页类 mssql)
- 学习C语言,读懂Oracle实例(c 读oracle 实例)
- 基于Oracle和PHP的新一代组件全面上线(oracle php组件)
- PHP操作Redis快速读写数据(redis 读写 php)
- JavaScript异步调用框架(Part6-实例&模式)
- PHP翻页实例代码
- AJAX解析XML实例之下拉框省、市二级联动
- PHP图片处理之图片旋转和图片翻转实例
- C#入门之窗体的简单用法实例
- C#的FileInfo类实现文件操作实例
- activiti获取流程图实例