php专区

 首页 > php专区 > PHP应用 > php类库 > php adodbzip 类 - php类库

php adodbzip 类 - php类库

分享到:
【字体:大 中 小】
导读:
          ?php/***AdodbZip1.1**作者:*Z(QQ号602000QQ群5193883)**代码示例:*include_once#39;AdodbZip.php#39;;*$db=AdodbZip::init(NewADOCon......

php adodbzip 类

  1. /** 
  2.  * AdodbZip 1.1 
  3.  *  
  4.  * 作者: 
  5.  * Z(QQ号602000 QQ群5193883) 
  6.  *  
  7.  * 代码示例: 
  8.  * include_once 'AdodbZip.php'; 
  9.  * $db = AdodbZip::init(NewADOConnection('mysql教程t')); 
  10.  * echo $db->GetOne('SELECT NOW()'); 
  11.  *  
  12.  * 流程说明: 
  13.  * 1. 如果$extract_dir里的Adodb程序文件存在,并且$zip_file不存在;则使用$extract_dir里的Adodb程序文件。 
  14.  * 2. 如果$extract_dir里的Adodb程序文件存在,并且$zip_file存在;则比较修改时间,$extract_dir里的Adodb程序文件更新为较新的。 
  15.  * 3. 如果$extract_dir里的Adodb程序文件不存在,并且$zip_file存在;则$extract_dir里的Adodb程序文件从$zip_file解压获得。 
  16.  * 4. 如果 $extract_dir里的Adodb程序文件不存在,并且$zip_file不存在;则从$zip_url下载Adodb的Zip文件,并解压Adodb的程序文件。 
  17.  * //开源phpfensi.com 
  18.  * 其他说明: 
  19.  * 1. $extract_dir可自定义。如果将Adodb的Zip包完全解压到此目录,则可忽略$zip_url和$zip_file设置项,这和传统使用Adodb一样。 
  20.  * 2. $zip_file可自定义。如果$zip_file存在,则可忽略$zip_url,这样可整站统一使用$zip_file。 
  21.  * 3. $zip_url可自定义。可随时修改Adodb版本,此时$zip_file和$extract_dir最好使用默认值,各版本互不干扰。 
  22.  * 4. $server、$user、$pwd、$db可自定义。默认是mysql默认值,此项只有调用AdodbZip::init方法后才起效果。 
  23.  * 5. $charset可自定义。默认不改变编码,此项只有调用AdodbZip::init方法后才起效果。 
  24.  * 6. AdodbZip::init方法里可增加Adodb初始化值。 
  25.  */ 
  26.  
  27. /** 
  28.  * AdodbZip启动项 
  29.  */ 
  30. // 设定参数 
  31. 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文件下载地址,文件比较大建议先下载或者解压 
  32. AdodbZip::$zip_file = sys_get_temp_dir () . preg_replace ( '/^.*/(adodb.*?.zip)$/i', 'adodb/$1', AdodbZip::$zip_url ); //[设置项]Adodb的Zip文件缓存位置 
  33. AdodbZip::$entry_dir = 'adodb5'; 
  34. AdodbZip::$extract_dir = sys_get_temp_dir () . 'adodb/' . AdodbZip::$entry_dir; //[设置项]Adodb程序文件缓存位置 
  35. AdodbZip::$server = 'localhost'; //[设置项]服务器  
  36. AdodbZip::$user = 'root'; //[设置项]用户名 
  37. AdodbZip::$pwd = ''; //[设置项]密码 
  38. AdodbZip::$db = 'test'; //[设置项]数据库教程 
  39. AdodbZip::$charset = ''; //[设置项]编码 
  40.  
  41.  
  42. // 注册协议 
  43. if (! in_array ( 'AdodbZip', stream_get_wrappers () )) { 
  44.  stream_wrapper_register ( 'AdodbZip', 'AdodbZip' ); 
  45. } 
  46. // 定义常量 
  47. if (! defined ( 'ADODB_DIR' )) { 
  48.  define ( 'ADODB_DIR', 'AdodbZip:/' ); 
  49. } 
  50. // 包含程序 
  51. require_once (ADODB_DIR . '/adodb.inc.php'); 
  52. // $db = AdodbZip::init(NewADOConnection('mysqlt')); // [选择项]引用即定义$db 
  53. // return AdodbZip::init(NewADOConnection('mysqlt')); // [选择项]引用即返回$db,注意只可引用一次。 
  54.  
  55.  
  56. /** 
  57.  * AdodbZip类定义 
  58.  */ 
  59. class AdodbZip { 
  60.   
  61.  /** 
  62.   * Adodb变量 
  63.   */ 
  64.  public static $zip_url; 
  65.  public static $zip_file; 
  66.  public static $entry_dir; 
  67.  public static $extract_dir; 
  68.  public static $server; 
  69.  public static $user; 
  70.  public static $pwd; 
  71.  public static $db; 
  72.  public static $charset; 
  73.   
  74.  /** 
  75.   * Stream变量 
  76.   */ 
  77.  private $handle; 
  78.  public $context; 
  79.   
  80.  /** 
  81.   * Adodb函数组 
  82.   */ 
  83.   
  84.  /** 
  85.   * init 
  86.   * @param adodb &$adodb 
  87.   * @return adodb 
  88.   */ 
  89.  public static function init(&$adodb) { 
  90.   $adodb->Connect ( self::$server, self::$user, self::$pwd, self::$db ); 
  91.   if(self::$charset!=''){ 
  92.    $adodb->Execute('SET NAMES '.self::$charset.';'); 
  93.   } 
  94.   return $adodb; 
  95.  } 
  96.   
  97.  /** 
  98.   * Stream函数组 
  99.   */ 
  100.   
  101.  /** 
  102.   * __construct 
  103.   */ 
  104.  public function __construct() { 
  105.  } 
  106.   
  107.  /** 
  108.   * stream_cast 
  109.   * @param int $cast_as 
  110.   * @return resource 
  111.   */ 
  112.  public function stream_cast($cast_as) { 
  113.   return false; 
  114.  } 
  115.   
  116.  /** 
  117.   * stream_close 
  118.   */ 
  119.  public function stream_close() { 
  120.   fclose ( $this->handle ); 
  121.  } 
  122.   
  123.  /** 
  124.   * stream_eof 
  125.   * @return bool 
  126.   */ 
  127.  public function stream_eof() { 
  128.   return feof ( $this->handle ); 
  129.  } 
  130.   
  131.  /** 
  132.   * stream_flush 
  133.   * @return bool 
  134.   */ 
  135.  public function stream_flush() { 
  136.   return fflush ( $this->handle ); 
  137.  } 
  138.   
  139.  /** 
  140.   * stream_lock 
  141.   * @param mode $options 
  142.   * @return bool 
  143.   */ 
  144.  public function stream_lock($options) { 
  145.   return flock ( $this->handle, $options ); 
  146.  } 
  147.   
  148.  /** 
  149.   * stream_open 
  150.   * @param string $path 
  151.   * @param string $mode 
  152.   * @param int $options 
  153.   * @param string &$opend_path 
  154.   * @return bool 
  155.   */ 
  156.  public function stream_open($path, $mode, $options, &$opend_path) { 
  157.   // 验证文件地址 
  158.   if (! preg_match ( '/^.*?://(.*)$/', $path, $matches )) { 
  159.    return false; 
  160.   } 
  161.   $tmp_file = self::$extract_dir . DIRECTORY_SEPARATOR . $matches [1]; 
  162.   $entry_file = self::$entry_dir . '/' . str_replace ( '', '/', $matches [1] ); 
  163.   $zip_file = self::$zip_file; 
  164.   // 验证程序文件 
  165.   if (! file_exists ( $tmp_file ) || file_exists ( $zip_file ) && filectime ( $tmp_file ) < filectime ( $zip_file )) { 
  166.    // 下载文件 
  167.    if (! file_exists ( $zip_file )) { 
  168.     // 目录处理 
  169.     if (! is_dir ( dirname ( self::$zip_file ) )) { 
  170.      if (mkdir ( dirname ( self::$zip_file ), 0777, true ) === false) { 
  171.       header ( 'Content-type: text/html;charset=utf-8' ); 
  172.       die ( '请创建目录 ' . $zip_dir ); 
  173.      } 
  174.     } 
  175.     // 下载文件 
  176.     if (! file_exists ( self::$zip_file )) { 
  177.      $break = true; 
  178.      do { 
  179.       $url_arr = parse_url ( self::$zip_url ); 
  180.       $fp = fsockopen ( $url_arr ['host'], isset ( $url_arr ['port'] ) ? ( int ) $url_arr ['port'] : 80, $errno, $errstr, 10 ); 
  181.       if ($fp === false) { 
  182.        break; 
  183.       } 
  184.       $out = "GET " . $url_arr ['path'] . " HTTP/1.0rnHost: " . $url_arr ['host'] . " rnConnection: closernrn"; 
  185.       fputs ( $fp, $out ); 
  186.       if (feof ( $fp )) { 
  187.        break; 
  188.       } 
  189.       $buffer = fgets ( $fp, 1024 ); 
  190.       if (! preg_match ( '/^HTTP/1.d 200 /i', $buffer )) { 
  191.        break; 
  192.       } 
  193.       $content_length = false; 
  194.       $content_start = false; 
  195.       while ( ! feof ( $fp ) ) { 
  196.        $buffer = fgets ( $fp, 1024 ); 
  197.        if ($buffer === "rn") { 
  198.         $content_start = true; 
  199.         break; 
  200.        } 
  201.        if (preg_match ( '/^Content-Length:s*(d+)/i', $buffer, $matches )) { 
  202.         $content_length = ( int ) $matches [1]; 
  203.        } 
  204.       } 
  205.       if ($content_length === false || $content_start === false) { 
  206.        break; 
  207.       } 
  208.       $content = stream_get_contents ( $fp ); 
  209.       if ($content === false) { 
  210.        break; 
  211.       } 
  212.       $result = file_put_contents ( self::$zip_file, $content ); 
  213.       unset ( $content ); 
  214.       if ($result === false) { 
  215.        break; 
  216.       } 
  217.       fclose ( $fp ); 
  218.      } while ( $break = false ); 
  219.      if ($break) { 
  220.       header ( 'Content-type: text/html;charset=utf-8' ); 
  221.       die ( '请下载文件  . self::$zip_url . '">' . self::$zip_url . '.zip 保存为 ' . self::$zip_file ); 
  222.      } 
  223.     } 
  224.    } 
  225.    // 创建目录 
  226.    $tmp_dir = dirname ( $tmp_file ); 
  227.    if (! is_dir ( $tmp_dir )) { 
  228.     if (mkdir ( $tmp_dir, 0777, true ) === false) { 
  229.      header ( 'Content-type: text/html;charset=utf-8' ); 
  230.      die ( '请创建目录 ' . $tmp_dir ); 
  231.     } 
  232.    } 
  233.    // 打开压缩文件 
  234.    $zip = zip_open ( $zip_file ); 
  235.    if (! is_resource ( $zip )) { 
  236.     return false; 
  237.    } 
  238.    // 寻找解压文件 
  239.    do { 
  240.     $entry = zip_read ( $zip ); 
  241.     if (! is_resource ( $entry )) { 
  242.      return false; 
  243.     } 
  244.     if (zip_entry_name ( $entry ) == $entry_file) { 
  245.      break; 
  246.     } 
  247.    } while ( true ); 
  248.    // 转存压缩文件 
  249.    zip_entry_open ( $zip, $entry ); 
  250.    file_put_contents ( $tmp_file, zip_entry_read ( $entry, zip_entry_filesize ( $entry ) ) ); 
  251.    zip_entry_close ( $entry ); 
  252.    zip_close ( $zip ); 
  253.   } 
  254.   // 打开文件 
  255.   $this->handle = fopen ( $tmp_file, $mode ); 
  256.   if (! is_resource ( $this->handle )) { 
  257.    return false; 
  258.   } 
  259.   return true; 
  260.  } 
  261.   
  262.  /** 
  263.   * stream_read 
  264.   * @param int $count 
  265.   * @return string 
  266.   */ 
  267.  public function stream_read($count) { 
  268.   return fread ( $this->handle, $count ); 
  269.  } 
  270.   
  271.  /** 
  272.   * stream_seek 
  273.   * @param int $offset 
  274.   * @param int $whence=SEEK_SET 
  275.   * @return bool 
  276.   */ 
  277.  public function stream_seek($offset, $whence = SEEK_SET) { 
  278.   return fseek ( $this->handle, $offset, $whence ); 
  279.  } 
  280.   
  281.  /** 
  282.   * stream_set_option 
  283.   * @param int $option 
  284.   * @param int $arg1 
  285.   * @param int $arg2 
  286.   * @return bool 
  287.   */ 
  288.  public function stream_set_option($option, $arg1, $arg2) { 
  289.   return false; 
  290.  } 
  291.   
  292.  /** 
  293.   * stream_stat 
  294.   * @return array 
  295.   */ 
  296.  public function stream_stat() { 
  297.   return fstat ( $this->handle ); 
  298.  } 
  299.   
  300.  /** 
  301.   * stream_tell 
  302.   * @return int 
  303.   */ 
  304.  public function stream_tell() { 
  305.   return ftell ( $this->handle ); 
  306.  } 
  307.   
  308.  /** 
  309.   * stream_write 
  310.   * @param string $data 
  311.   * @return int 
  312.   */ 
  313.  public function stream_write($data) { 
  314.   return fwrite ( $this->handle, $data ); 
  315.  } 
  316.   
  317.  /** 
  318.   * url_stat 
  319.   * @param string $path 
  320.   * @param int $flag 
  321.   * @return array 
  322.   */ 
  323.  public function url_stat($path, $flag) { 
  324.   if (! preg_match ( '/^.*?://(.*)$/', $path, $matches )) { 
  325.    return false; 
  326.   } 
  327.   $tmp_file = self::$extract_dir . DIRECTORY_SEPARATOR . $matches [1]; 
  328.   if (file_exists ( $tmp_file )) { 
  329.    if ($flag & STREAM_URL_STAT_LINK) { 
  330.     return lstat ( $tmp_file ); 
  331.    } else { 
  332.     return stat ( $tmp_file ); 
  333.    } 
  334.   } 
  335.   if ($flag & STREAM_URL_STAT_QUIET) { 
  336.    $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 ); 
  337.    return array_merge ( array_values ( $arr ), $arr ); 
  338.   } 
  339.   return false; 
  340.  } 
  341. } 
  342. ?> 

使用实例代码如下:

  1.  include_once 'AdodbZip.php';  
  2.  $db = AdodbZip::init(NewADOConnection('mysqlt'));  
  3.  echo $db->GetOne('SELECT NOW()');  
  4.  ?>  

也是两步.

1. 包含AdodbZip.php文件

2. AdodbZip::init(...)函数对adodb连接类进行初始化

分享到:
php给图片加水印与上传图片加水印php类 -...
php给图片加水印与上传图片加水印php类 /*   * 功能:PHP图片水印 (水印支持图片或文字)   * 参数:   * $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;   * $waterPos 水印位置,有10种状态,0为随机位置;   * 1为顶端居左,2为顶...
完美php文章分页类 - php类库
完美php文章分页类 class SubPages{   private   $each_disNums;//每页显示的条目数   private   $nums;//总条目数   private   $current_page;//当前被选中的页   private   $sub_pages;//每次显示的页数   private   $pageNums;//总页数   pri...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……