ホームページ >バックエンド開発 >PHPチュートリアル >php+ajax でビッグデータをインポートする場合の問題解決_PHP チュートリアル
遭遇した問題を最初から最後まで 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分)。これははるかに高速になります。
行番号読み取り機能、SplFileObjectクラスライブラリは本当に使いやすくてオススメです。誰か私の問題を知っている人がいたら、アドバイスをください。
技術記事