我正在努力从PHP中掌握chmod()
的概念,因为我目前所采取的课程有点过时,涉及safe_mode。它指出,当safe_mode关闭时,删除了当所有者与执行命令的所有者不同时,使用chmod()
将权限修改为文件的限制。我正在使用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
确认我的网络服务器正在用户"守护程序" 。
我将文件所有权更改为守护程序:
-rwxrwxrwx@ 1 daemon staff 24 Apr 14 06:59 file_permissions.php
一切正常,我不明白为什么我已经理解,关闭safe_mode后,文件所有权就没有任何意义,而是文件权限是处理访问的方式。
答案 0 :(得分:22)
daemon
用户不是root
,因此不允许更改其他用户拥有的文件的模式。 PHP safe_mode不是这里的原因。警告告诉您尝试的操作失败,因为Web服务器用户没有权限进行模式更改。
手动将文件的所有权更改为daemon
后,操作成功,因为允许用户更改他们拥有的文件模式。
答案 1 :(得分:-3)
在chmod之前添加@
示例:
<?php
$filePath = 'Your file path';
if(!file_exists(dirname($filePath))) {
mkdir(dirname($filePath), 0775, true);
@chmod(dirname($filePath),0777);
}
?>