ホームページ  >  記事  >  バックエンド開発  >  php+ajax でビッグデータをインポートする場合の問題解決_PHP チュートリアル

php+ajax でビッグデータをインポートする場合の問題解決_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:28:37838ブラウズ

遭遇した問題を最初から最後まで 1 つずつ話しましょう。

質問 1 私の当初のアイデアによると、最初にファイルをアップロードしてからファイルを読み取ります。ここで問題となるのは、ファイルが大きい場合、アップロードが遅くなり、顧客にとっては処理が待機状態に見えるため、ユーザーフレンドリーではないということです。

方法:これは私がやった方法です。誰かがそれを紹介してください。まずファイルをアップロードし、次にそのファイルを import という特定のフォルダーに保存し、ファイル名を返します。これにより、ファイルが正常にアップロードされることが保証されます。また、js を使用して、顧客が名前を返すときにプロンプ​​トを表示できます。次に、Ajax は PHP にファイルを読み取ってデータベースに挿入するように要求します。しかし、ここで問題が発生します。

質問 2 ajax を使用して php にファイルの読み取りとデータベースへの挿入をリクエストすると、問題が発生します。つまり、ajax リクエストが常に 1 分で中断されます。これがphp max_execution_timeの最大実行時間の理由かと思いましたが、300秒に変更しました。このままでは、Apache の最大取得時間である max_input_time ではないかと考え、ini_get を使用して max_input_time 設定を確認しましたが、やはり 60 秒でした。インターネットで多くの情報を確認しましたが、それでも60秒でした。知っている人がいたら、返信してください。初心者さん、よろしくお願いします。他に方法はありません。サーバーにアクセスして php.ini 設定を変更するしかありません。管理人が改造は禁止だと言っていたので、試しにこっそり改造してみたら、やっと改造が戻ってきました。変更してテストしても、まだ動作しません。実行は 1 分後にタイムアウトになります。本当に混乱しています。何故かはわからない。アドバイスをお願いします。とんでもない。

この方法は、5m ファイルは別々の行でのみ読み取ることができなくなります。次に、コードの変更があります。ブランチ読み取り操作は次のようになります。まず、ajax リクエストを作成し、次に 2000 個のデータを処理してデータベースに挿入します。便利な分岐読み出し機能)。その後、ajax が実行されるたびに、ステータス シンボルと今回読み取られた行数が返され、次回も読み取りが続行されます。ついに読まれるまで。また、データの各行の重複をチェックするときに、取得した内容をループして、各行が存在するかどうかを確認するときに、$count が 0 より大きい場合、という問題が発生しました。すでに存在する場合は、 continue を使用して次のサイクルを実行します。しかし、10,000 個のアイテムをインポートすると、8,000 個のアイテムで常に「サーバー内部エラー」というエラーが発生します。とても退屈で、何を質問すればいいのかわかりません。代わりに if else しか使えません。不思議に思った。注意: データベースに挿入するときは、1 つずつ挿入しないでください。 aaa(`xx`,`xxx`)values('111','111'),('222',' に挿入するのが最善です。 222分)。これははるかに高速になります。

php+ajax でビッグデータをインポートする場合の問題解決_PHP チュートリアル

行番号読み取り機能、SplFileObjectクラスライブラリは本当に使いやすくてオススメです。誰か私の問題を知っている人がいたら、アドバイスをください。

コードをコピーします コードは次のとおりです:

function getFileLines($filename, $startLine, $endLine, $method = 'rb'){
$content = array(); 。 DS . $filename;
$count = $endLine - $startLine;
$fp = new SplFileObject($filename, $method);
$fp->seek($startLine); // ページ 1 N 行に移動します。 SEEKメソッドパラメーターは0からカウントを開始します。



http://www.bkjia.com/PHPjc/781817.html

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/781817.html

技術記事

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。