PHP 重命名删除了一些文件?



我有以下照片:

product-1.jpg
product-2.jpg
product-3.jpg
product-4.jpg

我有以下请求(来自jQuery的sortable(:

动作=保存&照片=照片[]=4&照片[]=2&照片

[]=3&照片[]=1

我试过这个:

<?php
if($_POST) {
if($_POST['action'] == 'save') {
parse_str($_POST['photos'], $photos);
$id_new = 1;
foreach($photos['photo'] as $id) {
rename(dirname(__FILE__) . '/product-' . $id . '.jpg', dirname(__FILE__) . '/product-' . $id_new . '.jpg');
$id_new++;
}
}
}
?>

rename删除了一些照片。

您的照片 ID 为 4、3、2、1,并且您以相反的顺序重命名文件,因此:

  1. 如果将 4 重命名为 1,则 1 将被覆盖,4 消失
  2. 如果将 3 重命名为 2,则 2 将被覆盖,3 消失

这就是为什么您保持使用较少的文件的原因。

正如@MVG1984评论中建议的那样,您可以将这些文件重命名到另一个文件夹中,例如:

$path = dirname(__FILE__);
$tmpPath = $path . '/tmp';
mkdir($tmpPath);
$id_new = 1;
foreach($photos['photo'] as $id) {
rename($path . '/product-' . $id . '.jpg', $tmpPath . '/product-' . $id_new . '.jpg');
$id_new++;
}
for ($i = 1; $i < $id_new; $i++) {
rename($tmpPath . '/product-' . $i . '.jpg', $path . '/product-' . $i . '.jpg');
}
rmdir($tmpPath);

最新更新