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)1 つの解決策: 名前を変更する前に、配列を並べ替えます。

于 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 に答える