使用PHP将文件夹重命名为子文件夹

时间:2010-04-16 14:45:09

标签: php directory rename

我正在尝试通过重命名来移动文件夹。 test1和test2文件夹都已存在。

rename(
 "test1",
 "test2/xxx1/xxx2"
);

我得到的错误是:重命名(...):没有这样的文件或目录

我认为这是因为目录“xxx1”不存在。 我怎样才能移动test1目录?

4 个答案:

答案 0 :(得分:15)

您可能需要创建它要进入的目录,例如

$toName = "test2/xxx1/xxx2";

if (!is_dir(dirname($toName))) {
    mkdir(dirname($toName), 0777, true);
}

rename("test1", $toName);

mkdir()的第三个参数是'recursive',这意味着您可以通过一次调用创建嵌套目录。

答案 1 :(得分:2)

为什么不通过制作它们来确保所有父目录首先存在? mkdir - 使用递归参数。

答案 2 :(得分:1)

你的假设是正确的,这是因为" xxx1"在你的例子中不存在。

因此,在rename("oldname", "/some/long/nested/path/test2/xxx1/newname")之前,您必须创建目录树结构:/some/long/nested/path/test2/xxx1/newname文件(或目录)必须不存在 { {1}}函数调用。

要概括解决方案,请查看以下天真函数:

rename

我将此实施命名为#34;天真"因为在实际制作中你还应该考虑处理一些边缘情况:如果$ newname已经存在怎么办?如果function renameWithNestedMkdir($oldname , $newname) { $targetDir = dirname($newname); // Returns a parent directory's path (operates naively on the input string, and is not aware of the actual filesystem) // here $targetDir is "/some/long/nested/path/test2/xxx1" if (!file_exists($targetDir)) { mkdir($targetDir, 0777, true); // third parameter "true" allows the creation of nested directories } return rename($oldname , $newname); } // example call renameWithNestedMkdir("oldname", "/some/long/nested/path/test2/xxx1/newname"); // another example call renameWithNestedMkdir("test1", "test2/xxx1/xxx2"); 已经存在但它是一个文件(不是目录)怎么办?为什么我在mkdir时放入0777访问权限?如果mkdir失败怎么办?

答案 3 :(得分:0)

我认为test2 / xxx1需要存在,所以在移动之前你需要使用mkdir。