У меня есть эта функция, которая проверяет имя файла. Если он существует, то он увеличивает его на единицу после этого скороговоркой:PHP инкрементные имена файлов
image.jpg
image1.jpg
image2.jpg
Проблема приходит на 4-изображения, он возвращается с 0.jpg
.
Вот соответствующий код:
...
$filetarget = $this->make_image_filename($directory, $new_filename, $extension);
if(!move_uploaded_file($file['tmp_name'], $filetarget)){
$error[$index] = 'copy';
}
...
private function make_image_filename($directory, $name = '', $extension){
if(empty($name)) $name = 'NULL';
$filetarget = $directory.$name.$extension;
if(file_exists($filetarget)){
$name = $this->increment_filename($name);
return $this->make_image_filename($directory, $name, $extension);
} else {
return $filetarget;
}
}
private function increment_filename($name){
$index = $this->get_filename_index($name);
if(is_numeric($index)){
$pos = strpos($name, $index);
$name = substr($name, 0, $pos);
}
if(is_null($index)){
$index = 0;
}
++$index;
return $name.$index;
}
private function get_filename_index($name){
// CHECK FOR INDEX
$i = 1;
$index = substr($name, -$i);
$last_chars = substr($name, -$i);
while(is_numeric($last_chars)){
++$i;
$last_chars = substr($name, -$i);
if(is_numeric($last_chars)){
$index = $last_chars;
}
}
if(is_numeric($index)){
return $index;
} else {
return NULL;
}
}
Я нахожусь в процессе выделения теперь этот код на моем локальном сервере запустить несколько тестов. Можете ли вы увидеть что-то по своей сути ошибочное в этом процессе?
Покажешь код, где вы вызываете 'make_image_filename()' Я не вижу никаких проблем, и, пытаясь выполнять свои функции, у меня нет никаких проблем с увеличением. Поэтому, возможно, проблема заключается в том, что параметры отправляются на 'make_image_filename()' в течение 4-х раз. – Kokers
Выглядит хорошо для меня, было бы полезно увидеть, где вызывается 'make_image_filename()'. Однако, похоже, что 'increment_filename()' может нести ответственность за возврат '0', если' $ name' - пустая строка ('.0 ==' 0 '). – Josh