LoginSignup
11
11

More than 5 years have passed since last update.

手軽にhtmlファイルをphpで実行可能なサーバを立てる

Last updated at Posted at 2013-02-22

要約

課題

@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
router.php
<?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

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11