在php中更改目录权限(chmod)

时间:2011-11-11 08:05:55

标签: php linux apache chmod

我用Google搜索,但似乎无法让我的脚本工作。

这是我的代码

if (is_dir("tmp")) {
    if (substr(sprintf("%o", fileperms("tmp")), -4) == "0777") {
        echo "good";
    } else {
        echo "going to chmod the tmp folder to 777";
        if (!chmod("tmp", octdec(0777))) { // tried chmod("tmp, 0777) too
                echo "Oops, I couldn't chmod the /setup/tmp directory, please do this manually";
        }
    }
} else {
    echo "we'll make the folder";
}

我似乎无法让chmod工作,我读到某个地方,如果注册全局变量关闭,那么这将无效(我将该设置设置为关闭)。

我按照PHP.net手册和他们在用户评论中提供的一些示例,以及我发现相关的一些堆栈溢出帖子。但也许我需要调整一些PHP设置才能使其正常工作?

有没有办法让chmod函数工作而无需更改PHP.ini?

3 个答案:

答案 0 :(得分:0)

代表这样: -

chmod("tmp", 0777);

答案 1 :(得分:0)

您尚未向我们提供足够的信息来确定chmod()失败的原因。可能是Web服务器没有足够的权限来更改目录权限。

Web服务器进程的所有者应拥有该目录或成为拥有组的成员。例如,如果root拥有 tmp ,并且您的Web服务器作为用户'apache'运行,则无法从PHP修改目录的权限。

我相信你在 php.ini 中提到的设置是用于调试,而不是神奇地“修复”chmod。尝试将以下代码行添加到PHP脚本中,您应该获得更有用的调试输出:

ini_set('display_errors', 'On');
error_reporting(E_ALL)

答案 2 :(得分:0)

运行php守护程序或Web服务器守护程序的用户必须具有对您尝试chmod的目录的写访问权。在我的例子中,www-data是运行php的用户以及php试图运行的任何命令,它将作为www-data用户运行。

如果使用php mkdir函数创建目录,您会注意到目录的所有者是谁正在运行php或webserver守护程序。而且,php,php创建的任何目录都可以通过chmod,chown,对它做任何事情,因为它是所有者。

你可以

  1. chown目录,以便所有者是php用户
  2. 为该组设置写入权限,并将该组设置为与php用户相同的组
  3. 做一些事情,比如给php用户提供sudo权限,不建议使用btw。