PHP

phpのビルトインウェブサーバーで拡張子.htmlをphpとして動作させる

More than 3 years have passed since last update.

例えば本番環境で "*.html" でPHPスクリプトを動かしている案件のサポートを依頼され、ローカルで簡単な動作確認を行いたいケースがあるとします。

Apacheなら.htaccess等で制御出来ますが、PHP5.4+のビルトインウェブサーバーで動作させたい場合はどうしたらよいでしょうか。

ビルトインウェブサーバーにはルータースクリプト機能がついていますので、ファイルの拡張子で判別して require してやれば動作します。

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

<?php

$path = $_SERVER["SCRIPT_FILENAME"];

if(preg_match("/\.html$/", $path)){
chdir(dirname($path));
return require($path);
}

return false;

chdir でディレクトリを変更しているのは、ルーティング時のカレントディレクトリがドキュメントルートになってしまっている為です。そのまま require すると、スクリプト内で相対パスのファイル扱いたい時にファイルが見つからずにエラーが発生してしまいますね。