質問: 3000; app.listen(port, ()=> { console.log('Expressサーバー起動'); }); ``` ターミナルにて以下のコマンドを叩くと思います。 `node server.js` するとターミナルでサーバーの起動が確認でき、 Ctrl+c などサーバーが終了するまで処理待ちをし続けます。逆にいうとこのコマンドを叩いてサーバーが起動していなかったら何もできない。 PHPでは、上記のように「プログラムにてサーバーを起動」「ターミナルでコマンドを叩く」という処理をした記憶がございません。 PHPでは常にサーバーが処理を待ち続けている状態が続くという認識で良いのでしょうか?
回答: > > PHPでは、上記のように「プログラムにてサーバーを起動」「ターミナルでコマンドを叩く」という処理をした記憶がございません。 > > > それはね、PHPがApacheというアプリケーションに乗っかってるからよ。 解説します。 Apacheはディレクトリと、Webサーバのパス部を紐づけしてWebサーバとして稼働する静的ファイル配信サーバーアプリケーションです。 実行するとOSの80番ポートで待ち受けてWebサーバーとして稼働し始めてくれます。 PHPはApacheに対してmod_phpというモジュールを提供しています。 Linuxマシンにパッケージ管理ソフト越しにApacheとPHPをインストールすると、 このmod_phpモジュールや各種設定が自動的に組み込まれます。らくちん。 その処理を施したApacheを起動すると、設定ファイルに従ってPHPプロセスを4個程度並列起動させ待機状態にさせます。 HTTPリクエストが飛んできて`xxx.php`ファイルを指定されると、 PHPプロセスを実行し結果の文字列(動的なHTML)を返すような仕組みになっています。 他にもApacheにはCGIという機能があり、 シェバン)で指定されているありとあらゆるスクリプトファイルを実行することが出来ますが、 mod_phpとは違いプロセスの立ち上げから行うのでとても遅い実行速度になります。 Node.jsやRuby on Rails、Pythonなどの言語でもWebサーバを立ち上げる事は可能ですが、 PHPのようにApacheに寄り添った設計にはなっていませんので、 自力で80番ポートに穴を開けてHTTPリクエストを待つという作りになっています。 この辺により導入して動かしてみる所までは、非エンジニアにはとても敷居が高いので、 初心者がWebサーバを建てるならPHPがオススメだよという理由になっています。