0

いくつかのラベルを見つけて動的フォームを作成するには、大きなファイルを読み取る必要があります。ファイルサイズのせいfile()か使えません。file_get_contents()次のコードでファイルを1行ずつ読み取った場合

set_time_limit(0);    
$handle = fopen($file, 'r');
    set_time_limit(0);
    if ($handle) {
        while (!feof($handle)) {
            $line = fgets($handle);
            if ($line) {            
             //do something.
            }
        }
    }

    echo 'Read complete';

Chrome で次のエラーが表示されます。

エラー 101 (net::ERR_CONNECTION_RESET)

このエラーは数分後に発生するので、定数max_input_time、私は問題ではないと思います.(設定は60)。

4

3 に答える 3

1

どのブラウザソフトウェアを使用していますか?Apache、nginx?最大許容ファイルアップロードは500MBより高い場所に設定する必要があります。さらに、php.iniの最大アップロードサイズも500MBより大きくする必要があり、PHPが500MBを超えるプロセスを生成できるようにする必要があると思います。(php設定でこれを確認してください)。

于 2012-11-28T15:39:13.103 に答える
1

ini_set("memory_limit","600M");タイムアウト制限を設定する必要があるメモリ制限も設定します

set_time_limit(0);
于 2012-11-28T15:42:58.613 に答える
0

通常、長時間実行されるプロセスは、ユーザーが完了するのを待つ間は実行しないでください。このタイプの作業を処理でき、ジョブのステータス(実行中/終了/エラー)を照会できるバックグラウンドのジョブ指向ツールを使用することをお勧めします。

私の最初の推測は、途中の何かがタイムアウトのために接続を切断することです。Webサーバーでのタイムアウト(PHPが認識できない)であろうとファイアウォールであろうと、それは実際には問題ではありません。PHPは接続を閉じるためのシグナルを受け取り、スクリプトの実行を停止します。ignore-user-abort(true)を使用することで、この動作を回避できます。これは、set_time_limit(0)とともにうまくいくはずです。

注意点は、接続の中止を引き起こしたものは何でもそれを実行しますが、スクリプトはそれでもその仕事を終了します。非常に厄介な副作用の1つは、このスクリプトが、どちらも完了せずに複数回並行して実行される可能性があることです。

繰り返しになりますが、バックグラウンドタスクを使用してそれを実行し、エンドユーザー(ブラウザー)がそのタスクのステータスを確認するためのインターフェイスを使用することをお勧めします。cronジョブとステータスを保持するデータベース/テキストファイルを介して、基本的なものを自分で実装することもできます。

于 2012-11-28T16:07:17.977 に答える