用php创建的文件夹由apache拥有

时间:2012-07-04 07:33:41

标签: php apache chown

我们在公司使用Linux专用服务器。

每当我们使用php脚本创建一个文件夹时,apache都拥有该文件夹,每次我必须通过root连接到服务器才能将所有者更改为用户和权限

但我不知道为了解决这个问题我应该改变哪种设置。

我试图打开/关闭安全模式,但它不起作用。

如果有人能帮助我,我会很高兴

提前致谢

3 个答案:

答案 0 :(得分:3)

您是否尝试过使用chown PHP commandchmod PHP command

答案 1 :(得分:2)

2 方法:

chown()您可以通过执行该功能来更改文件权限。

或者如果您能够使用FTP移动文件,则可以将文件拖到文档根目录(public_html/)之外,然后右键单击 - >更改文件的文件权限。

CHMOD是你想要看的东西。 777将为您的文件提供任何访问权限,您可以将其用作测试以确保您拥有文件权限。我建议不要在777上保留权限。

答案 2 :(得分:1)

这是一个可移植性问题,取决于您的服务器配置(即mod_php或带SuExec的FCGI)。

您可以在创建文件后立即尝试使用chown功能,但这只有在您知道实际所有者应该是谁时才会起作用(情况并非总是如此)。要解决此问题,I wrote a simple method试图找到最佳的文件模式,始终确保读取和写入(以及目录的执行),而不会给予过多的权限:

function xChmod($path, $chmod = null) // adapted from phunction
{
    if (file_exists($path) === true)
    {
        if (is_null($chmod) === true)
        {
            $chmod = (is_dir($path) === true) ? 777 : 666;

            if (extension_loaded('posix') === true)
            {
                $user = posix_getpwuid(posix_getuid());

                if (array_key_exists('name', $user) === true)
                {
                    $chmod -= (in_array($user['name'], explode('|', 'apache|httpd|nobody|system|webdaemon|www|www-data')) === true) ? 0 : 22;
                }

            }
        }

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

    return false;
}

基本上,如果省略第二个$chmod参数,默认情况下它将使用0777作为文件夹而0666作为文件,但是,如果PHP是在非标准下运行的话用户,它会将模式减少22,对文件夹产生0755,为文件产生0644。请记住,这只适用于已存在的文件,因此如果您要创建目录you'll need to have additional precautions