2017-11-14 4 views
1

Pfad umbenennen möchten i rekursiv alle Dateien und Ordner in speziellen Weg finden, und ich tue es mit diesem Codealle Dateien und Ordner in einem

public static function getDirContents($dir, &$results = array()){ 
    $files = scandir($dir); 

    foreach($files as $key => $value){ 
     $path = realpath($dir.DIRECTORY_SEPARATOR.$value); 
     if(!is_dir($path)) { 
      $results[] = $path; 
     } else if($value != "." && $value != "..") { 
      self::getDirContents($path, $results); 
      $results[] = $path; 
     } 
    } 

    return $results; 
} 

und i-Namen mit Leerzeichen ersetzt werden soll, Unders so lese ich es mit diesem Code

$files = FileHelper::getDirContents($path_from); 
       if (isset($files)) { 
        $replacers = array(" ", " ", "-", "!", ":", ";", "#", "@", "'"); 
        foreach ($files as $file) { 
         $newName = str_replace($replacers, "_", $file); 
         if ($newName != $file) { 
          Logger::setLog('renaming', "Renaming: $file to $newName"); 
          rename($file, $newName); 
         } 
        } 
       } 

aber das Problem occure, wenn ich übergeordnete Ordner umbenennen, damit das System untergeordnete Ordner und Dateien konnte nicht umbenannt werden, da die Pfade geändert oder verpassten so wie kann ich mein Problem zu lösen? Hier

+0

beginnt mit Dateinamen umbenennen und erst danach ihr übergeordnetes Verzeichnis. Von unten anfangen... :) –

Antwort

0

ist die Arbeitscode-Datei umbenennen und rekursiv Ordner,

<?php 
    renameFiles('C:\assets\images\\','doctor'); // target path is C:\assets\images\doctor 
    function renameFiles($base,$path){ 
     $replacers = array(" ", " ", "-", "!", ":", ";", "#", "@", "'"); 
     foreach (new DirectoryIterator($base.$path) as $object) { 
      if($object->isDot()) continue; 
      if(is_dir($base.$path.'\\'.$object->getFilename())){ 
      renameFiles($base,$path.'\\'.$object->getFilename()); 
      } 
      $oldName = $object->getFilename(); 
      $newName = str_replace($replacers, "_", $oldName); 
      $oldFullName = $object->getPath() . DIRECTORY_SEPARATOR . $oldName; 
      $newFullName = $object->getPath() . DIRECTORY_SEPARATOR . $newName; 
      rename($oldFullName, $newFullName); 
      echo "old : $oldName , new: $newName <br/>\n"; 
      //echo $object->getFilename() . "<br>\n"; 
     } 
    } 
?> 

ich der obige Beispiel Zielpfad ist C:\assets\images\doctor

Verwandte Themen