سؤال

لديّ برنامج نصي لتحميل الملفات وتسميةها عدديًا (قل 1-15) وعندما أحذف ملفًا (على سبيل المثال رقم 5) أريد إعادة تسمية الملفات 1-14. يعمل هذا بشكل جيد إذا قمت بحذف ملف 9 وتحت ، إذا قمت بحذف أي شيء أكثر من 10 ، فإنه يمحو ملفات متعددة. بقدر ما أستطيع أن أقول أن المشكلة ليست مع الحذف ولكن إعادة تسمية

إليك قطعة النص التي أواجه مشكلة في:

unlink($path.$img);

$files = natsort(glob("$path/*.jpg"));

$num = 1;

foreach($files as $file) {
  $new = 'photo' . $num . '.jpg'; 
  rename($file, dirname($file).'/'.$new);
  $num++;
}

شكرًا!

هل كانت مفيدة؟

المحلول

مثال العمل من php.net

 <?php 
$path = "E:\\SERVER\\sudhir\\songs"; 
$dh = opendir($path); 
$i=1; 
while (($file = readdir($dh)) !== false) { 
    if($file != "." && $file != "..") { 
        echo "<br/>".substr($path."\\".$file, 0,-3)."_mysongs_mp3"; 
        rename($path."\\".$file, substr($path."\\".$file, 0,-3)."_mysongs_mp3"); 
        $i++; 
    } 
} 
closedir($dh); 
?>

نصائح أخرى

هذا لأنك ملفات في الكتابة فوقك أثناء إعادة تسميتك.

تخيل قائمة الملفات التالية بعد حذف الملف 11:

1
10
12
2
3
4
5
...

إذا بدأت الآن في إعادة تسمية ، يحدث ما يلي:

1 -> 1
10 -> 2
12 -> 3
2 -> already overwritten by 10!

حل واحد: فرز الصفيف الخاص بك باستخدام natsort($files) قبل إعادة تسمية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top