Как преименовывать изображение при загрузке типа 00001?

Рейтинг: 0Ответов: 1Опубликовано: 16.01.2015

$filename = 00001; - подскажите, пожалуйста, как это сделать.

Ответы

▲ 1

В таком виде: $filename = 00001; в переменную запишется число 1, а не строка с нулями. Поэтому, если на вход даётся именно число, а надо «добить» его нулями до нужной длины, можно так, используя форматированный вывод sprintf():

$n = 22;
$filename = sprintf( '%05d', $n); // добивает целое число до 5 позиций нулями

А потом move_uploaded_file():

move_uploaded_file( $tmpfilename, $filename);

В связи с комментарием, оказывается, другую задачу решали.

Надо получить сначала наибольший существующий "номер" файла в папке.

$dirName = '/path/to/files';
if (FALSE === ($handle = opendir( $dirName))) exit("Не открыть директорию");
$maxFile = 0;
while (FALSE !== ($entry = readdir($handle))) {
    if( !preg_match('/\d+\..+$/', $entry, $matches) continue; // нужно, чтобы имя попадало в паттерн  цифры-точка-ещёбуквы-конецстроки
    $maxFile = max( $maxFile, (int)$matches[1]);
}
closedir($handle);
// в $maxFile теперь записано макс. значение из папки

$filename = sprintf( '%05d', ++$maxFile);
// вам ещё нужно продумать, как приписать файлу правильное расширение, 
// иначе будут просто  00123
// при этом хорошо бы проверять содержимое файлов, а не доверять тому, что прислал пользователь
// напр. могут загрузить php файл, названный "trollface.jpg.php"
move_uploaded_file( $tmpfilename, $filename); // эту строку надо исправить!