2016-09-06 4 views
-3

У меня есть код для переименования файлов;Переименовать файл через php

<?php 
$directory= 'J:\xampp\htdocs\rename\abc'; 
$handler = opendir($directory); 
$index = 1; 
while ($file = readdir($handler)) { 
    if ($file != "." && $file != "..") { 
     rename($directory."/".$file, $directory."/".$index.".JPG"); 
     $index++; 
    } 

} 
closedir($handler); 
?> 

Вместо переименования файла, как 1,2,3,4, .... 22 переименовывает файлы в 1,10,11,12,13,14,15, .... ...

Любой ответ будет приветствоваться

+0

Ваш код выглядит правильно. Возможно, у вас есть конфликт имен с существующим файлом? –

+0

Переименование работает правильно, но они сортируются по имени, и вы видите 2, 3, 4 после 19 –

+0

Возможно, вы просто не сортируете каталог правильно, когда видите его. – RiggsFolly

ответ

0

Ваш код кажется правильным, как указано в комментарии может быть сортировочный проблема. Чтобы предотвратить это, я обычно "площадку" мой номер с ведущим нулем:

  • 01.jpg
  • 02.jpg
  • ...
  • 10.JPG

Я использую str_pad :

$index = str_pad($index, 2, '0', STR_PAD_LEFT); 

Ваш код будет выглядеть так:

$directory= 'J:\xampp\htdocs\rename\abc'; 
$handler = opendir($directory); 
$index = 1; 
while ($file = readdir($handler)) { 
    if ($file != "." && $file != "..") { 
     $index = str_pad($index, 2, '0', STR_PAD_LEFT); 
     rename($directory . "/" . $file, $directory . "/" . $index . ".JPG"); 
     $index++; 
    } 

} 
closedir($handler); 

У вас есть менее ста файлов, которые вы должны заполнить 1 ноль, менее тысячи пэдов с 2 нулями и так далее.

Надеюсь, что это поможет