Rename: примеры (PHP)

Примеры применения функции rename для работы с файлами в PHP
Раздел: Работа с файловой системой
rename(string $from, string $to, ?resource $context = null): bool
Функция rename в PHP

Функция rename() в языке PHP предназначена для переименования файла или перемещения файла между директориями. Её использование актуально при работе с файловой системой, когда требуется изменить имя файла или его расположение. Функция возвращает булево значение: true при успешном выполнении операции и false в случае возникновения ошибки.

Синтаксис функции выглядит следующим образом:

rename(string $oldname, string $newname, ?resource $context = null): bool

Параметр $oldname представляет текущий путь к файлу или директории. Параметр $newname задает новое имя или путь. Третий аргумент, $context, является опциональным и описывает контекст потока. Этот параметр используется редко, в основном для работы с обертками потоков.

Примеры использования rename
Простое переименование файла
<?
if (rename('старый_файл.txt', 'новый_файл.txt')) {
    echo "Файл переименован.";
} else {
    echo "Ошибка переименования.";
}
?>
Файл переименован.
Перемещение файла в другую папку
<?
$result = rename('документ.pdf', 'архив/документ.pdf');
var_dump($result);
?>
bool(true)
Переименование директории
<?
$success = rename('папка_старая', 'папка_новая');
echo $success ? 'Директория переименована' : 'Ошибка';
?>
Директория переименована
Похожие функции в PHP

В PHP существуют другие функции для работы с файлами. copy() создает копию файла, сохраняя оригинал. Её применяют, когда исходный файл должен оставаться неизменным. unlink() удаляет файл, что полезно, если требуется не переименовать, а убрать файл. move_uploaded_file() предназначена для безопасного перемещения загруженных через форму файлов. Её используют при обработке данных из суперглобального массива $_FILES.

Типичные ошибки при использовании rename
Отсутствие прав доступа
<?
// Файл защищен от записи
rename('защищенный_файл.txt', 'новое_имя.txt');
?>
Warning: rename(защищенный_файл.txt, новое_имя.txt): Permission denied
Попытка переименовать несуществующий файл
<?
if (!rename('несуществующий.txt', 'имя.txt')) {
    echo "Файл не найден.";
}
?>
Файл не найден.
Целевая директория не существует
<?
// Папка 'нет_такой' не создана
rename('файл.txt', 'нет_такой/файл.txt');
?>
Warning: rename(файл.txt, нет_такой/файл.txt): No such file or directory
Изменения в последних версиях PHP

В PHP 8.0 функция rename() не претерпела значительных изменений. Однако, в более ранних версиях, в PHP 7.0, была добавлена поддержка переименования между разными устройствами хранения данных. В PHP 8.1 явных изменений в поведении функции не отмечалось. Функция остается стабильной и обратно совместимой.

Расширенные примеры применения rename
Перемещение файла с проверкой существования целевой папки
Пример php
<?
$old = 'загрузки/фото.jpg';
$new = 'images/фото.jpg';

if (!is_dir('images')) {
    mkdir('images', 0755, true);
}

if (rename($old, $new)) {
    echo "Файл перемещен в images.";
}
?>
Файл перемещен в images.
Обработка ошибки через исключение
Пример php
<?
function safeRename($old, $new) {
    if (!rename($old, $new)) {
        throw new Exception("Не удалось переименовать файл $old в $new");
    }
}

try {
    safeRename('данные.txt', 'бэкап/данные.txt');
    echo "Успешно.";
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>
Успешно.
Пакетное переименование файлов в цикле
Пример php
<?
$files = ['doc1.txt', 'doc2.txt', 'doc3.txt'];
foreach ($files as $file) {
    $newName = 'архив_' . $file;
    if (file_exists($file)) {
        rename($file, $newName);
    }
}
echo "Файлы переименованы.";
?>
Файлы переименованы.
Использование контекста потока
Пример php
<?
$context = stream_context_create();
rename('файл.txt', 'новый.txt', $context);
echo "Использован контекст потока.";
?>
Использован контекст потока.
Аналоги функции в других языках

Rename в Python

В Python для переименования файлов используется функция os.rename() или метод replace() из модуля pathlib.

import os
os.rename('старый.txt', 'новый.txt')
JavaScript (Node.js)

В Node.js применяют асинхронный метод fs.rename() из модуля fs.

const fs = require('fs');
fs.rename('старый.txt', 'новый.txt', (err) => {
  if (err) throw err;
  console.log('Файл переименован');
});

Rename в MySQL

В MySQL существует оператор RENAME TABLE для переименования таблиц, что не является аналогом работы с файлами, а относится к структуре базы данных.

RENAME TABLE старая_таблица TO новая_таблица;

PHP rename function comments

En
Rename Renames a file or directory