2010-10-03 2 views
0

у меня есть этот скрипт, который я буду размещать абсолютно неизмененной:php rename ведет себя странно?

<? 
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"), который вы могли бы проверить, вставив полный путь до файла $ и $ K при вызове переименовать. Я не думаю, что это очень вероятно.

+0

жаль я так дамп, как может я не видел этого! ну было уже поздно, спасибо! –

1

Вы запускали его дважды?

При первом запуске он переименовывает все изображения в 0001.jpg - 00nn.jpg. Во второй раз он начинает перезаписывать материал, потому что имена источников и имена целей будут перекрываться, например. он переименовывает 0042.jpg в 0001.jpg, поэтому существующий 0001.jpg исчезает.

Было бы хорошо, чтобы проверить, если $ K существует до переименования $ файла $ к:

if(!is_file($k)) { 
    rename($file, $k); 
} 
Смежные вопросы