2

我们公司使用的是 linux 专用服务器。

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

但我不知道我应该更改哪个设置来解决这个问题。

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

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

提前致谢

4

3 回答 3

3

您是否尝试过使用chown PHP 命令chmod PHP 命令

于 2012-07-04T07:36:05.097 回答
2

两种方法可以做到这一点:

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

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

CHMOD 是您想要查看的内容。777将使任何人和所有东西都可以访问您的文件,您可以将其用作测试以确保您具有文件权限。我不建议保留权限777

于 2012-07-04T07:39:08.823 回答
1

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

您可以在创建文件后立即尝试使用该chown函数,但这只有在您知道实际所有者应该是谁的情况下才有效(并非总是如此)。为了克服这个问题,我编写了一个简单的方法,试图找到最好的文件模式,该模式始终确保读取和写入(以及目录的执行),而不会给予过多的权限:

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文件。请记住,这仅适用于已经存在的文件,因此如果您要创建目录,则需要采取额外的预防措施

于 2012-07-04T08:07:06.923 回答