nginxとFastCGI環境でPHPのob_flushを使う方法IT系おじさんのチラシの裏2018年10月~プロフィールAUTHOR:とっちら書きたくなったときに書きたいことを書く雑記ブログ。IT系のネタが多いかも知れません。11:57とっちら1年前の記事に助けられました。14:28とっちらこの記事のお陰で60分録画できるようになりました。16:01とっちらライセンスを明示して貰えると使いやすいのですが。14:37ご回答いただきどうもありがとうございます。21:56とっちら超初心者です。)PHPでリアルタイムに進捗状況を把握したい時など、文字出力の際に、ob_flush関数を使い、バッファを出力すると思いますが、これが動作する環境としない環境があるんですよね。Module環境下での情報なども山ほどヒットするため、混乱しがちです。備忘録として記事にしておきます。nginx+FastCGIでPHPのバッファフラッシュを使う方法あれこれ語る前にとっとと実例いきましょう。5とカウントされていき、最後にDoneと表示されます。実際の動作を見たい方はこちらをどうぞ。両方をオフにせよ、という指示のようです。...のようです、と自信がないのは、下記ページの受け売りだから...。https://stackoverflow.com/questions/4870697/php-flush-that-works-even-in-nginxproxy_bufferingとfastcgi_bufferingの謎きちんと検証できれば堂々と言えるのですが、うちの環境でテストした限りでは、nginx.confで、proxy_bufferingとfastcgi_bufferingを両方オフにしても、バッファリングされ続けてしまい、即時表示が出来なかったんですよ。」さえ付ければちゃんと出力できちゃう。あ、それだけじゃないや。ob_end_clean();も必要でした。これも謎なのですが、ob_end_cleanを実行しておかないとやっぱりまとめて表示されてしまうんです。confの書き方が間違っていたのかなぁ。ちなみに、うちのテスト環境はWindowsなので、Win版のnginxを使っていますし、PHPは7.4です。そのあたりも何か影響しているのだろうか。いうバッファフラッシュが必要なのってテスト環境とか管理画面じゃないですか?例えばWeb上の管理画面での日次処理。バックアップボタンをポチっと押したら、「バックアップ開始」「ファイルをコピー中...」「コピー完了」「ファイルを圧縮中...」「圧縮完了」みたいに進捗表示をしたいケースとか。ひとつひとつのタスクを一本のPHPにして毎回呼び出すとか、進捗状況をテキストファイルに書き出しつつ、別のプログラムやJavaScriptの非同期通信で進捗表示をする方法もあると思うし、そちらのほうが王道でしょう。自分しか使わない管理画面にそこまで手間かけたくない。そんなケースありませんかね。ob_end_clean();を実行すればオーケー!とわかったのでヨシとします。ほかのおまじないなんだか理由は曖昧だけれど、これを実行しておけばOK的なコードを「おまじない」と呼ぶケースがあり、そういうの気持ち悪くてあまり好きではないのですが、ob_flushが動作しない状況を調べていて出てきた情報があったので、こちらも一応書いておきます。//gzip圧縮を無効ソースコードにコメントしたとおり、ちゃんとそれぞれに意味はあるのですが、うちの環境(FastCGI)では特に効果はありませんでした。output_bufferingの設定は有効だとは思います。noneをヘッダ出力するとgzip圧縮が無効になるってちょっと面白いですね。offを付けているので特に意味はないのですが、レンタルサーバー等で設定変更できない場合には有効なのかも知れません。泥臭いけど場合によっては選択肢に入る力技これも海外の掲示板で見かけた方法を少しアレンジしたのですが、クスッと笑いつつも、ちゃんと解決策のひとつにはなりえると感心もした方法です。'Done';バッファリングが止められないならバッファをあふれさせれば良いじゃない!という脳みそ筋肉な発想、嫌いじゃありません。出力するたびに4096バイト分の空白が入るので、非常に、ひっじょ~~~に通信帯域の無駄遣いですが、見た目ではわかりませんし、社内ネットワークでしか使わないとか、ほんの数行しか出力する予定はないとか、いくらかの条件付きながら、十分選択肢のひとつになりえると感じました。ほとんどないと思いますけど、最近記憶力に自信がなくて、わからないことをググったら自分のブログ記事がヒットする、という現象がとてもと~っても増えてきたので、きっと未来の自分の役には立つはず。信じて投稿することに致しました。コメント投稿直後ならコメントの編集/削除が可能です。※24時間経過するか、新しく投稿した場合は古い投稿の編集や削除は出来ません。※ブラウザでCookieが受け入れられない場合はこの機能は使えません。非公開にチェックを入れたコメントは管理人のみ閲覧できます。コメント投稿のガイドライン誰もが閲覧できるコメント欄ですので個人が特定できる情報等は書き込まないようにしましょう。他人のHPやブログの文章を掲載する場合は著作権法第32条「引用」の条件を満たすかご確認ください。誹謗中傷にあたる表現などは場合によっては法的な責任を問われる可能性があるためご注意ください。とっちらか~るTOP。