PHP - เปลี่ยนชื่อไฟล์ในไดเร็กทอรีหลังจากเรียงลำดับตามตัวอักษร

ฉันมีปัญหาแปลก ๆ นี้

ฉันมีไฟล์ชื่อ 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg

ตอนนี้ ฉันต้องการให้ผู้คนสามารถจัดเรียงพวกมันได้ ดังนั้นฉันคิดว่าถ้าคุณต้องการให้ 3 กลายเป็น 2 เป็นตัวอย่าง สิ่งที่คุณต้องทำก็แค่เปลี่ยนชื่อ 3.jpg ==> 1b.jpg นี่ทำให้เขาอยู่ระหว่าง 1 ถึง 2!

ตอนนี้เพียงเปลี่ยนชื่อไฟล์ทั้งหมดในโฟลเดอร์แล้ว voila! อย่างไรก็ตาม ดูเหมือนว่าจะใช้งานไม่ได้...

รหัสของฉันคือ:

// 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