无法重命名文件夹(PHP + Linux)

时间:2014-10-17 15:36:46

标签: php linux rename move

我有下一个奇怪的问题:

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

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

然后我尝试在PHP rename()func的帮助下移动此文件夹。我试着这样做:

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

但它给我带来了奇怪的警告:

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

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

1 个答案:

答案 0 :(得分:0)

您的/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()来调用它。