Mac OSX10.8でPHP


OSがインストールされた状態で既にhttpサーバもphpもインストールされているので設定だけで済んだ。しかしCGI版のPHPは入ってないみたいなので別にインストールする必要がある。でもまあ通常はapacheのモジュールでPHPを実行するのでこのままでも問題ないかと。以下は作業した時のメモ。

Apacheの設定と起動

以前はweb共有の設定画面がシステム環境設定画面にあったようだがOSX10.8では見当たらない。httpdはapacheなので設定ファイルを見てみる。

$less /etc/apache2/httpd.conf

DocumentRoot “/Library/WebServer/Documents”
の記述があった。
/Library/WebServer/Documents/が全体のrootディレクトリのようなのでこの中身を見てみる。

$ls -la /Library/WebServer/Documents/
drwxr-xr-x  5 root  wheel    170  8 25  2012 .
drwxr-xr-x  5 root  wheel    170  8 25  2012 ..
-rw-r--r--  1 root  wheel   3726  8 25  2012 PoweredByMacOSX.gif
-rw-r--r--  1 root  wheel  31958  8 25  2012 PoweredByMacOSXLarge.gif
-rw-r--r--  1 root  wheel     44  2 11 17:55 index.html.en

index.html.enがデフォルトで表示されるみたい。Finder上では/Libraryのフォルダ名は/ライブラリになっている。とりあえずhttpdを起動して見る。

$sudo apachectl start
$curl http://localhost/
<html><body><h1>It works!</h1></body></html>

index.html.enの中身が表示されたのでhttpdが起動できているのを確認する。httpd.confのほかの部分を見てみる。

#エラーログの場所
ErrorLog "/private/var/log/apache2/error_log"
#アクセスログの場所
CustomLog "/private/var/log/apache2/access_log" common

#
# "/Library/WebServer/CGI-Executables" should be changed to whatever your ScriptA
liased
# CGI directory exists, if you have that configured.
#
<Directory "/Library/WebServer/CGI-Executables">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

デフォルトでCGIの実行が許可されているのは
/Library/WebServer/CGI-Executables
手っ取り早くCGIを使いたい場合はここを使えはよいと。

<IfModule alias_module>
...
    ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) "/Library/WebServer/CGI-Executables/$1"
</IfModule>

URLのaliasは/cgi-bin/が割り当てられてている。http://localhost/cgi-bin/でOK。普通はapacheのモジュール使うからCGIはあんまり使う機会がない。

PHPの設定

apacheでPHPが動くように設定を行う。

$sudo vi /etc/apache2/httpd.conf

#LoadModule php5_module libexec/apache2/libphp5.so
の行を探して
LoadModule php5_module libexec/apache2/libphp5.so
先頭の#を取り除いて保存する。

動作用確認用のPHPファイルを作成。

$sudo vi /Library/WebServer/Documents/test.php

<? phpinfo() ?>
を書いて保存。
apacheを再起動する。

$sudo apachectl restart

PHPが動いているか確認する。

$curl http://localhost/test.php

php設定のhtmlが見えればOK
/Users/myname/Sites/
をユーザの公開ディレクトリにする。mynameはログインユーザアカウント名になる。ディレクトリがないなら作成しておく。

$mkdir ~/Sites

ちなみにSites以外のディレクトリ(wwwとか)では動作しなかった。OS自体の制限のような気がする。ユーザ専用の設定ファイルを作成する。

$sudo vi /etc/apache2/users/myname.conf
<Directory "/Users/myname/Sites/">
        Options Indexes MultiViews
	AllowOverride None
	Order allow,deny
	Allow from all
</Directory>

を書き込んで保存する。
apacheを再起動する。

$sudo apachectl restart

先ほど書いたphpをコピーして見えるか確認してみる。

$cp /Library/WebServer/Documents/test.php ~/Sites/
$curl http://localhost/~myusername/test.php

php設定のhtmlが見えればOK
次にindex.phpがデフォルトで表示されるようにしておく。

$sudo vi /etc/apache2/httpd.conf

DirectoryIndex index.html
の部分を
DirectoryIndex index.html index.php
のようにindex.phpを追加しておく。
apacheを再起動して確認する。

$sudo apachectl restart
$curl http://localhost/~myusername/

PHP設定のHTMLが見えればOK
HTTPサーバを終了するには

$sudo apachectl stop