我很难从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
,以确认我的Web服务器在用户"守护进程"下运行
当我将文件所有权更改为守护程序时:
-rwxrwxrwx@ 1 daemon staff 24 Apr 14 06:59 file_permissions.php
一切都正常,我不明白为什么我已经明白,如果关闭了safe_mode,文件所有权将毫无意义,相反,文件权限是处理访问的方式。
daemon
用户不是root
,因此不允许更改其他用户拥有的文件的模式。PHP safe_mode不是原因。警告告诉您,由于web服务器用户没有更改模式的权限,尝试的操作失败。
手动将文件的所有权更改为daemon
后,操作成功,因为用户可以更改自己拥有的文件的模式。