XAMPPでもMAMPとコードを共用したいし、同じ考え方でバックアップもしたいし、/Applications/xampp/xamppfiles/htdocs/ にコード置き場のディレクトリをシンボリックリンクしてみることにしました。
ところが、これがはまりました
単純にシンボリックリンクを作って、所有者を変えたりパーミッションを変えたりディレクトリのリンクではなく単一ファイルに変えたり、いろいろやってみましたがダメです。
$ ln -s /Volumes/Users/user001/Documents/MAMP/htdocs/test不思議なのは、所有者自身が参照すると問題なさそうなのに、所有者でない者(XAMPPはnobodyで動作)がディレクトリを2階層飛び越えてアクセスしようとすると、エラーとなってしまうのです。そのためWebブラウザから http://localhost/test/ としてもPermissionエラーとなってしまうのでした。
$ ls -l test/*
-rw-r--r-- 1 user001 wheel 189 May 20 07:09 test/index.php
-rw-r--r-- 1 user001 wheel 217 May 20 07:09 test/info.php
-rw-r--r-- 1 user001 wheel 245 May 20 07:09 test/unittest.php
-rw-r--r-- 1 user001 wheel 187 May 20 07:09 test/xmlrpc.php
$ sudo -u nobody ls -l test
lrwxr-xr-x 1 user001 wheel 79 May 20 11:06 test -> /Volumes/Users/user001/Documents/MAMP/htdocs/test
$ sudo -u nobody ls -l test/*
ls: testproj/index.php: Permission denied
ls: testproj/info.php: Permission denied
ls: testproj/unittest.php: Permission denied
ls: testproj/xmlrpc.php: Permission denied
半日は悩んで、やっと原因がわかりました。Path名から想像がつくと思いますが、シンボリックリンクを置いた /Applications/xampp/xamppfiles/htdocs/ と、コードの実体である /Volumes/Users/user001/Documents/MAMP/htdocs/test は、別ボリューム(別パーティション)にあります。
パーティション間のシンボリックリンク、これが原因のようでした。試しにハードリンクを作ってみようとしたら怒られたことから思いつき、コードの実体を同一のボリュームに移して実験してみると、素直にリンクが動作します。あ〜、疲れた
解決したわけではないけど、パーティション越えのシンボリックリンクをあきらめれば、なんとかなるか... これはバグだよなぁ。Appleに報告すべき?