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

时间:2017-07-21 06:26:39

标签: php

我有以下照片:

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

我有以下请求(来自jQuery' s 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删除了部分照片。

1 个答案:

答案 0 :(得分:3)

你有照片ID 4,3,2,1你正在以相反的顺序重命名文件,所以:

  1. 如果您将4重命名为1,则1会被覆盖,4会消失
  2. 如果您重命名3到2,那么2会被覆盖,3会消失
  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);