要約
課題
@kamipoさんの簡単に手元でHTTPのファイルサーバ立てる方法を読んで手元で立てたサーバでphpファイルも実行させて返すときは
$ php -S 0.0.0.0:5000
させればいいということを知りました(感謝)。でも、htmlファイルはそのまま返されるから、
AddType application/x-httpd-php .php .html
されているディレクトリのhtmlファイルもphp実行して返したいです。切実に。
ソリューション
$ curl -s http://php-osx.liip.ch/install.sh | bash -s 5.4
<?php
$request_file = $_SERVER["REQUEST_URI"];
if (preg_match('/\.(?:png|jpg|jpeg|gif|css|js)/', $request_file)) {
return false;
}
if (!preg_match('/\.(?:html|php)$/', $request_file)) {
$request_file .= '/index.html';
}
else if (preg_match('/\/$/', $request_file)) {
$request_file .= 'index.html';
}
require_once(__dir__ . $request_file);
?>
$ php -S 0.0.0.0:5000 router.php
説明
webrickとかplackだとphpファイルは実行できないけど、php(>= 5.4)のビルトインサーバだとphp実行出来るということを初めて知りました。今まではApache起動してたから、これすごい便利!
でもそれだと.htaccess
でhtmlファイルをphp実行している場合にはhtmlファイルはそのまま返されていたので、強制的に全ファイルをphp実行するようしました。(ワンライナーじゃなくなってるけど)
そして、これの便利なところはrouter.php
は実行時に評価されるから、router.php
にtypoあったりしてもphpのビルトインサーバを終了することなく、変更を加えてブラウザでリロードすればrouter.php
が再評価されるということです。
ただ、phpは5.4以上が必要なので(Macに入っているデフォルトは5.3系)、5.4以上をインストールする必要があります。homebrewやMacportsでインストールすることができますが、一番簡単そうなのは Macで一番簡単にPHP5.4をインストールする方法で紹介されている通り、
curl -s http://php-osx.liip.ch/install.sh | bash -s 5.4
だと思います。僕はhomebrewにしましたが。
router.php
は上記のままだとGETパラメータ付いていたりする場合に変なパスが読まれたりするので、そこは自分に合うように編集して下さい。サーバの再起動は不必要です。サーバの再起動は不必要です。
いちいちapachctl
でApache起動しなくて良くなったりしてかなり便利になりました。
参考:
http://blog.kamipo.net/entry/2013/02/20/122225
http://www.1x1.jp/blog/2012/05/php_54_for_mac_os_x_as_binary_package.html
http://php.net/manual/en/features.commandline.webserver.php