0

我有一个脚本来上传文件并用数字命名它们(比如 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++;
}

谢谢!

4

2 回答 2

3

这是因为您在重命名时覆盖了文件。

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

1
10
12
2
3
4
5
...

如果您现在开始重命名,则会发生以下情况:

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

一种解决方案:在重命名之前使用对数组进行排序natsort($files)

于 2010-11-17T17:48:57.130 回答
2

来自 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); 
?>
于 2010-11-17T17:46:01.107 回答