PHP chmod( ):操作不允许,涉及safe_mode废弃?

19

目前我正在学习一个有点过时的课程,它涉及到了 chmod() 函数的概念,而我对此有些困惑。这个函数在 PHP 中的使用需要注意一些限制,比如 safe_mode 模式。但是通过关闭 safe_mode 模式,当执行该命令的用户与文件拥有者不同时,就可以去修改文件权限了。我使用的是 PHP 5.5.9 版本,并在 XAMPP 中进行调试,已经确认安全模式未开启(以防万一),但似乎还是无法正常工作。以下是我的 PHP 脚本:

echo "File permissions :" .  decoct(fileperms("file_permissions.php"));
chmod("file_permissions.php" ,0777);

我收到以下输出:

Warning: chmod(): Operation not permitted

我的文件权限如下:

-rwxrwxrwx@  1 joelhernandez  staff     24 Apr 14 06:59 file_permissions.php

我执行了ps aux | grep httpd来确认我的Web服务器正在使用用户"daemon"运行。

当我将文件所有权更改为daemon时:

-rwxrwxrwx@  1 daemon  staff     24 Apr 14 06:59 file_permissions.php

一切都在正常工作,我不明白为什么会这样,因为我以为在关闭安全模式后,文件所有权就无关紧要了,反而文件权限是处理访问的方法。

1个回答

29

daemon 用户不是 root,因此不允许更改归属于其他用户的文件的模式。在这里,PHP 安全模式并非原因。该警告提示您尝试操作失败是因为 Web 服务器用户没有权限进行模式更改。

当您手动将文件所有权更改为 daemon 时,操作成功,因为用户被允许更改他们拥有的文件的模式。


好的,那么我应该采取什么方法呢?如果关闭safe_mode,是否允许更改用户不拥有的文件权限?此外,我相信我读到过chmod()不需要超级用户权限,只需要chown()。 - Joel Hernandez
5
chmod 命令并不总是需要 root 权限 - 拥有文件的用户可以更改文件的权限模式, joelhernandez 可以更改属于他的文件的权限模式,daemon 可以更改属于 daemon 的文件的权限模式。普通用户(除了 root)不能更改他们没有拥有的文件的权限模式 - daemon 无法更改属于 joelhernandez 的文件的权限模式。 - nobody
关于你应该做什么,如果不了解你想要实现什么,很难给出建议。 - nobody
我点赞的评论解决了我的疑惑!谢谢,我猜教程没有很明确地说明这一点! - Joel Hernandez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接