我在Mac上的本地AMP堆栈上运行第三方PHP应用程序。我最近买了一台带有Lion的新Mac Mini,我正在努力设置它。我以前的电脑是带有MAMP的MB空气。现在我正在使用内置的apache / php和自制的MySQL安装。
这是我的问题:我有一个带符号链接的目录。这些符号链接指向目录,PHP应用程序使用is_dir()
检查这些符号链接。
在我的Lion AMP设置中,此is_dir()
失败。我的雪豹MAMP is_dir()
上的相同设置适用于我的符号链接。
这就是它变得更加好奇的地方。如果我执行php -a
(php交互式命令行模式),并在同一目录上执行is_dir()
,则返回true。它只在apache请求的上下文中返回false。这让我觉得它与apache用户(_www
)无法访问符号链接有关。对此进行故障排除不属于我的专业知识。
其他说明:
FollowSymLinks
了
事实上,有问题的符号链接所在的目录是
符号链接本身。 Apache没有问题。直到PHP is_dir()
使用。is_link()
和readlink()
。有什么想法吗?
答案 0 :(得分:1)
您是否检查了权限/所有者?
从PHP手册:注意:缓存此函数的结果。
答案 1 :(得分:1)
啊看到你关于将它们更改为777
的评论,但仍然想知道为什么它不起作用。
我的解决方案可能对您没有帮助。
编辑:
如果您有/etc/apache2/httpd.conf
的访问权限,请通过sudo vi /etc/apache2/httpd.conf
进行修改
然后更改这些行中的这些行或两者
User _www
Group _www
以下是我的目录列表示例。
ace:remote-app ace (git::master)$ ls -al
total 72
drwxr-xr-x 24 ace staff 816 7 Aug 00:24 .
drwxr-xr-x 11 ace staff 374 4 Aug 13:46 ..
drwxr-xr-x 3 ace staff 102 12 Jul 17:06 .bundle
drwxr-xr-x 14 ace staff 476 7 Aug 02:29 .git
-rw-r--r-- 1 ace staff 100 1 Aug 19:20 .gitignore
-rw-r--r-- 1 ace staff 9 1 Aug 19:20 .rspec
drwxrwxr-x 10 ace staff 340 14 Jul 15:58 public
现在,我的公共目录具有775
权限,这意味着owner
和group
具有完全权限,而其他用户只能读取和执行。
这取决于您是否希望apache用户从默认ace
成为_www
,或者从默认staff
成为_www
的apache用户。
一旦确定要更改哪个,请重新启动apache。
/usr/sbin/apachectl graceful
您的页面现在应该可以访问目录/文件了
需要注意的一点是,您必须更改已经由您的网页编写的文件的所有权,因为这些文件具有_www:_www
所有权,并且在重新启动后您将无法访问它们。
您可以通过此更改新的所有权,-R
是为了使其递归。
sudo chown -R newapacheuser:newapachegroup <path>
答案 2 :(得分:0)
我有类似的问题。我创建了以下链接:
cd /home/mike/uploads
ln -s ./data /sites/www.test.com/docroot/data
然后我在/sites/www.test.com/docroot中创建了一个test.php文件,该文件只是执行了以下操作:
$dir = "/sites/www.test.com/docroot/data";
"is_dir\t\t" .is_dir($dir) ."\n";
当我从命令行运行test.php时,它会显示为is_dir为True,但是当我从浏览器通过apache加载test.php时,它是False。
我去了/sites/www.test.com/docroot/data并做了一个
chmod -R 755 .
这没有改变任何事情。然后我意识到,实际的符号链接目录的父需要适当的权限设置(/ home / mike / uploads)。我在那个目录上做了一个chmod,一切正常!