2017-11-30 7 views
2

私の状況はこれです。 PHPスクリプトとAJAX呼び出しを使用して大きなmysqlダンプをデータベースにインポートする必要があります。後で使用するためにMySQL接続を保存する方法はありますか?

PHPスクリプトと通信し、.sqlから次のチャンクを切り取るために必要なすべてのデータ(.sqlファイル内のポインタの位置など)を返す再帰的AJAX関数を記述しました。スクリプトを実行して、スクリプトがファイルの最後に達するまで実行します。

私が遭遇している問題は、いくつかのmysqlダンプは、ファイルの始めに定義された変数を言い、ファイルの後半でそれらを使用しているということです。これらの2つのコードセグメントが同じチャンクにない場合、使用する変数が定義されていないため、SQLエラーが発生します。

セッションの接続/状態を保存し、後で復元してセッション変数を使用できるようにする方法があるとすれば、一般的には不思議です。

ありがとうございました!

+1

PHPの設定によっては、[mysqlnd php拡張機能で接続プール](http://php.net/manual/en/mysqlnd-ms.pooling.php)を利用することもできます。拡張機能はデフォルトで有効になっています。マニュアルを読むだけで、PHPスクリプトで何かを変更して使用する必要はありません。 – xander

+0

私はあなたのケースでもこれが面白いと感じました:[The mysqli Extension and Persistent Connections](http://php.net/manual/en/mysqli.persistconns.php) – xander

+1

@xander共有ホスティングはmysqlnd拡張をサポートしていません。永続的な接続は、場合によってはサーバーとの接続を高速化するだけで、私の場合は関連するセッションデータを保存しません。 –

答えて

1

PHPスクリプトを永続化する場合のみ。一般的なHTTP設定では、PHPを呼び出すたびに新しいPHPインスタンスが作成されます。このPHPインスタンスはリクエストが終了すると破棄されます。それは必然的に、MySQLセッションとそのリクエスト中に作成した一時データを終了します。

永続的なワーカーをPHPで無期限に実行し、何らかのメッセージバス、たとえばGearmanØMQまたはCrossbarからの要求に答えることができます。したがって、リクエストは次のようになります。

browser ⇄ web server ⇄ ephemeral PHP instance ⇄ Gearman ⇄ persistent PHP worker 

この永続的なワーカーでは、必要なものを永続化できます。それは明らかに特別なサーバー設定を必要とし、一般的な共有ホスティングなどでは不可能です。

+0

このスクリプトは、バックアップされたWebサイトを復元するための商用プラグインの一部です。だから私は間違いなくジェネリックホスティングで動作する必要がありますが、とにかく情報のおかげで! –

関連する問題