2010-10-03 34 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); 
}