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

时间:2014-04-14 20:57:29

标签: php apache file-permissions chmod

我正在努力从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后,文件所有权就没有任何意义,而是文件权限是处理访问的方式。

2 个答案:

答案 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);
}
?>