はじめに

普段遣いのmacにwebサーバーを立てて、PHPを動かせて、なおかつ拡張子が.htmlでもPHPを動かせるようにする

なぜ、.htmlでPHPを動かしたいかというと、PHPで出力した内容を使って静的なページを別のところに書き出したかった。いろいろと方法があるとは思うのだけれども、今回はこの方法をとった。拡張子が.htmlでも中に直接PHPを記述できると、URLのリンクを .php から .html に書き直したりせず、出力した結果を純粋にコピーしたものを静的なページとして保存できるから。と考えた。

ごちゃごちゃうるせいやい、手順だ手順

ということで、今回は mac でwebサーバーを立ち上げて、ルートを指定したところに変えた上で、拡張子が.html でも動くようにする。

webサーバーを立ち上げる

Catalinaでもデフォルトで入ってるので、ターミナルアプリを立ち上げて、以下のコマンドをたたく。アカウントパスワードを求められるので、入力してreturn。


sudo apachectl start

webブラウザを立ち上げて、 http://localhost を表示させて、It's Work と出れば、問題ない

PHPを動かせるようにする

ターミナルで以下のコマンドをたたく


sudo vi /etc/apache2/httpd.conf

viエディタの使い方は割愛する。「viの使い方/基本操作 - 空間情報学講座 - 京都大学」などを参照するといい。

Catalinaだと php7が入っているようで、以下の箇所の行頭 # をとって上書き保存。


#LoadModule php7_module libexec/apache2/libphp7.so

なお、phpのバージョンはOSによって入ってるバージョンが異なったりするので、コマンドモードで /LoadModule php で検索して移動すると探しやすいかも

編集が終わったら、Apacheを再起動させる


sudo apachectl restart

これでドキュメントルートにphpファイルを入れれば動くはず。ドキュメントルートについては次の項目

ドキュメントルートを変える

これは必要がある場合のみ変えればいい。webサーバーを立ち上げた際、It works! を書かれたファイルは、/Library/WebServer/Documents フォルダ内にある。そこを編集していけば、localhostで表示される内容は編集できるが、別のファイル場所を参照したい場合は ドキュメントルートを変更する。viで/etc/apache2/httpd.confを再び編集する。

以下の箇所にドキュメントルートの指定する記述があるので、/Library/WebServer/Documents を指定したいファイルの置き場所に変更する。ちなみに、参照させたいフォルダの位置がよくわからない場合は、ターミナルにドロップすると出てくる。


DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">

編集が終わったら、Apacheを再起動させる


sudo apachectl restart

localhostにアクセスして、指定したファイルフォルダの内容が表示されれば成功

.htaccess を使用できるようにする

最終目標である、.htmlでphpを動かすには、.htaccess を使用できるようにしないといけないので、viで/etc/apache2/httpd.confを再び編集する。

ドキュメントルートのところにある、Directory内に AllowOverride None の記述があるので、コメントアウトして、AllowOverride All を追記。


DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">

--中略

#AllowOverride None
AllowOverride All

編集が終わったら、Apacheを再起動させる


sudo apachectl restart

これで.htaccesssが使えるようになる。

.htaccess を使用して .html でも phpを動かせるようにする

最後に、.htaccessファイルを作成して、以下の記述を追記して、ドキュメントルートに保存する


AddHandler application/x-httpd-php .php .html

Apacheの再起動はしなくて大丈夫なはずなので、index.html内とかにphpの記述をしてaccessしてみて、phpが動いていれば成功