可以';t重命名文件夹(PHP+Linux)


Can't rename folder (PHP + Linux)

我有下一个奇怪的问题:

我在PHP 的帮助下在Linux tmp文件夹中创建子文件夹

mkdir(sys_get_temp_dir().DIRECTORY_SEPARATOR.'subfolder');

然后我尝试在PHP重命名()函数的帮助下移动这个文件夹。我试着这样做:

rename('/tmp/subfolder', '/other/folder/name');

但它给我回了一个奇怪的警告:

警告:rename():copy()函数的第一个参数不能是目录

这与这些文件夹的访问权限有关吗?有什么想法吗?

您的/tmp/other在不同的文件系统上吗?如果您想将可能充满垃圾的临时文件存储与例如/var(可能充满日志!)分离,这将是一个很好的做法

如果是这样的话,那么PHP有一个核心错误,它阻止rename()在文件系统之间可靠地工作:

https://bugs.php.net/bug.php?id=54097

这里引用的解决方法是使用exec("mv "...),但可以更稳健地使用:

if (@rename($from, $to)) {
    return;
}
exec("mv " . escapeshellarg($from) . " " . escapeshellarg($to));

如果你把它封装在一个函数或方法中,那么你可以在需要的时候调用它来代替裸露的rename()