也许我不理解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()报告成功但未更改权限。
由于
答案 0 :(得分:0)
来自手册
当前用户是运行PHP的用户。可能不是 您用于普通shell或FTP访问的同一用户。模式可以是 只有在大多数系统上拥有该文件的用户才能更改。
如果此脚本由Web服务器运行(即通过浏览器访问),则此PHP脚本将作为错误用户运行。只有文件(或root)的所有者可以使用chmod,webserver可能以www-data或其他形式运行,因此没有chmod权限。