权限设置为777,文件仍然无法写入

时间:2009-08-11 12:51:56

标签: php apache mod-rewrite

我已将文件权限设置为777但我无法使用PHP写入该文件。

我可以在我的FTP客户端清楚地看到该文件具有0777权限,当我这样做时:

echo (true === is_writable('file.txt')) ? 'yes' : 'no';

我得到'不';

我也尝试过:

echo (true === chmod('file.txt', 0777)) ? 'yes' : 'no';

结果相同。

目录列表如下:

public_html
    public          0777
        css         0755
        js          0755
        file.txt    0777

我正在使用.htaccess文件将所有流量重定向到公共子文件夹。当然,我已将文件排除在重写之外(可以从我检查的浏览器访问):

RewriteRule  ^(file).*  - [L]

为什么?

4 个答案:

答案 0 :(得分:8)

我猜Apache的运行方式与拥有该文件的用户/组不同。在这种情况下,文件本身必须是0777

如果您计划使用PHP将文件添加到文件夹,则

public只需0777。即使文件夹本身不是0777,如果文件是,并且文件夹至少为5用户(read/execute),您应该能够写入该文件。 / p>

最后,您的文件树应如下所示:

public_html
    public
        file.txt  0777

当然,您无法使用PHP更改这些权限,但您可以通过FTP客户端进行更改。

如果它仍然无法正常工作,PHP可能正在安全模式下运行,或者您可能正在使用PHP Suhosin等扩展。您可能会获得更好的结果,将文件的所有者更改为运行该脚本的同一用户/组。

要获取正在执行的用户的用户/组ID,您可以使用以下命令:

<?php
echo getmyuid().':'.getmygid(); //ex:. 0:0
?>

然后,您可以使用chown(在终端中)更改文件的所有者:

> chown 0:0 file.txt

答案 1 :(得分:2)

在opencart中,我在安装vqmod并提供所有必要的权限后遇到了这个错误。

经过一番研究,找到了它。

“MODS CACHE PATH NOT WRITEABLE”实际上是指vqmod文件夹本身,而不是缓存文件夹。

sudo chmod -R 777 vqmod 
在你的根目录中

.....

答案 2 :(得分:1)

您必须在创建文件后立即chmod该文件。

function Doo_Chmod($path, $chmod = null)
{
    if (file_exists($path) === true)
    {
        if (is_null($chmod) === true)
        {
            $chmod = (is_file($path) === true) ? 644 : 755;

            if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
            {
                $chmod += 22;
            }
        }

        return chmod($path, octdec(intval($chmod)));
    }

    return false;
}

答案 3 :(得分:-1)

与上述问题没有严格关系,但我还是会把它放在这里供以后的访问者使用,因为我是在这里阅读标题的。 来自arch wiki

<块引用>

文件属性

除了控制用户和组读、写的文件模式位 和执行权限,几个文件系统支持文件属性 允许进一步定制允许的文件操作。这 部分介绍了其中一些属性以及如何使用它们。

警告:默认情况下,cp、rsync、 和其他类似的程序。 chattr 和 lsattr

对于 ext2 和 ext3 文件系统,e2fsprogs 包包含 列出和更改文件属性的程序 lsattr 和 chattr, 分别。尽管并非所有文件系统都支持某些文件,但 可用的属性是:

a: append only
c: compressed
d: no dump
e: extent format
i: immutable
j: data journalling
s: secure deletion
t: no tail-merging
u: undeletable
A: no atime updates
C: no copy on write
D: synchronous directory updates
S: synchronous updates
T: top of directory hierarchy

例如,如果要在某个文件上设置不可变位,请使用 以下命令:

# chattr +i /path/to/file

要删除文件的属性,只需将 + 更改为 -。

对于没有附加属性的文件,lsattr 如下所示:

$ lsattr /etc/hosts
-------------e- /etc/hosts