2014-07-11 63 views
0

我試圖讓PHP重新命名一個目錄中的文件列表(1.jpg,2.jpg等)。每次大約20個文件。通常缺少一個數字(比如13.jpg,所以需要重新編號)。這就是我需要的腳本。下面是我有哪些作品,除了每次圖像2-9.jpg被刪除。所以如果文件夾中有19個文件,我運行腳本,然後是1.jpg和10-18.jpg。真奇怪?這是可以修復的嗎?這可能與覆蓋相同的文件名有關嗎?這很奇怪,雖然後10.jpg它工作正常...PHP重命名按順序刪除某些文件

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

謝謝!

+0

這是因爲在那裏的循環將會有一個已經被用作文件名的偏移量,因此它將替換文件。 –

回答

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++; 
    } 
    ?> 
0

嘗試設置陣列外循環,和排序,所以它會在一個令不會留下任何空白解析它:

$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"); 
} 

不管怎麼說,避免循環語句中使用的功能,因爲它將被重新評估爲無。

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++; 
}