0

私のアプリケーションの 1 つで、ユーザーは CSV ファイル (| で区切られたフィールド) をアップロードできます。アップロード後、ファイルのすべてのコンテンツを一時テーブルに保存しています (現在のファイル データが含まれるように、新しいアップロードのたびにこのテーブルを切り捨てます)。その後、そのテーブルのすべての行を反復処理し、ビジネス ロジックに従ってデータベース操作を実行します。

次のコードはこれを示しています。

if(isset($_POST['btn_uploadcsv']))    
{         
$filename = $_FILES["csvupload"]["name"];
$uploads_dir = 'csvs'; //csv files...
$tmp_name = $_FILES["csvupload"]["tmp_name"];
$name =  time();
move_uploaded_file($tmp_name, "$uploads_dir/$name");

$csvpath = "$uploads_dir/$name";

$row = 0;
$emptysql = "TRUNCATE TABLE `temp`";
$connector->query($emptysql);

if (($handle = fopen($csvpath, "r")) !== FALSE) {
    $str_ins = "";
    while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) {
                    /*
                     *     Here I am getting the column values to be store in the 
                     *     the table, using INSERT command
                     */
                    unset($data);
    }
            fclose($handle);
}

    /*Here I am selecting above stored data using SELECT statement */

for($j=0;$j<count($allrecords);$j++)
{
        echo "In the loop"; 
         /*If I use echo statement for debugging it is working fine*/

        //set_time_limit(300);  
        /* I have tried this also but it is not working*/

        if(!empty($allrecords[$j]['catid']))
        {
         // Here is my business logic which mailny deals with 
         // conditional DB operation    
        }

        echo "Iteration done."; 
        /*If I use echo statement for debugging it is working fine*/                          
}
}

問題は、サーバーで aboe スクリプトを実行すると、サーバーのタイムアウト エラーが発生することです。しかし、ローカルホストで上記のスクリプトをテストすると、正常に動作しています。

また、コードで述べたように、echoデバッグにステートメントを使用すると正常に動作し、それを削除すると接続タイムアウトの問題が発生し始めます。

set_time_limit(300)、を試しset_time_limit(0)ましたが、どれもうまくいかないようです。

上記の問題をどのように解決できますか。

-- 長い間ありがとうございました。

編集:

ファイルがサーバーにアップロードされていることを確認しました。

4

2 に答える 2

0

クエリがバックグラウンドで実行されている間に、フラッシュを使用して中間出力をブラウザに送信することで問題を解決しました。

これは私がコードを修正した方法です:

for($j=0;$j<count($allrecords);$j++)
{

  /*At the end of each iteration, I have added the following code*/   
   echo " ";
   flush();                   
}

このリンクの貢献者に感謝します PHP: データベース クエリの実行を待っている間にブラウザにトリクル出力することは可能ですか? 、私がインスピレーションを得たところから。

于 2013-07-23T09:26:00.087 に答える