作者: selfimpr
ブログ: http://blog.csdn.net/lgg201
メール: lgg860911@yahoo.com.cn
アイテム
mysql_connect
mysql_pconnect
関数プロトタイプ
resource mysql_connect($host_port, $user, $passwd, $newlink, $client_flags);
4 番目のパラメーター $newlink は、新しいリソース オブジェクトを作成するかどうかをマークします
resource mysql_pconnect($host_port, $user, $passwd, $client_flags);
allow_persistent ディレクティブ
このディレクティブを設定して、両方の関数が mysql_connect() と同じように動作するようにします
接続リソースオブジェクトを取得します
$host_port、$user、$passwd、$client_flags のハッシュ値を見つけます
通常のリソースリスト (EG(regulator_list)) で接続オブジェクトを検索します (見つかりましたが、$newlink は新しい接続の作成を強制するように設定されていません)
見つかったオブジェクトがリソースタイプかどうかを確認してください
見つかったオブジェクトから接続オブジェクトを読み取ります
現在取得している接続オブジェクトをグローバルのデフォルト接続オブジェクトとして設定します
接続オブジェクトの参照カウントを増やし、zval 属性を return に設定します
$host_port、$user、$passwd、$client_flags のハッシュ値を見つけます
永続リソースリスト (EG(persist_list)) から接続オブジェクトを検索します (見つかりません)
max_links 設定ディレクティブの制限に達しているかどうかを確認してください
max_persistent 設定ディレクティブの制限に達しているかどうかを確認してください
接続オブジェクト (php_mysql_conn) スペースを割り当てます
接続オブジェクトの基本プロパティを設定します
ドライバー層の接続オブジェクトを初期化します (mysqlnd/libmysql の 2 つのメソッド)
接続タイムアウトを設定する
ドライバー層から実際の接続リクエストを開始します
永続的なリスト要素オブジェクトを構築し、新しい接続オブジェクトを要素に設定します
接続オブジェクトを永続リストに更新します
num_persistent/num_links 数を更新 (増加) します
リソースタイプの戻り値を登録します
現在取得している接続をグローバルのデフォルト接続オブジェクトとして設定します
$host_port、$user、$passwd、$client_flags のハッシュ値を見つけます
通常のリソースリスト (EG(regulator_list)) で接続オブジェクトを見つけます (見つからないか、$newlink が新しい接続の作成を強制するように設定されています)
max_links 設定ディレクティブの制限を確認してください
接続オブジェクト (php_mysql_conn) スペースを割り当てます
接続オブジェクトの基本プロパティを設定します
ドライバー層接続オブジェクト (mysqlnd/libmysql) を初期化します
接続タイムアウトを設定する
ドライバー層への実際の接続を開始します
接続オブジェクトをリソースタイプの戻り値として登録します
接続オブジェクトを通常のリソースリスト (EG(regualr_list)) に更新します
num_links 数を更新します
現在取得している接続オブジェクトをグローバルのデフォルト接続オブジェクトとして設定します
$host_port、$user、$passwd、$client_flags のハッシュ値を見つけます
永続リソースリストから接続オブジェクトを見つけます(見つかった)
見つかった永続リソースのタイプが一致するかどうかを確認します
永続リソースから接続オブジェクトを読み取ります
接続オブジェクトの基本プロパティを設定します
サーバーがアクティブにシャットダウンされているかどうかを確認します
サーバーがアクティブにシャットダウンすると、再接続されます
リソースタイプの戻り値を登録します
現在取得している接続をグローバルのデフォルト接続オブジェクトとして設定します
正規リストと永続リスト
Regular_list とpersistent_list はどちらも HashTable です
どちらも実行グローバル環境 executor_globals のメンバーです
2 つのライフサイクルは異なります。 Regular_list は php_request_shutdown() のときに解放されます。つまり、単一のリクエストが処理された後に解放されます。一方、persistent_list は php_module_shutdown() のときに zend_shutdown() を呼び出すことによって解放されます。プロセス全体の実行が完了したとき