mochikoAsTechのdig日記

当方好きなコマンドはdigです!お友達から!!よろしくお願いします!!!

php -Sをたたくだけで動作確認用のウェブサーバが立てられる

PHPビルトインウェブサーバーのこと知らなかったので書いとく。

PHP 5.4.0 から、CLI SAPI にはウェブサーバーの機能が組み込まれるようになりました。 URI リクエストの処理は、PHP を開始した時点の作業ディレクトリから行われます。 -t オプションを使えば、ドキュメントルートを明示的に指定することができます。

まじか!Apacheいなくても $ php -S localhost:80 -t /var/www/html/ とかでさっとウェブサーバ立つのか!

PHPのビルトインウェブサーバーって何よ?

PHPには「ビルトインウェブサーバー」という機能があって、それを使うと「ちょっとしたソースをPHPで書いて、ブラウザで動作確認したい!」というとき、わざわざApachePHP(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 が出るのね。

f:id:mochikoAsTech:20190516132305p:plain
index.phpが見られた!

ターミナル側はアクセスログも表示される。

[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ページが表示された。

f:id:mochikoAsTech:20190516132444p:plain
404 not found出た!

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にも 

このウェブサーバーは、アプリケーション開発の支援用として設計されたものです。 テスト用に使ったり、制約のある環境でアプリケーションをデモするために使ったりすることもできるでしょう。 あらゆる機能を兼ね備えたウェブサーバーを目指したものではないので、 公開ネットワーク上で使ってはいけません。

と書いてあるように、「これでウェブサイト公開しちゃおう!!」じゃなくて、あくまで自分の動作確認用にさっと使うものなんだね。   地味だけど便利だー。

PHP: ビルトインウェブサーバー - Manual