PHP とデータベースソフトを連動させて何かをする、というのは最近流行のようで、あちこちで記事を見かけるようになった。Mac OS X Server ではこのあたりが標準でついてくるみたい (?) だけど、Server でない OS X でも手間を惜しまなければちゃんと動かすことができる。遊び半分でやってみたのだがなかなか面白かったので、忘れないようにメモしておこうと思う。
作業環境は、Mac OS 10.1.2 + Developer Tools (December 2001)。例によって Terminal 操作が必要なのでそのつもりで。コンパイル済みのバイナリをインストールする、という手もあるんだけど、まだ Mac OS X 上の UNIX 系ツールのバイナリインストールはいま一つこなれてないかな?という気がするので、今回は全部ソースからコンパイルしてみる。
先に MySQL をインストールする。MySQL を使わないときはとばして 2. に行ってよい。
MySQL を走らせる専用のユーザーを作っておく。
uid 70 gid 71 expire 0 name mysql realname mysql passwd * home /usr/local shell /dev/null change 0
MySQL のサイトからダウンロードする。2002/1/1 時点での最新版は 3.23.47 だった。StuffIt Expander または tar で解凍して、Terminal 上でそのディレクトリに移動しておく。
./configure --mandir=/usr/local/share/man --with-innodb --with-charset=utf-8 --with-mysqld-user=mysql make sudo make install
/usr/local/bin
にパスが通っていると仮定している)
sudo mysql_install_db
mysql
にする。
sudo chown -R mysql /usr/local/var
sudo safe_mysqld --user=mysql&
sudo mysqladmin -u root password [newPassword] sudo mysqladmin -u root -p flush-priviliges
mkdir /Library/StartupItems mkdir /Library/StartupItems/MySQL
/Library/StartupItems/MySQL/MySQL
ファイルを次の内容で作成。
#!/bin/sh . /etc/rc.common ## # Start up MySQL server ## if [ "${MYSQLSERVER:=-NO-}" = "-YES-" ]; then ConsoleMessage "Starting MySQL Server" /usr/local/share/mysql/mysql.server start fi
/Library/StartupItems/MySQL/StartupParameters.plist
ファイルを次の内容で作成。
{ Description = "MySQL Server"; Provides = ("MySQL"); Requires = ("Resolver"); OrderPreference = "None"; Messages = { start = "Starting MySQL Server"; stop = "Stopping MySQL Server"; }; }
chmod -R -w /Library/StartupItems/MySQL/ chmod +x /Library/StartupItems/MySQL/MySQL sudo chown -R root /Library/StartupItems/MySQL
/etc/hostconfig
を編集して、次の行を最後に追加する。
MYSQLSERVER=-YES-
PHP のサイトからダウンロードする。僕が試したときは最新版は 4.1.1
だったのだが、これは Mac OS X 用に修正するのが難しい。少し古い 4.0.6
をとって来る。解凍して (StuffIt Expander または tar xvfz php-4.0.6.tar.gz
) php-4.0.6
というディレクトリができたら、Terminal 上でそこに cd
しておく。
最初にこのディレクトリ中にある ltconfig
というファイルを次のように書き換える。diff
の出力なんだけどおわかりかな? - で始まる行を消して + で始まる行を挿入する、という意味ね。+ の行が長いので折り返してあるが本当は1行に書くこと。
diff -Naur ltconfig.orig ltconfig --- ltconfig.orig Tue Jan 1 23:25:52 2002 +++ ltconfig Tue Jan 1 23:26:53 2002 @@ -1454,7 +1454,7 @@ hardcode_libdir_separator=: ;; rhapsody*|darwin*) - archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts' + archive_cmds='$CC -force_flat_namespace -bundle -undefined suppress \ -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flags_spec='-L$libdir' hardcode_direct=yes hardcode_shlibpath_var=no
あとは手順通り。
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --mandir=/usr/share/man \ --with-apxs --with-zlib --disable-pear --with-mysql=/usr/local make sudo make install
./configure
の行も長いので折り返してあるが1行で書く。MySQL を使わないときは最後の --with-mysql=/usr/local
は不要。
/etc/httpd/httpd.conf
を開いて(sudo vi /etc/httpd/httpd.conf
)、次の2行を探し出し、先頭の '#'
をとる。
# AddType application/x-httpd-php .php # AddType application/x-httpd-php-source .phps
これをやるとアップデートの時に Web 共有がうまく動かなくなるかも知れません。/etc/httpd/httpd.conf
の書き換えは十分注意してください。
ちょっと横道にそれるけど、apache の設定を書き換えたついでに .htaccess
が通るように設定しておきましょうか。各ユーザー用の設定ファイルが /etc/httpd/users/you.conf
(you
はログインユーザー名)にあるから、それを書き換えておく。
<Directory "/Users/you/Sites/"> Options Indexes MultiViews AllowOverride AuthConfig Limit # もとは AllowOverride None になっているはず Order allow,deny Allow from all </Directory>
これで PHP が apache と連動して動いてくれるはず。テストしてみよう。次の1行だけ書いたファイルを /Users/you/Sites/ の中に phpinfo.php という名前でセーブする。
<?php phpinfo(); ?>
ブラウザで http://localhost/~you/phpinfo.php にアクセスすると、PHP に関する情報が表示される。なかなか感動的でしょう。
それから、MySQL を使うのなら phpMyAdmin をダウンロードしてインストールしておくとたいへん便利。ドキュメントは英語だが、phpMyAdmin 自体は日本語にもちゃんと対応している。ただし、HTTP が通っていればどこからでもデータベースをいじれてしまうので、phpMyAdmin がおいてあるディレクトリにはきちんとアクセス制限をかけておいた方がいい。.htaccess
が有効になるように設定したのはこのため。深慮遠謀でしょう。なんて威張るほどのことじゃないか。