我在 MacOS X Lion 10.7.4 上运行 Apache/PHP。我的目录结构是这样设置的:
/Users/achan/Sites/
lrwxrwx--- 1 achan staff 23B Apr 27 16:21 epwbst@ -> /Users/achan/dev/epwbst`
epwbst/
里面的符号链接在哪里~/Sites
。
如果我放在test.php
目录Sites/
中,Apache 会正确提供文件;phpinfo()
它像它应该的那样喷出。如果我将相同的文件放在符号链接下,则会出现此错误:
[Mon May 28 14:47:13 2012] [error] [client ::1] PHP Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
[Mon May 28 14:47:13 2012] [error] [client ::1] PHP Fatal error: Unknown: Failed opening required '/Users/achan/Sites/epwbst/test.php' (include_path='.:/usr/lib/php/pear') in Unknown on line 0
为了确保 Apache 正常工作,我在下面创建了一个测试 html 文件~/Sites/epwbst/
,Apache 按预期提供了它。
为什么 Apache 不能在我的符号链接目录下运行 php?
我在这里粘贴了我的 php 配置:http: //pastebin.com/gg27JyVZ
好吧,这让我抓狂了几个小时。这是一个权限问题,但不是人们的想法。问题在于符号链接本身的权限:
这就是问题所在:
chmod
通常不会更改符号链接的权限,因为(除了明显的例外php5_module
和超出此答案范围的其他一些情况)这些权限在很大程度上是无关紧要的,因为它们在几乎所有上下文中都被忽略了。这是修复:注意
-h
. 从手册页:出于某种原因,
php5_module
实际上要注意符号链接上的权限。如果它们限制太多,php5_module
将拒绝查看目标,即使httpd
用户可以使用/usr/bin/php
.考虑以下:
到目前为止,一切都很好。现在考虑:
嗯。我
httpd
以用户身份运行_www
,所以让我们检查一下该用户是否可以阅读.../foo/info.php
:是的。现在让我们看看该用户是否可以运行
.../foo/info.php
:是的?!卧槽?!哎呀!现在修复它:
砰。完毕。
所以,是的。似乎
php5_module
做了一些偏执和不标准的事情。这可能被忽视了,因为umask
通常默认为022
,它至少会创建与 的符号链接755
。此外,许多文件系统(不是 HFS+)在符号链接创建期间在内核级别强加 777 权限,而不管umask
.你和我似乎是太阳系中的两个人,在 HFS+ 上运行 Apache+PHP,同时将我们的 umask 设置为比默认值更严格的东西。我敢打赌,您甚至还会使用区分大小写的 HFS+。;o)