2011-01-17 24 views
1

私は、検索エンジンにリクエストし、サービスされた結果にアクセスし、結果から詳細を抽出し、より有用な形式で印刷するPHPスクリプトを作成しました。PHPでストリーミング印刷

すべてうまく動作しますが、私が誤って発見したことは、データがストリーム配信されるのを待つ間にechoまたはprintを呼び出すと、出力もストリームされる可能性があるということです。具体的には、結果が複数あるので、最初のページにアクセスして読み込んで再印刷し、次のページに移動し、次のページが読み込まれるのを待つ間に前のページのコンテンツが表示されますブラウザ。

私が理解していないことは、これが一貫していない理由です。次のページに移動する前に正確に1ページが印刷されることもあります。その後、私が基本的に同じことをすると(毎回の結果が指し示すページを読んで)、出力はまったく流れず、1分ごとに再描画されます。

私はfile_get_contents($url)を使用してコンテンツを取得し、echoの関数を呼び出してこれまでに読み込まれたものを出力しています。このストリーミングプリントの動作は、ブラウザの機能であり、PHPで書かれているものとは関係ありませんか?そうでない場合は、どうすればそれをより良くコントロールできますか?

答えて

5

最も簡単な修正はoutput bufferingです。基本的な考え方は、スクリプトの冒頭でob_start()に電話し、ページコンテンツをクライアントに送信する場合はob_end_flush()に電話することです。これにより、プログラムから送信されるまで、すべての出力が保存されます。

+0

おかげで、それは確かに私が探していたようだが、それはまだ期待どおりにはまだ動作しません。私はドキュメントとコメントを読んだことがありますが、最初は何百回もフラッシュされていて、面白いプリントが終わるごとにob_flush()がありますが、奇妙な間隔で(13ページごとに10ページごとに)プリントします。 チャンクサイズに問題がありますか?私はphp.iniの3バイトに設定したので、それを修正する必要があります。たぶん私はサーバーを再起動する必要があります... – orlade

+0

あなたのアルゴリズムに問題がありますか?それ以外の場合は、13の結果ごとに印刷する理由がわかりません。たぶんあなたのWebサーバーで何か奇妙なことが起こっているのでしょうか? – GWW

+1

ああ、持っています。私は 'ob_flush();'と 'flush();'と呼ぶ必要がありました。混乱するもの。ありがとう! – orlade