簡體   English   中英

PHP用數字方式重命名目錄中的所有文件

[英]PHP numerically rename all files in directory

我有一個腳本來上傳文件並用數字命名(例如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++;
}

謝謝!

這是因為重命名時將覆蓋文件。

想象一下刪除文件11之后的以下文件列表:

1
10
12
2
3
4
5
...

如果現在開始重命名,則會發生以下情況:

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

一種解決方案:在重命名之前使用natsort($files)對數組進行排序。

來自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); 
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM