2016-04-01 12 views
0

約30秒以上かかるファイル最適化スクリプトを実装しました。処理中のものを追跡するためにエコーを追加したループがあります。処理中に制御出力が送信される

しかし、ほとんどの場合、プロセスが終了するまで、出力は送信されません。

エコーを終了時と同じように反復で送信するには、これをどうすれば制御できますか?

EDIT:

これは、出力バッファ機能を、暗黙のコードです:

set_time_limit(60); 
    ini_set("memory_limit", "256M"); 

    $documents = $this->documents_model->get($date1, $date2); 

    ob_start(); 

    echo '-- Start ' . "<br>\n"; 

    ob_end_flush(); 
    flush(); 

    foreach ($documents as $document) { 

     ob_start(); 

     echo '-- Processing document ' . $document->id . "<br>\n"; 

     $file = $document->get_file_name(); 
     if (! $file || ! file_exists(DOCUMENT_ROOT . 'documents/' . $file)) { 

      echo '---- Document ' . $document->id . " has no PDF file yet or it was deleted<br>\n"; 

      $path = $this->documents_model->generatePDF($document); 
      echo '------ file generated: ' . $path; 
     } 

     ob_end_flush(); 
     flush(); 
    } 

    echo '-- End ' . "<br>\n"; 
+0

このスクリプトをブラウザまたはcliモードで実行しますか? –

+0

ブラウザから実行中です – user3514092

+0

PHPで 'ob_buffer'をチェックアウトします。スクリプトがそれをするのを待つ代わりに、出力をフラッシュするよう強制することができます。 –

答えて

1

あなたが処理終了後の出力を取得する理由は、最終的にはPHPの出力バッファとありますあなたのウェブサーバのバッファ

echoステートメントのたびに、ob_flush()flush()の呼び出しでこれらのバッファをフラッシュする必要があります。

詳細な技術情報については、PHP buffer ob_flush() vs. flush()

+0

これはob_flush()またはflush()、またはその組み合わせでは機能しません。すべての出力は、処理の最後に表示されます。 – user3514092

関連する問題