亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP數據庫連接池實現

2020-03-22 20:11:24
字體:
來源:轉載
供稿:網友
  • 摘要 xml 讀取配置文件 簡易方式 常規方式 PHP解析XML 配置文件 解析 數據庫連接池 測試 申請過多時拒絕請求 已滿后拒絕放入 總結

    摘要

    之前總是以腳本面向過程的方式寫PHP代碼,所以很大程度上來說,既不規范,也不安全,更不容易維護。為了代碼的重用,準備寫一套自己的工具庫,這樣的話,以后寫項目的時候就可以很輕松的進行使用啦。

    今天要進行實現的是一個數據庫連接池,以配置文件的方式來實現。

    xml

    XML作為一門高可用的結構化語言,作為配置文件真的是言簡意賅,雖然相比于近來配置文件界的YAML, JSON等翹楚來說,可能有效數據的占比比較小,但是這種冗余是有其存在的價值的。

    基本上,看完xml的節點就可以知道其功能。這也是為什么大項目都會使用XML作為配置文件的原因。

    可以容忍冗余,但是不能帶來一點歧義,或者維護困難方面的問題。

    在PHP中,使用XML文件會是一件賞心悅目的事情,雖然相對于Java程序而言,如此。但是相比于Python處理,PHP程序就顯得沒有那么優雅了。

    讀取配置文件

    讀取配置文件其實說白了就是對文件的讀取,然后包裝一下。我常用的有如下兩種方式。

    簡易方式

    第一次使用這個簡易方式的時候,真的是有點郁悶。

    $content = file_get_contents('filename.xml');echo $content;

    結果使用瀏覽器訪問這個測試用的php文件時,卻只顯示了xml的內容部分,但是節點信息什么的根本沒有顯示。

    然后我還特地查閱了一下幫助文檔,這個函數返回的結果是字符串無疑的啊。然后vardump之后也證明了這一點。于是也沒有多想,還以為這種方式能自動的過濾掉XML的標簽TAG信息呢。

    最后一個偶然的測試,打開了網頁源代碼,發現這個函數確實讀到了XML的所有信息,只不過顯示在瀏覽器上就會被瀏覽器給自動解析了。所以只能看到相關的內容部分。

    常規方式

    常規方式就是按部就班的讀取文件了。其余的話和上述方案一致。

    // 讀取配置文件內容            $handle = fopen('filepath', 'r');            $content = fread($handle, filesize('filepath'));

    PHP解析XML

    上述兩種讀取文件,其實都是為了PHP解析XML來做準備的。關于PHP解析XML的方式的博客有很多。方式也有很多,像simplexml,XMLReader,DOM啦等等。但是對于比較小型的xml配置文件,simplexml就足夠了。

    配置文件
    <?xml version='1.0' encoding='UTF-8' ?><mysql>    <!-- 為防止出現意外,請按照此標準順序書寫.其實也無所謂了 -->    <host>localhost</host>    <user>root</user>    <password>123456</password>    <db>test</db>    <port>3306</port></mysql>

    解析
    <?php/** * 作為解析XML配置文件必備工具 */html' target='_blank'>class XMLUtil {    public static $dbconfigpath = './db.config.xml';    public static function getDBConfiguration() {        $dbconfig = array ();        try {            // 讀取配置文件內容            $handle = fopen(self::$dbconfigpath, 'r');            $content = fread($handle, filesize(self::$dbconfigpath));            // 獲取xml文檔根節點,進而獲取相關的數據庫信息            $mysql = simplexml_load_string($content);            // 將獲取到的xml節點信息賦值給關聯數組,方便接下來的方法調用            $dbconfig['host'] = $mysql->host;            $dbconfig['user'] = $mysql->user;            $dbconfig['password'] = $mysql->password;            $dbconfig['db'] = $mysql->db;            $dbconfig['port'] = $mysql->port;            // 將配置信息以關聯數組的形式返回            return $dbconfig;        } catch ( Exception $e ) {            throw new RuntimeException ( '<mark>讀取數據庫配置文件信息出錯!</mark><br />' );        }        return $dbconfig;    }}

    數據庫連接池

    對于PHP程序而言,優化永無止境。而數據庫連接池就在一定程度上起到了優化的作用。其使得對用戶的每一個請求而言,無需每次都像數據庫申請鏈接資源。而是通過已存在的數據庫連接池中的鏈接來返回,從時間上,效率上,都是一個大大的提升。

    于是,這里簡單的模擬了一下數據庫連接池的實現。核心在于維護一個“池”。

    從池子中取,用畢,歸還給池子。

    <?php/**x *  PHP中的數據庫 工具類設計 *  郭璞 *  2016年12月23日 *   **/class DbHelper {    private $dbconfig;    private $dbpool;    public $poolsize;    public function __construct($poolsize = 20) {        if (! file_exists ( './utils.php' )) {            throw new RuntimeException ( '<mark>utils.php文件丟失,無法進行配置文件的初始化操作!</mark><br />' );        }else {            require './utils.php';        }        // 初始化 配置文件信息        $this->dbconfig = XMLUtil::getDBConfiguration ();        // 準備好數據庫連接池“偽隊列”        $this->poolsize = $poolsize;        $this->dbpool = array ();        for($index = 1; $index <= $this->poolsize; $index ++) {            $conn = mysqli_connect ( $this->dbconfig ['host'], $this->dbconfig ['user'], $this->dbconfig ['password'], $this->dbconfig ['db'] ) or die ( '<mark>連接數據庫失??!</mark><br />' );            array_push ( $this->dbpool, $conn );        }    }    /**     * 從數據庫連接池中獲取一個數據庫鏈接資源     *     * @throws ErrorException     * @return mixed     */    public function getConn() {        if (count ( $this->dbpool ) <= 0) {            throw new ErrorException ( '<mark>數據庫連接池中已無鏈接資源,請稍后重試!</mark>' );        } else {            return array_pop ( $this->dbpool );        }    }    /**     * 將用完的數據庫鏈接資源放回到數據庫連接池     *     * @param unknown $conn                 * @throws ErrorException     */    public function release($conn) {        if (count ( $this->dbpool ) >= $this->poolsize) {            throw new ErrorException ( '<mark>數據庫連接池已滿</mark><br />' );        } else {            array_push ( $this->dbpool, $conn );        }    }}

    測試

    申請過多時,拒絕請求

    在申請數據庫連接小于20的時候,程序直接從數據庫連接池中獲取。

    正常請求,正常獲取

    當申請的數據庫鏈接資源大于數據庫連接池的上限時,不予提供。并提示異常。

    數據庫連接池中無連接轉時提示異常

    已滿后拒絕放入

    當數據庫連接池內已滿的時候,如果想回首自定義的數據庫鏈接資源,則不予支持,并報錯提示。
    已滿后拒絕放入

    總結

    回顧一下,本次試驗主要是以面向對象的角度,設計并實現了一個簡易的數據庫連接池。在一定程度上對PHP代碼的優化起到了作用。

    另外簡單的使用了simplexml對于XML文件的解析處理, 以及常用的對于文件讀取的操作。

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    午夜免费日韩视频| 久久久久久综合网天天| 国产91免费观看| 另类色图亚洲色图| 久久免费高清视频| 亚洲国产精品热久久| 一本色道久久88综合亚洲精品ⅰ| 亚洲国产精品久久| 欧美丝袜美女中出在线| 国产免费一区二区三区在线能观看| 久久久久久久久久久久久久久久久久av| 亚洲一区二区三区四区视频| 亚洲一区二区久久| 欧美老少做受xxxx高潮| 91在线免费看网站| 久久久久一本一区二区青青蜜月| 国产亚洲精品美女| 韩国日本不卡在线| 久久国产精品99国产精| 成人久久久久久久| 亚洲一区美女视频在线观看免费| 久久久久成人网| 国产精品中文在线| 日本伊人精品一区二区三区介绍| 亚洲一区二区三区xxx视频| 国产在线久久久| 这里只有精品在线观看| 成人激情电影一区二区| 在线视频中文亚洲| 38少妇精品导航| 久久韩国免费视频| 日韩电影中文 亚洲精品乱码| 欧美在线亚洲在线| 国产精品美女www爽爽爽视频| 日韩成人在线免费观看| 久久伊人色综合| 亚洲新中文字幕| 久久久这里只有精品视频| 韩国视频理论视频久久| 欧美一级bbbbb性bbbb喷潮片| 精品久久国产精品| 亚洲欧美999| 国产精品中文字幕在线| 福利一区视频在线观看| 欧美高跟鞋交xxxxhd| 欧美专区在线播放| 日本91av在线播放| 精品国产一区二区三区久久久狼| 91丨九色丨国产在线| 亚洲国产欧美一区二区三区同亚洲| 国产精品一区二区久久久| 国产精品爽爽爽| 国产精自产拍久久久久久| 亚洲wwwav| 久久综合网hezyo| 亚洲一区亚洲二区亚洲三区| 一本一本久久a久久精品牛牛影视| 亚洲成人精品av| 亚洲国产天堂久久国产91| 国产精品第一第二| 91精品视频大全| 国产91精品网站| 成人黄色免费网站在线观看| 91中文字幕在线观看| 亚洲精品少妇网址| 欧美大片免费观看在线观看网站推荐| 久久777国产线看观看精品| 欧美精品一本久久男人的天堂| 91免费看片在线| 久久人人97超碰精品888| 91九色综合久久| 久久免费视频这里只有精品| 亚洲图片欧美午夜| 成人国产精品免费视频| 久久精品国产亚洲7777| 日韩在线精品视频| 日本一本a高清免费不卡| 日韩大陆欧美高清视频区| 日韩欧美国产中文字幕| 92版电视剧仙鹤神针在线观看| 国产精品v片在线观看不卡| 国产精品国语对白| 亚洲成色777777女色窝| 清纯唯美亚洲综合| 精品视频9999| 国产精品激情自拍| 亚洲小视频在线观看| 亚洲日本中文字幕| 日韩免费av在线| 国产91免费看片| 亚洲一级黄色av| 久久国产精品免费视频| 欧美日韩亚洲国产一区| 日韩欧美国产中文字幕| 亚洲黄色在线看| 亚洲午夜未删减在线观看| 亚洲欧美综合区自拍另类| 久久伊人91精品综合网站| 亚州成人av在线| 国产精品视频网站| 久久精品国产免费观看| 4444欧美成人kkkk| 国产精国产精品| 日韩精品中文字幕在线播放| 中文字幕日韩av综合精品| 一本大道久久加勒比香蕉| 国产精品亚洲一区二区三区| 国产久一一精品| 国产精品久久国产精品99gif| 国产区精品在线观看| 国产精品欧美一区二区三区奶水| 亚洲欧美中文字幕| 国产精品直播网红| 精品国产1区2区| 一区二区福利视频| 欧美激情第三页| **欧美日韩vr在线| 亚洲**2019国产| 日韩视频永久免费观看| 在线免费看av不卡| 精品中文字幕在线观看| 国产69精品久久久久9999| 最近2019中文字幕一页二页| 亚洲精品一区二区久| 亚洲a中文字幕| 最好看的2019的中文字幕视频| 国产精品爽爽ⅴa在线观看| 国产精品国产自产拍高清av水多| 国产欧美精品一区二区三区介绍| 国产精品美女网站| 国产精品久久91| 亚洲天天在线日亚洲洲精| 成人黄色av网站| 国产精品青草久久久久福利99| 日本欧美国产在线| 亚洲va国产va天堂va久久| 精品国产网站地址| 国产做受69高潮| 欧美精品性视频| 国内精品久久久久伊人av| 91人人爽人人爽人人精88v| 一区二区国产精品视频| 国产精品久久久久久亚洲调教| 中文字幕国产精品久久| 成人亲热视频网站| 色偷偷噜噜噜亚洲男人的天堂| 91免费的视频在线播放| 欧美一区二区三区图| 精品电影在线观看| 久久久视频免费观看| 日韩亚洲精品视频| 国产美女精品视频| 欧美日韩成人免费| 欧美成人午夜免费视在线看片| 欧洲亚洲免费视频| 国产精品欧美风情| 日韩电影免费在线观看中文字幕| 亚洲电影中文字幕| 亚洲人成免费电影| 国产精品av免费在线观看| 2019国产精品自在线拍国产不卡| 国产日韩欧美在线观看| 成人免费福利视频| 亚洲男人天堂网站|