我在使用生产服务器中的克隆设置开发服务器时遇到问题。我们使用CMS,似乎它的一些脚本存在权限问题。我们试图找到它的底部,我们设置了一个PHP脚本来测试权限,并进入终端来比较它的发现。
我们的测试脚本如下
//try one of the essential folders of the CMS
$path= '[our_base_dir]/html/cms/content'
echo $path.' is'.(!is_writable($path) ? ' NOT' : '').' writable.<br/>';
打印
[our_base_dir]/html/cms/content is NOT writable.
然而,当进入终端时,我不明白为什么会这样。这是输出:
$ getfacl content
# file: content
# owner: cchapman
# group: cchapman
user::rwx
user:apache:rw-
group::rwx
mask::rwx
other::r-x
和
$ grep 'cchapman' /etc/group
cms:x:510:cchapman,apache
cchapman:x:512:cms,apache
我认为apache
用户是需要具有写访问权限的用户,而cms
和cchapman
用户只是文件所有者,具体取决于他们的创建方式。在任何情况下,所有三个都应该能够根据组权限读取和写入彼此的文件。
在文件级别和目录级别上也是如此。我唯一的想法是在文件级别处理Apache用户的方式出了问题。可能是吗?或者还有什么可以提供不同的访问权限?
答案 0 :(得分:1)
我怀疑我的评论实际上是答案,所以我将其作为一个发布:
通过在路径字符串is_writable
上调用/html/cms/content
,您需要检查绝对路径/html/cms/content
是否可写。我相信你想要的是:
$path = realpath('./html/cms/content');//note the .
if (is_writable($path))
printf('"%s" is writable', $path);
如果您正在检查的路径 /html/cms/content
,那对我来说似乎很奇怪(我期待/var/www/base_dir/html/cms/content
或其他),那么一定要得到realpath
(即:没有符号链接和所有这些)。所以请始终致电realpath
(正如我在上面的代码段中所做的那样)。
除此之外:您有一个apache
用户,这很好,但您确定该用户正在执行该脚本吗? www-data
和nobody
也很常见。检查用户实际运行的代码,并确保用户也拥有相应的权限。