0

私は、サーバーから毎日情報を取得する必要があるフィールドにいくつかのラップトップを持っています。各ラップトップには、ローカルWebページを起動するserver2goインストール(基本的にはApache、PHP、MySQLが実行可能ファイルとして実行されます)があります。Webページは、次のコードを使用してサーバー上のURLを呼び出します。

$handle = fopen( $downloadURL , "rb");
$contents = stream_get_contents( $handle );
fclose( $handle );

$ downloadURLは、サーバー上のMySQLデータベースから大量の情報をフェッチし、その結果を出力としてデバイスに返します。現在、結果を独自のSQLステートメントとして返しています(つまり、データベース "SELECT name FROM names"をクエリすると、デバイスにテキスト文字列 "INSERT INTO names SET names ='JOHN SMITH'"が返される場合があります)。これにより、オンラインデータベースから情報が取得され、ラップトップのデータベースに挿入できるSQLステートメントでデバイスに返されます。

私が遭遇している問題は、データの量が多すぎることです。ラップトップのWebページは、サーバーから情報を取得するときにタイムアウトし続けます。PHPのタイムアウト制限を非常に高く設定しましたが、それでも問題が発生します。誰かがこれを行うためのより良い方法を考えることができますか?データを小さなチャンクでデバイスにフラッシュした場合、stream_get_contentsはサーバーに接続されたままになりますか?

ご入力いただきありがとうございます。

4

4 に答える 4

0

Windows Live Sync や Dropbox などのサードパーティのファイル同期サービスを使用して、すべてのマシンで最新のファイルを同期することを検討することをお勧めします。次に、ファイルが変更されるたびにファイルをデータベースにロードするデーモンを用意します。このようにして、同期ピースを完全に処理する必要がなくなります。

于 2009-12-01T07:00:14.450 に答える
0

を使用してstream_get_contentsいます (または、ストリーミングfile_get_contentsに余分な行を必要とせずに使用することもできopenます) が、タイトルが示すようにテキストの量が非常に多い場合は、メモリがいっぱいになります。

メモリが限られているリモートサーバー用のスクリプトを書いているときにこの問題に遭遇したため、それは機能しませんでした。私が見つけた解決策は、stream_copy_to_stream代わりに使用して、ファイルをメモリではなくディスクに直接コピーすることでした。

その機能の完全なコードを次に示します。

于 2013-09-17T18:00:28.617 に答える
0

サーバー上のデータベースからテキスト ファイルをコンパイルするスクリプトを作成し、そのファイルをダウンロードします。

于 2009-12-01T05:08:11.850 に答える