2010-10-03 36 views
0

我有這個劇本,我將張貼絕對不變:在它PHP重命名行爲怪異?

<? 
chdir("data"); 
$files = glob("*"); 
shuffle($files); 
var_dump($files); 
$i=0; 
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
foreach($files as $file) { 
    $i++; 
    $k = $i; 
    $mime = finfo_file($finfo, $file); 
    if(strpos($mime,"gif") !== false) { 
    $ext = "gif"; 
    } else { 
    $ext = "jpg"; 
    } 
    if($k < 10) { 
    $k = "00".$k; 
    } else if($k < 100) { 
    $k = "0".$k; 
    } 
    $k = $k.".".$ext; 
    rename($file,$k); 
    echo $k."\n"; 
} 

該文件夾的數據有一定的圖像文件(JPG和GIF)。 但是當我運行它時,突然很多圖像都消失了! 2/3的圖像剛剛被刪除... 我不明白? 我有一個ext3文件系統和PHP 5.3.2

回答

1

我看不到在代碼中肯定會導致此行爲的任何東西。我想到的最可能的原因可能是rename($file,$k);覆蓋已存在的文件。您可以添加以下排除了這一點:

if(file_exists($k.".".$ext)) { 
    $k .= ".0" ; 
} 
while(file_exists($k.".".$ext)) { 
    $k .= "0" ; 
} 
$k = $k.".".$ext; 
rename($file,$k); 

其他想法我是,也許事情錯了與chdir("data"),您可以通過插入$文件前的完整路徑查詢和$ķ調用時改名。但我認爲這不太可能。

+0

對不起我這麼轉儲我怎麼沒見過的!那已經很晚了,D謝謝! – 2010-10-04 10:36:59

1

你跑了兩次嗎?

第一次運行時,它將所有圖像重命名爲0001.jpg - 00nn.jpg。第二次開始覆蓋東西時,因爲源名稱和目標名稱會重疊,例如它將0042.jpg重命名爲0001.jpg,因此現有的0001.jpg消失。

將是一件好事,以檢查是否$ķ存在重命名$文件$ķ前:

if(!is_file($k)) { 
    rename($file, $k); 
}