Как преименовывать изображение при загрузке типа 00001?
$filename = 00001;
- подскажите, пожалуйста, как это сделать.
Источник: Stack Overflow на русском
$filename = 00001;
- подскажите, пожалуйста, как это сделать.
В таком виде: $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); // эту строку надо исправить!