我有这个脚本,我将发布绝对未经修改:
<?
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
答案 0 :(得分: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")
可能会出现问题,您可以通过在$ file和$ k之前插入完整路径来检查重命名。我不认为这很可能。
答案 1 :(得分:1)
你有两次跑吗?
第一次运行它时,它会将所有图像重命名为0001.jpg - 00nn.jpg。第二次它开始覆盖东西,因为源名称和目标名称会重叠,例如它将0042.jpg重命名为0001.jpg,因此现有的0001.jpg消失了。
在将$ file重命名为$ k之前检查$ k是否存在会很好:
if(!is_file($k)) {
rename($file, $k);
}