PHP - Ganti nama file dalam direktori setelah mengurutkannya berdasarkan abjad

Saya punya masalah aneh ini.

Saya memiliki file saya bernama 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg.

Nah, saya ingin orang bisa mengurutkannya, jadi saya pikir, kalau mau 3 jadi 2 misalnya, tinggal rename 3.jpg ==> 1b.jpg. Ini menempatkannya di antara 1 dan 2!

Sekarang tinggal ganti nama semua file di folder tersebut, dan voila! Namun, hal ini tampaknya tidak berhasil...

Kode saya adalah:

// 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++;
}

Bagian 1 pada dasarnya mengganti nama file yang akan di-up. Ini bekerja! Namun, jika saya memuat ulang file menggunakan readdir, gambar ini tidak berada di tempat yang seharusnya (seringkali di akhir).

Jadi Bagian 2 adalah tentang mengganti nama semua file. Namun, saat saya mengaktifkan bagian 2, gambar sebelum gambar di atas menghilang!

Jadi misalnya, jika saya memiliki "1.jpg, 2.jpg, 3.jpg", dan saya ingin menambah 2.jpg, saya mendapatkan: "2.jpg, 3.jpg" (2 dan 3 belum' t mengubah nama mereka, 1.jpg menghilang begitu saja...)

Semua bantuan sangat dihargai!


person AmarokM    schedule 07.06.2013    source sumber


Jawaban (1)


Saya tidak akan merekomendasikan cara mengurutkan gambar seperti itu, ini tidak efisien dan seperti yang saya pahami, jika orang terus menyortir, Anda akan mendapatkan nama file yang panjang dan kikuk. Apakah Anda memiliki akses ke database? Anda dapat memiliki tabel di sana yang memetakan indeks ke nama file yang memungkinkan Anda mengurutkan dengan mengubah indeks entri tabel.

person Kent Munthe Caspersen    schedule 07.06.2013
comment
Ya, saya punya akses ke database, tapi sepertinya ini cara yang lebih mudah. Btw, pengguna hanya diperbolehkan mengupload 10 gambar, jadi tidak akan terlalu lama pada akhirnya... Tapi okelah, saya mengerti maksudnya. File-file tersebut sebenarnya diunggah oleh pengguna, masing-masing memiliki direktori sendiri. Adakah saran bagaimana menangani orang yang mengunggah file dengan karakter yang berpotensi salah dalam nama file (tanda kurung, spasi...)? - person AmarokM; 07.06.2013
comment
Ini bisa menjadi solusi: $remove_these = array(' ','`','','\'','\\','/'); $namabaru = str_replace($hapus_ini, '', $_FILES['gambar']['nama']); - person Kent Munthe Caspersen; 07.06.2013