ZetCode

PHP rename 函数

最后修改于 2025 年 4 月 3 日

PHP 的 rename 函数用于重命名文件或目录。如果路径在同一文件系统上,它还可以将文件在目录之间移动。

基本定义

rename 函数更改文件/目录的名称或位置。成功时返回 true,失败时返回 false。

语法:rename(string $oldname, string $newname, resource $context = null): bool。两个参数都必须是表示有效路径的字符串。

基本文件重命名示例

这展示了 rename 最简单的文件重命名用法。

basic_rename.php
<?php

declare(strict_types=1);

$oldname = 'oldfile.txt';
$newname = 'newfile.txt';

if (rename($oldname, $newname)) {
    echo "File renamed successfully";
} else {
    echo "Error renaming file";
}

这会将同一目录下的 'oldfile.txt' 重命名为 'newfile.txt'。成功时函数返回 true。始终检查返回值以处理错误。

在目录之间移动文件

rename 可以在同一文件系统上的目录之间移动文件。

move_file.php
<?php

declare(strict_types=1);

$source = 'documents/report.txt';
$destination = 'archives/report_2023.txt';

if (rename($source, $destination)) {
    echo "File moved and renamed successfully";
} else {
    echo "Error moving file";
}

这会将 report.txt 从 documents 移动到 archives,同时重命名它。两个操作都是原子性的。目录必须事先存在。

目录重命名示例

rename 与目录的处理方式与文件相同。

rename_dir.php
<?php

declare(strict_types=1);

$olddir = 'temp';
$newdir = 'temporary_files';

if (rename($olddir, $newdir)) {
    echo "Directory renamed successfully";
} else {
    echo "Error renaming directory";
}

这会将 'temp' 目录重命名为 'temporary_files'。如果目标目录已存在或权限不足,操作将失败。

错误处理示例

在进行文件系统操作时,正确的错误处理至关重要。

error_handling.php
<?php

declare(strict_types=1);

$old = 'nonexistent.txt';
$new = 'newfile.txt';

if (!file_exists($old)) {
    die("Source file doesn't exist");
}

if (file_exists($new)) {
    die("Target file already exists");
}

if (!rename($old, $new)) {
    die("Error: " . error_get_last()['message']);
}

echo "File renamed successfully";

这会在尝试重命名之前检查常见的错误情况。如果操作失败,它还会提供详细的错误消息。

跨设备重命名示例

在跨文件系统移动时,rename 可能会失败,需要使用 copy。

cross_device.php
<?php

declare(strict_types=1);

function moveFile(string $source, string $dest): bool {
    if (rename($source, $dest)) {
        return true;
    }
    
    if (!copy($source, $dest)) {
        return false;
    }
    
    unlink($source);
    return true;
}

$result = moveFile('/mnt/volume1/file.txt', '/mnt/volume2/file.txt');
echo $result ? "Success" : "Failed";

这会首先尝试直接重命名,然后回退到 copy+delete。该函数会处理源和目标位于不同设备的情况。

最佳实践

来源

PHP rename 文档

本教程介绍了 PHP 的 rename 函数,并通过实际示例展示了文件和目录的重命名和移动操作。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 文件系统函数