【问题标题】:change directory permission (chmod) in php在php中更改目录权限(chmod)
【发布时间】:2011-11-11 08:05:54
【问题描述】:

我已经用谷歌搜索了,但我似乎无法让我的脚本正常工作。

这是我的代码

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 手册和他们在用户 cmets 中提供的一些示例,以及我发现相关的一些堆栈溢出帖子。但也许我需要调整一些 php 设置才能让它工作?

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

【问题讨论】:

  • php 用户是 tmp 目录的所有者还是该文件夹的组中?如果不是,它不能更改文件夹的 chmod。
  • 它的所有者和组的一部分
  • 嗯,那是windows机器吗?
  • @Sn0opy:他在对我的回答发表的评论中提到了 LAMP。

标签: php linux apache chmod


【解决方案1】:

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

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

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

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

【讨论】:

  • 啊,这表示 chmod 不允许操作。我可能需要查看脚本是否以所有者用户和权限运行。自从我自己设置了 LAMP 服务器后,我以为它们在哪里。有什么建议吗?我确实让 apache 以与我登录的用户相同的所有者身份运行。
  • 如果你在tmp上没有使用chmod的权限,但是你在服务器上有root终端访问权限,那么你可以使用ps aux | grep http查看Apache的处理详细信息并找到用户。一旦您知道运行 Apache 的用户,您就可以使用 sudo chown -R webProcessUser /path/to/tmp 获取 tmp 的目录所有权。如果不想更改目录所有者,并且您知道运行 Apache 的用户属于某个组,则可以更改组所有者:sudo chown -R currentOwner:newGroup /path/to/tmp
【解决方案2】:

像这样表示:-

chmod("tmp", 0777);

【讨论】:

  • 我也试过了,我发布的当前版本来自 php.net chmod 用户 cmets 的示例
【解决方案3】:

运行 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 权限,顺便说一句,这是不推荐的。

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 2013-01-19
    • 2011-08-04
    • 2013-06-19
    • 2011-12-01
    • 2015-06-15
    • 2016-01-16
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多