is_dir在apache中的符号链接上返回false

时间:2011-08-07 00:25:14

标签: php apache macos symlink osx-lion

我在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)无法访问符号链接有关。对此进行故障排除不属于我的专业知识。

其他说明:

  1. 是的,我已经在我的apache配置中打开FollowSymLinks了 事实上,有问题的符号链接所在的目录是 符号链接本身。 Apache没有问题。直到PHP is_dir() 使用。
  2. 不,我无法编辑PHP应用程序,只能依靠is_link()readlink()
  3. 我的Snow Leopard / MAMP设置完全相同。
  4. 有什么想法吗?

3 个答案:

答案 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权限,这意味着ownergroup具有完全权限,而其他用户只能读取和执行。 这取决于您是否希望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,一切正常!