想PHP的重命名将是我最好的选择.我没有看到很多关于如何在其中使用相对URL的示例,所以我有点妥协.无论哪种方式,这给了我许可否认:
我想做这个:
$file = "../data.csv";
rename("$file", "../history/newname.csv");
其中../当然会返回运行脚本的目录.我想不出办法……所以我这样做了:
$file = "data.csv";
$path = dirname(realpath("../".$file));
rename("$path/$file", "$path/history/newname.csv");
但是我被拒绝了许可(是的,历史文件夹由www-data拥有,是的,data.csv由www-data拥有).我觉得这很奇怪所以我尝试了一个简单的测试:
rename( 'tempfile.txt', 'tempfile2.txt' );
我确保www-data完全控制tempfile.txt …仍然被拒绝权限.为什么?你重命名它的文件必须存在吗?你不能像linux的mv一样重命名吗?所以我只是复制()和取消链接()?
最佳答案:
为了将文件从“../”移动到“../history/”,进程需要对“../”和“../history/”的写入权限.
在您的示例中,您显然缺少对“../”的写入权限.顺便说一下,正在移动的文件的权限是不相关的.
标签:php,copy,permissions,rename
来源: https://codeday.me/bug/20190515/1110688.html