Но было бы действительно легче сделать это перед загрузкой файлов.
Не совсем уверен в этом - это кажется довольно простым;
/**
* @link http://stackoverflow.com/a/3261107/247223
*/
function so_3261107_hash_filename( $filename ) {
$info = pathinfo( $filename );
$ext = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
$name = basename( $filename, $ext );
return md5( $name ) . $ext;
}
add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );
Этот фильтрсоздает 32-х символьный хэш исходного имени файла, сохраняя расширение файла.Вы можете немного сократить его, используя substr()
, если хотите.
Этот фильтр запускается после загрузки файла во временный каталог на вашем сервере, но до его изменения (если применимо) и сохранения.в папку для выгрузки.
Обратите внимание, что нет риска перезаписи файла - в случае, если новый хэшированный файл совпадает с тем, который уже существует, WordPress будет пытаться добавить увеличивающуюся цифру к имени файла до тех пор, покабольше не является столкновением.
Плагин WordPress
<?php
/**
* Plugin Name: Hash Upload Filename
* Plugin URI: http://stackoverflow.com/questions/3259696
* Description: Rename uploaded files as the hash of their original.
* Version: 0.1
*/
/**
* Filter {@see sanitize_file_name()} and return an MD5 hash.
*
* @param string $filename
* @return string
*/
function so_3261107_hash_filename( $filename ) {
$info = pathinfo( $filename );
$ext = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
$name = basename( $filename, $ext );
return md5( $name ) . $ext;
}
add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );