2016-09-27 5 views
0

Я хочу, чтобы скрипт перешел в папку «изображения», взял каждый файл, вырезал первые четыре символа и переименовал его.Переименование файлов на PHP?

PHP

<?php 
$path = './images/'; 

if ($handle = opendir($path)) 
{ 
    while (false !== ($fileName = readdir($handle))) 
    { 
     if($fileName!=".." && $fileName!=".") 
     { 
      $newName = substr($fileName, 4); 
      $fileName = $path . $fileName; 
      $newName = $path . $newName; 

      rename($fileName, $newName); 
     } 
    } 

    closedir($handle); 
} 
?> 

Это как файлы в папке изображений названы:

0,78test-1.jpg 
0,32test-2.jpg 
0,43test-3.jpg 
0,99test-4.jpg 

и это то, что я хочу, чтобы они выглядели как:

test-1.jpg 
test-2.jpg 
test-3.jpg 
test-4.jpg 

Проблема заключается в том, что скрипт вырезает первые 8, 12 или 16 символов, а не четыре, как я этого хочу! Поэтому, когда я выполнить это мои файлы выглядеть следующим образом:

-1.jpg 
-2.jpg 
-3.jpg 
-4.jpg 

UPDATE

Я также отслеживаются пакеты, чтобы убедиться, я не выполнение сценария несколько раз. Сценарий выполняется только один раз!

+0

'$ NEWNAME = зиЬзЬг ($ имя_файла, 4, STRLEN ($ Filename));'? – RamRaider

+0

Эй, спасибо за ответ, но он не работает. – user3877230

+1

ваш код работает для меня: -https: //eval.in/650573 –

ответ

1

несколько иной подход, хотя по существу то же самое с substr части это работало отлично подходит для испытаний на локальной системе.

$dir='c:/temp2/tmpimgs/'; 
$files=glob($dir . '*.*'); 
$files=preg_grep('@(\.jpg$|\.jpeg$|\.png$)@i', $files); 


foreach($files as $filename){ 
    try{ 

     $path=pathinfo($filename, PATHINFO_DIRNAME); 
     $name=pathinfo($filename, PATHINFO_BASENAME); 
     $newname=$path . DIRECTORY_SEPARATOR . substr($name, 4, strlen($name)); 

     if(strlen($filename) > 4) rename($filename, $newname); 

    } catch(Exception $e){ 
     echo $e->getTraceAsString(); 
    } 
} 
+0

Большое спасибо! Он отлично работает, хотя я все еще путаю, почему мой подход не сработал;) – user3877230

0

Возможно, вы захотите попробовать эту маленькую функцию. Это будет сделать только правильный переименовывать для вас:

<?php 

    $path = './images/'; 

    function renameFilesInDir($dir){ 
     $files = scandir($dir); 

     // LOOP THROUGH THE FILES AND RENAME THEM 
     // APPROPRIATELY... 
     foreach($files as $key=>$file){ 
      $fileName = $dir . DIRECTORY_SEPARATOR . $file; 
      if(is_file($fileName) && !preg_match("#^\.#", $file)){ 
       $newFileName = preg_replace("#\d{1,},\d{1,}#", "", $fileName); 
       rename($fileName, $newFileName); 
      } 
     } 
    } 

    renameFilesInDir($path); 
0
<?php 
$path = './images/'; 

if ($handle = opendir($path)) 
{ 
    while (false !== ($fileName = readdir($handle))) 
    { 
     if($fileName!=".." && $fileName!=".") 
     { 

//change below line and find first occurence of '-' and then replace everything before this with 'test' or any keyword 
      $newName = substr($fileName, 4); 

      $fileName = $path . $fileName; 
      $newName = $path . $newName; 

      rename($fileName, $newName); 
     } 
    } 

    closedir($handle); 
} 
?> 
Смежные вопросы