《PHP實例:php中adodbzip類實例》要點:
本文介紹了PHP實例:php中adodbzip類實例,希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP實例本文實例講述了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設置項,這和傳統(tǒng)使用Adodb一樣.
?* 2. $zip_file可自定義.如果$zip_file存在,則可忽略$zip_url,這樣可整站統(tǒng)一使用$zip_file.
?* 3. $zip_url可自定義.可隨時修改Adodb版本,此時$zip_file和$extract_dir最好使用默認值,各版本互不干擾.
?* 4. $server、$user、$pwd、$db可自定義.默認是mysql默認值,此項只有調(diào)用AdodbZip::init方法后才起效果.
?* 5. $charset可自定義.默認不改變編碼,此項只有調(diào)用AdodbZip::init方法后才起效果.
?* 6. AdodbZip::init方法里可增加Adodb初始化值.
?*/
?
/**
?* AdodbZip啟動項
?*/
// 設定參數(shù)
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'; //[設置項]數(shù)據(jù)庫教程
AdodbZip::$charset = ''; //[設置項]編碼
?
// 注冊協(xié)議
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函數(shù)組
? */
?
?/**
? * 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函數(shù)組
? */
?
?/**
? * __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 ( '請創(chuàng)建目錄 ' . $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 );
???? }
??? }
?? }
?? // 創(chuàng)建目錄
?? $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 ( '請創(chuàng)建目錄 ' . $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 );
?? // 轉(zhuǎn)存壓縮文件
?? 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()');?
??>
也是兩步.
PHP實例1. 包含AdodbZip.php文件
PHP實例2. AdodbZip::init(...)函數(shù)對adodb連接類進行初始化
PHP實例希望本文所述對大家的PHP程序設計有所贊助.
歡迎參與《PHP實例:php中adodbzip類實例》討論,分享您的想法,維易PHP學院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/13433.html