php chmod为成功返回true,但实际上并没有更改权限

时间:2013-08-28 15:27:50

标签: php permissions chmod

也许我不理解php的chmod()函数应该如何工作,但我遇到它返回TRUE(表示成功)但实际上没有修改权限。

我正在使用已上传到我的Web服务器的tmp目录的文件。

    $fn = $value["tmp_name"];
    $fps = fileperms($fn);

    $testMsg .= "file permissions are $fps\n";        
    $testMsg .= "(which is " .  substr(sprintf('%o', $fps), -4) . ")\n";

    $arr = posix_getpwuid(fileowner($fn));
    $testMsg .= "file owner is " . $arr["name"] . "\n";

    $testMsg .= "running as: " . trim(shell_exec('whoami')) . "\n";


    //can i chmod it?
    $didChmod = chmod($fn, 0644);
    $testMsg .= "chmod: $didChmod\n";
    $fps = fileperms($fn);
    $testMsg .= "NEW file permissions are $fps\n";        
    $testMsg .= "(which is " .  substr(sprintf('%o', $fps), -4) . ")\n";

以上的输出是:

file permissions are 33152
(which is 0600)
file owner is www-data
running as: www-data
chmod: 1
NEW file permissions are 33152
(which is 0600)

如您所见,chmod()报告成功但未更改权限。

由于

1 个答案:

答案 0 :(得分:0)

来自手册

  

当前用户是运行PHP的用户。可能不是   您用于普通shell或FTP访问的同一用户。模式可以是   只有在大多数系统上拥有该文件的用户才能更改。

如果此脚本由Web服务器运行(即通过浏览器访问),则此PHP脚本将作为错误用户运行。只有文件(或root)的所有者可以使用chmod,webserver可能以www-data或其他形式运行,因此没有chmod权限。