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

标签 php linux rename move

我有下一个奇怪的问题:

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

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

然后我尝试在 PHP rename() 函数的帮助下 move 这个文件夹。我尝试这样做:

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()

关于php - 无法重命名文件夹(PHP + Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26428553/

相关文章:

regex - 根据 Linux 中文件的数量重命名目录

php - 如何使 "foreach"按字母顺序列出项目

linux - 从批处理 Linux 到 Windows 的 awk 和 sed 命令。如何转换?

php-fpm 子进程在信号 11 上退出

windows - 递归地批量重命名文件扩展名(windows批处理)

linux - 如何使用 -exec 查找和重命名所有文件

Javascript php,自动完成 Bootstrap

PHP 没有显示任何值,但肯定会传递值

javascript - 通过 AJAX 将数组传递给 Google Charts API

php - 错误导入 CSV 文件 Crontab