ProfiPHPProfiPHP
Категория: Полезное в PHP

Проверка уникального имени файла на существования в PHP

При разработке проектов, где необходимо загружать файлы, программисты сталкиваются с проблемой контроля имен файлов.

Например, если рандомное имя создается так:
$image_name = md5( $filename.microtime( true ) );
В данном варианте в переменную $image_name будет загружен MD5-хэш строки в виде 32-символьной строки. Какие шансы, что случится ситуация генерации одинаковых имен? Очень маленькие, но все же...

В данном случае лучше не полагаться на удачу, а контролировать самостоятельно уникальность имен файлов. Лучше добавить несколько строк кода, чем перезаписать уже существующее изображения, что повлечет за собой весьма непредсказуемые результаты.

Опишу очень простое решения данной проблемы:
function getRandomFileName(  ) {
do {
$image_name = md5( microtime( true ).rand( 0,9999 ) );
} while ( file_exists( $_SERVER['DOCUMENT_ROOT'].'/'.$image_name.'.jpg' ) );
return $image_name;
}
$image_name = getRandomFileName( );
Данная функция всегда вернет имя файла, которого не существует.

Вам необходимо переделать данный код под себя, приведенный пример лишь демонстрирует один с вариантов решения проблемы уникальности файлов.

Если проект рассчитан на множество пользователей, желательно после проверки уникальности файла сразу его создавать и потом перезаписать:
$handle = @fopen( $image_name.'.jpg', 'x');
Конечно, даже без лишних проверок может никогда не случится записи двух одинаковых имен файлов, но все же, лучше данную возможность исключить.

Добавить комментарий

Имя:
Текст комментария: