WP_UNIQUE_FILENAME() │ WP 2.5.0
Функция WP_UNIQUE_FILENAME() позволяет получить уникальное и очищенное имя файла для указанного каталога. Если имя файла не уникально, к нему будет добавляться номер перед расширением, пока не будет найдено уникальное имя.
Как это работает
Функция может принимать дополнительный коллбек (callback), который позволяет использовать свой метод для создания уникальных имен файлов. Если коллбек определен, он должен принимать три аргумента: каталог, базовое имя файла и расширение. В результате коллбек должен вернуть уникальное имя файла.
Использование функции
wp_upload_bits();
Возвращаемое значение
Функция возвращает строку. Это новое имя файла, если переданное имя не было уникальным.
Синтаксис
wp_unique_filename( $dir, $filename, $unique_filename_callback );
$dir(строка) (обязательный) — Каталог.$filename(строка) (обязательный) — Имя файла.$unique_filename_callback(callable) — Коллбек для создания уникального имени.- По умолчанию:
null
- По умолчанию:
Примеры использования
Пример 1: Уникальное имя файла
Допустим, мы хотим сохранить файл file.jpg в каталоге /home/files, и файл с таким именем уже существует. Чтобы не перезаписывать существующий файл, функция wp_unique_filename создаст новое уникальное имя в реальном времени:
$file = 'file.jpg';
$file = wp_unique_filename('/home/files', $file);
echo $file; //> file1.jpg
Изменения
- С версии 2.5.0 — Функция была внедрена.
Код функции
Вот пример реализации функции wp_unique_filename:
function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) {
// Очищаем имя файла перед началом обработки.
$filename = sanitize_file_name( $filename );
$ext2 = null;
// Инициализируем переменные для фильтра wp_unique_filename.
$number = '';
$alt_filenames = array();
// Разделяем имя файла на основное имя и расширение.
$ext = pathinfo( $filename, PATHINFO_EXTENSION );
$name = pathinfo( $filename, PATHINFO_BASENAME );
if ( $ext ) {
$ext = '.' . $ext;
}
// Если имя файла - это только расширение, считаем имя пустым.
if ( $name === $ext ) {
$name = '';
}
// Увеличиваем номер файла, пока у нас не будет уникального имени для сохранения в $dir.
if ( $unique_filename_callback && is_callable( $unique_filename_callback ) ) {
$filename = call_user_func( $unique_filename_callback, $dir, $name, $ext );
} else {
$fname = pathinfo( $filename, PATHINFO_FILENAME );
// Всегда добавляем номер к именам файлов, которые могут совпадать с именами файлов изображений.
if ( $fname && preg_match( '/-(?:d+xd+|scaled|rotated)$/', $fname ) ) {
$number = 1;
$filename = str_replace("{$fname}{$ext}", "{$fname}-{$number}{$ext}", $filename);
}
// Проверяем, существует ли файл с таким именем в каталоге.
while ( file_exists( trailingslashit( $dir ) . $filename ) ) {
$number++;
$filename = str_replace(
array("-{$number}{$ext}", "{$number}{$ext}"),
"-{$number}{$ext}",
$filename
);
}
}
return apply_filters( 'wp_unique_filename', $filename, $ext, $dir, $unique_filename_callback, $alt_filenames, $number );
}
Другие функции
Функция имеет несколько связанных функций, которые могут быть полезными при работе с загрузкой файлов:
media_handle_sideload()media_handle_upload()media_sideload_image()wp_check_filetype()wp_get_upload_dir()wp_handle_upload()
Эти функции помогут вам лучше управлять загрузками и проверками файлов в WordPress.