PHPのビルトインウェブサーバーのこと知らなかったので書いとく。
PHP 5.4.0 から、CLI SAPI にはウェブサーバーの機能が組み込まれるようになりました。 URI リクエストの処理は、PHP を開始した時点の作業ディレクトリから行われます。 -t オプションを使えば、ドキュメントルートを明示的に指定することができます。
まじか!Apacheいなくても $ php -S localhost:80 -t /var/www/html/
とかでさっとウェブサーバ立つのか!
PHPのビルトインウェブサーバーって何よ?
PHPには「ビルトインウェブサーバー」という機能があって、それを使うと「ちょっとしたソースをPHPで書いて、ブラウザで動作確認したい!」というとき、わざわざApacheとPHP(mod_php)を入れてバーチャルホスト作らなくても、PHPだけでウェブサーバが立てられるようだ。
どうやって使うの?
たとえばサーバ上でこんな感じの index.php
というソースが /var/www/test/
にあるとする。
<?php echo "neko";
んで自サーバにグローバルIP(203.0.113.222)がくっついているなら、以下のコマンドをたたくだけ。
# php -S 203.0.113.222:80 -t /var/www/test/
たたくとこんな感じでビルトインウェブサーバが立ち上がる。
# php -S 203.0.113.222:80 -t /var/www/test/ PHP 5.6.40 Development Server started at Thu May 15 19:33:14 2019 Listening on http://203.0.113.222:80 Document root is /var/www/test Press Ctrl-C to quit.
そして手元のブラウザで http://203.0.113.222/
を開くと index.php
が表示されたー! /
でアクセスしたときにちゃんと index.php
とか index.html
が出るのね。
ターミナル側はアクセスログも表示される。
[Thu May 15 19:33:21 2019] 203.0.113.111:60374 [200]: / [Thu May 15 19:33:26 2019] 203.0.113.111:60375 [200]: /index.php [Thu May 15 19:33:50 2019] 203.0.113.111:60859 [404]: /favicon.ico - No such file or directory
あとindex2.php
みたいに存在しないページにアクセスすると、次のような404ページが表示された。
Not Found The requested resource /index2.php was not found on this server.
ターミナル側のアクセスログでもちゃんと404って出てる。
[Thu May 15 19:34:29 2019] 203.0.113.111:60376 [404]: /index2.php - No such file or directory
立ち上がってるウェブサーバを落としたいときは、Ctrl+Cを押せばそれだけで終了する。
どんなときに使うもの?
「ちょっとしたソースをPHPで書いて、ブラウザで動作確認したい!」ときに便利!確認してないけどMacなら $ php -S localhost:80 -t /var/www/html/
って書いて、ブラウザで http://localhost/
見ればよさそうだし。
ただphp.netにも
このウェブサーバーは、アプリケーション開発の支援用として設計されたものです。 テスト用に使ったり、制約のある環境でアプリケーションをデモするために使ったりすることもできるでしょう。 あらゆる機能を兼ね備えたウェブサーバーを目指したものではないので、 公開ネットワーク上で使ってはいけません。
と書いてあるように、「これでウェブサイト公開しちゃおう!!」じゃなくて、あくまで自分の動作確認用にさっと使うものなんだね。 地味だけど便利だー。