author: selfimpr
blog: http://blog.csdn.net/lgg201
mail: [email protected]
item
mysql_connect
mysql_pconnect
函數原型
resource mysql_connect($host_port, $user, $passwd, $newlink, $client_flags);
第四個參數$newlink標記是否創建新的資源對象
resource mysql_pconnect($host_port, $user, $passwd, $client_flags);
allow_persistent指令
設置此指令使得兩個函數行為均和mysql_connect()一致
連接資源對象獲取
對$host_port, $user, $passwd, $client_flags求哈希值
在普通資源列表(EG(regular_list))中查找連接對象(已找到並且沒有設置$newlink強制創建新連接)
檢查找到的對象是否資源類型
從查找到的對象中讀取連接對象
將當前獲取的連接對象設置為全局默認連接對象
增加連接對象的引用計數, 設置zval屬性返回
對$host_port, $user, $passwd, $client_flags求哈希值
從持久化資源列表(EG(persist_list))中查找連接對象(沒有找到)
檢查max_links配置指令限制是否到達
檢查max_persistent配置指令限制是否到達
分配連接對象(php_mysql_conn)空間
設置連接對象的基礎屬性
初始化驅動層連接對象(mysqlnd/libmysql兩種方式)
設置連接超時時間
發起驅動層的真實連接請求
構造持久化列表元素對象, 將新連接對象設置到元素中
將連接對象更新到持久化列表中
更新(增加)num_persistent/num_links計數
注冊資源類型返回值
將當前獲取的連接設置為全局默認連接對象
對$host_port, $user, $passwd, $client_flags求哈希值
在普通資源列表(EG(regular_list))中查找連接對象(未找到或設置了$newlink強制創建新連接)
檢查max_links配置指令限制
分配連接對象(php_mysql_conn)空間
設置連接對象基礎屬性
初始化驅動層連接對象(mysqlnd/libmysql)
設置連接超時時間
發起驅動層的真實連接
將連接對象注冊為資源類型返回值
將連接對象更新到普通資源列表(EG(regualr_list))中
更新num_links計數
將當前獲取的連接對象設置為全局默認連接對象
對$host_port, $user, $passwd, $client_flags求哈希值
從持久化資源列表中查找連接對象(已找到)
檢查查找到的持久化資源的類型是否匹配
從持久化資源中讀取連接對象
設置連接對象基本屬性
檢查服務端是否主動關閉
如果服務端主動關閉則進行重連
注冊資源類型返回值
將當前獲取的連接設置為全局默認連接對象
regular_list Vs. persistent_list
regular_list和persistent_list兩者都是HashTable
兩者都是執行全局環境executor_globals的成員
兩者生命周期不同, regular_list在php_request_shutdown()時被釋放, 也就是單個請求處理完成之後釋放, 而persistent_list在php_module_shutdown()的時候調用zend_shutdown()釋放, 也就是在整個進程完成執行時釋放