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

zmeyuzjn  于 2022-11-16  发布在  Apache
关注(0)|答案(4)|浏览(119)

我在Mac的本地AMP堆栈上运行了一个第三方PHP应用程序。我最近买了一台新的装有Lion的Mac Mini,正在尝试设置它。我以前的电脑是一台装有MAMP的MB air。现在我使用的是内置的apache/php和一个自制的MySQL。
我的问题是:我有一个带有符号链接的目录,这些符号链接指向目录,PHP应用程序使用is_dir()检查这些符号链接。
在我的Lion AMP设置上,这个X1 M1 N1 X失败了。在我的Snow Leopard MAMP X1 M2 N1 X上的相同设置与我的符号链接配合得很好。
这是更有趣的地方。如果我用php -a(php交互式命令行模式),并在完全相同的目录上执行is_dir(),它返回true。它只在apache请求的上下文中返回false。这使我认为它与apache用户有关(这是_www)无法访问符号链接。故障排除超出了我的专业范围。
其他注意事项:
1.是的,我在apache配置中打开了FollowSymLinks,实际上,有问题的符号链接所在的目录本身就是一个符号链接。Apache对此没有问题。直到使用PHP is_dir()
1.不,我不能编辑PHP应用程序,只能回到is_link()readlink()
1.这个完全相同的设置工作在我的雪豹/MAMP设置。
有什么想法吗?

gv8xihay

gv8xihay1#

我看到了你的评论,把它们改为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用户从默认的_www变为ace,还是希望apache组从默认的_www变为staff
一旦你决定了要改变哪一个,重新启动apache。

/usr/sbin/apachectl graceful

您的页面现在应该可以访问目录/文件。
需要注意的一点是,您必须更改已由您的网页写入的文件的所有权,因为这些文件具有_www:_www所有权,并且在重新启动后您将无法访问它们。
你可以通过这个改变自己的新所有权,-R就是让它递归。

sudo chown -R newapacheuser:newapachegroup <path>
w51jfk4q

w51jfk4q2#

是否检查了权限/所有者?
来自PHP手册:注意:此函数的结果已缓存。

xkftehaa

xkftehaa3#

我有一个类似的问题。我创建了以下链接:

cd /home/mike/uploads
ln -s ./data /sites/www.test.com/docroot/data

然后我在/sites/www. example. com中创建了一个test.php文件www.test.com/docroot,它只执行以下操作:

$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 .

这并没有改变什么。然后我意识到,实际符号链接目录的parent需要适当的权限设置(/home/mike/uploads)。我在那个目录上做了一个chmod,一切都正常了!

ui7jx7zq

ui7jx7zq4#

检查php配置中的open_basedir指令。该路径也应该包含在内。在linux中,你可以列出多个文件夹,用冒号分隔它们。
https://www.php.net/manual/en/ini.core.php#ini.open-basedir

相关问题