PHP - переименовать файлы в каталоге после их сортировки по алфавиту

У меня есть эта странная проблема.

У меня есть файлы с именами 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg.

Теперь я хочу, чтобы люди могли их сортировать, поэтому я подумал, что если вы хотите, например, чтобы 3 стало 2, все, что вам нужно сделать, это переименовать 3.jpg ==> 1b.jpg. Это ставит его между 1 и 2!

Теперь просто переименуйте все файлы в папке и вуаля! Однако это, похоже, не работает...

Мой код:

// Part 1

$fileUp = $_POST['imageURL'];
$url = $_SERVER['DOCUMENT_ROOT'].$fileUp;
$fileParts = pathinfo($fileUp);
$fileName = $fileParts['filename'];
$fileExt = $fileParts['extension'];
$fileFolder = $fileParts['dirname'];
$newName = $fileName - 2;
$newFullName = $newName . 'b.' . $fileExt;

$directory = $_SERVER['DOCUMENT_ROOT'].$fileFolder.'/';

rename($url, $directory.$newFullName);

// Part 2

$dirFiles = array();
if ($handle = opendir($directory)) {
    while (false !== ($file = readdir($handle))) {  
        if ($file != "." && $file != "..") {
            $dirFiles[] = $file;
        }
    }
    closedir($handle);
}

sort($dirFiles);
$i = 1;
foreach($dirFiles as $file)
{
    $fileParts = pathinfo($file);
    $fileExt = $fileParts['extension'];
    $newName = $i . '.' . $fileExt;
    rename($directory.$file, $directory.$newName);
    $i++;
}

Часть 1 по существу переименовывает файл, который нужно поднять. Это работает! Однако, если я затем перезагружу файлы с помощью readdir, это изображение окажется не там, где должно быть (часто в конце).

Итак, часть 2 посвящена переименованию всех файлов. Однако, когда я включаю часть 2, изображение перед изображением, которое нужно поднять, исчезает!

Так, например, если у меня есть "1.jpg, 2.jpg, 3.jpg", и я хочу увеличить 2.jpg, я получаю: "2.jpg, 3.jpg" (2 и 3 не имеют т изменили их имена, 1.jpg просто исчезли...)

Вся помощь очень ценится!


person AmarokM    schedule 07.06.2013    source источник


Ответы (1)


Я бы не рекомендовал этот способ сортировки изображений, он неэффективен и, насколько я понимаю, если люди будут продолжать сортировать, вы получите длинные и неуклюжие имена файлов. У вас есть доступ к базе данных? У вас может быть таблица, которая сопоставляет индексы с именами файлов, что позволяет вам сортировать, изменяя индексы записи таблицы.

person Kent Munthe Caspersen    schedule 07.06.2013
comment
Да, у меня есть доступ к базе данных, но это кажется более простым способом. Кстати, пользователям разрешено загружать только 10 изображений, так что в конце концов это не займет много времени... Но ладно, я понимаю. Файлы на самом деле загружаются пользователями, каждый из которых имеет свой собственный каталог. Любое предложение, как бороться с людьми, загружающими файлы с потенциально неправильными символами в именах файлов (скобки, пробелы...)? - person AmarokM; 07.06.2013
comment
Это может быть решением: $remove_these = array(' ','`','','\'','\\','/'); $newname = str_replace($remove_these, '', $_FILES['image']['name']); - person Kent Munthe Caspersen; 07.06.2013