PHPのモジュール版とCGI版の動作の違いについて認識が正しいかどうかと、それに関する資料などがありましたらご回答いただきたいです。
背景
LaravelのdispatchAfterResponse()がローカル環境では意図通りに動かず、本番サーバーでは問題なく動作したため調査をしていました。
調べていく中でローカル環境はPHPがモジュール版、本番サーバーではCGI版であることがわかり、いろいろなサイトを見つつ下記プログラムの動作の違いに気がつきました。
動作確認環境
・さくらのレンタルサーバー(スタンダードプラン)
・Apache2.4
・PHP7.4
プログラム
PHP
1<?php 2for ($i = 0; $i < 5; $i++) { 3 echo $i; 4 sleep(2); 5}
実行結果
- モジュールモードでは全ての処理が完了した約10秒後に画面が表示される
- CGIでは約2秒ごとに画面に数字が追加表示されていく
補足?
- モジュールモードで関連しそうなPHP設定output_bufferingはOffです。
- CGIでも、for()をob_start()とob_end_flush()で囲むとモジュールモードと同様の結果となりました。(これはもちろん意図通り)
上記の結果から
- モジュールモードではApacheのプロセス内でPHPを実行するため、途中でecho等出力をしてもプログラムが終了するまでレスポンスが送出されない?
- CGIはecho等を実行するたびにApacheがレスポンスを送出している?
あなたの回答
tips
プレビュー