$db['default']['pconnect'] = TRUE;
つまり、接続は永続的な接続を介して行われます。
理論のビット
mysql_pconnectは、mysql_connectと同じことを行いますが、2つの重要な例外があります。
- 接続時に、関数は同じユーザー名とパスワードで同じホストへの接続へのポインタを見つけようとします。 そのような接続が見つかった場合、その接続へのポインターが返され、新しい接続は開かれません。
- サーバーへの接続は、スクリプトの完了時に閉じられません。 この場合、mysql_close()はmysql_pconnectで開かれた接続を閉じません。
解決策
ここにあります。 /system/database/drivers/mysqli/mysqli_driver.phpファイル。 スクリプトは永続的な接続の「フラグ」を無視し、通常のmysqli_connect関数を介して接続を作成します。
function db_pconnect(){ $this->db_connect(); }
Mysqliにはmysqli_pconnect関数がありません。 永続的な接続は、別の方法で編成されます。 php.netからの回答:
To open a persistent connection you must prepend p: to the hostname when connecting.
ホスト名の前に「p:」を追加するだけです。 db_pconnect()関数の書き換え
function db_pconnect(){ $this->hostname = 'p:'.$this->hostname; $this->db_connect(); }
発言
このソリューションは、PHP 5.3以上で機能します。
フレームワークのコアで関数を書き換えることはありがたいことではありませんが、解決策は非常に迅速かつ簡単です。 このドライバクラスを拡張する機能を備えたよりエレガントなソリューションがある場合は、コメントしてください。
参照資料
mysqli拡張機能と永続的な接続