PHP重命名顺序删除某些文件

时间:2014-07-11 13:22:24

标签: php rename sequential

我正在尝试让PHP按顺序重命名目录中的文件列表(1.jpg,2.jpg等)。每次大约20个文件。通常会丢失一个数字(如13.jpg,因此所有内容都需要重新编号。)这就是我需要的脚本。以下是我的工作,除了每次删除图像2-9.jpg。因此,如果文件夹中有19个文件,我运行脚本,然后有1.jpg和10-18.jpg。真的很奇怪?这可以解决吗?是否可能与覆盖相同的文件名有关?虽然在10.jpg之后它很好用但很奇怪......

$i=1;
foreach (array_filter(glob("../images/gallery/10/*") ,"is_file") as $f){
  rename($f, "../images/gallery/10/".$i.".jpg");
  $i++;
}

谢谢!

3 个答案:

答案 0 :(得分:0)

尝试设置循环的数组OUTSIDE和SORT IT,因此它将按照不会留下任何空白的顺序对其进行解析:

$i=0;
$array = array_filter(glob("../images/gallery/10/*") ,"is_file")
sort($array); // See which type of sort is needed here
foreach ($array as $f){
    rename($f, "../images/gallery/10/". ++$i .".jpg");
}

无论如何,避免在循环语句中使用函数,因为它将被重新评估。

答案 1 :(得分:0)

$i=1;
foreach (array_filter(glob("../images/gallery/10/*") ,"is_file") as $f){
  if (!file_exists("../images/gallery/10/".$i.".jpg)){
     rename($f, "../images/gallery/10/".$i.".jpg");
  }
  $i++;
}

答案 2 :(得分:0)

感谢您的所有答案!我能够解决它 - 问题与排序有关。我发现PHP看到列表排序错误的方式,如1.jpg,10.jpg,11.jpg等。以下代码修复了它 - 它现在很好用:

<?php
function getFiles(){
    $files=array();
    if($dir=opendir("../images/gallery/10/")){
        while($file=readdir($dir)){
            if($file!='.' && $file!='..' && $file!=basename(__FILE__)){
                $files[]=$file;
            }   
        }
        closedir($dir);
    }
    natsort($files); //sort
    return $files;
}
    $i=1;
     foreach(getFiles() as $f){
         rename("../images/gallery/10/".$f, "../images/gallery/10/".$i.".jpg");
  $i++;
  }
    ?>