PHP Dateien in einem Verzeichnis umbennenen.

e_Lap

Commander
Registriert
Apr. 2013
Beiträge
2.172
Moin,
ich versuche gerade Dateien in einem Verzeichnis umzubennenen und zwar mit Werten die ich vorher in einem Array festgelegt habe. Bei rename() steh ich aber grad komplett aufm Schlauch.
Mein Script liest die Dateinamen ein, passt sie entsprechend an, speichert die neuen Werte in einem Array und gibt dies dann als echo und .txt aus.
Nur möchte ich aber, dass das Script die Dateien auch gleich noch umbennent und zwar so wie ich sie vorher geändert habe.
Ich hoffe, dass ist einigermaßen verständlich.

PHP:
$verz = opendir ("/xxx"); //Hier das entsprechende Verzeichnis einfügen
$datei1 = readdir ($verz);

$array_1 = array ("_", ".jpg","____"); //Vorläufige "Fehlererkennung"
$array_2 = array ("__", "","__" );
$array_verz = array();

while ($datei1 = readdir ($verz)) {
	
	$datei_neu= str_replace ($array_1, $array_2, $datei1);
	$array_verz[] = $datei_neu; //schreibt die gekürzten Dateinamen ins Array
	}

Mein Ansatz des rename(): 1. Versuch
PHP:
$dirname='/xxx'; 
rename($dirname, $datei_neu);


Mein Ansatz des rename(): 2. Versuch
PHP:
$dirname=('/xxx');
$handle=opendir ($dirname);

while ( $file = readdir ( $handle ) ) {
if( $file == "." or $file == "..") {
    }else{
    $alt=$dirname.$file;
    $neu=$dirname.$ausgabe;
    rename($alt,$neu);   
   }   
}

Richtig lustig wirds noch, da ich das "neue" array von oben noch per array_diff mit einem 2. array vergleiche und dann im Endeffekt gerne nur die hier ausgeworfenen Datein umbennenen würde. Aber darum kümmere ich mich später. Es wäre schön, wenn die einfache Umbennenung schonmal irgendwie funktionieren würde.
 
Zuletzt bearbeitet:
Du willst ja die Datei umbenennen, und nicht das Verzeichnis... aber das kann die rename-Funktion nicht wissen, wenn du es ihr nicht sagst...
 
Ich weiß nicht wie ich das schreiben muss. Hast du vllt nen Tipp für mich?
 
Der 2. Versuch geht ja in die richtige Richtung... aber dann bekommen ja alle Dateien den gleichen Zielnamen...
 
Ich habe bereits $datei_neu und $array_verz probiert. Beides ohne Erfolg. Ich müsste ja irgendwie das array wieder durchlaufen...

PHP:
function neuername(){
	foreach ($array_verz as $ausgabe2){
	return $ausgabe2;
	}
}

als $neu klappt leider auch nicht, da ich alle alle namen aufeinmal zurück bekomme.
 
Zuletzt bearbeitet:
Linux oder Windows?
Und das PHP sogar mit eigenen Befehlen Dateioperationen ünterstützt, nicht schlecht.

Bei Linux habe ich so etwas in der Vergangenheit so gelöst:
http://anb-networkz.de/2011/08/php-shell-scripte-mit-root-rechten-ausfuhren-sudo/

Natürlich nur mit einem eingeschränkten Nutzeraccount, sprich die PHP Datei hat ein Shellscript gefüttert welches dann die vorgegebenen Befehle auf der Console umgesetzt hat. Hier sollte man allerdings ein besonderes Auge auf das Thema Sicherheit legen.
 
linux devsrv vm unter win7

Den Rest habe ich nicht verstanden ;-)
 
Wozu brauchst du überhaupt das Array? oO

Warum nicht so?
PHP:
function getUnifiedName($filename)
{
  $array_1 = array ("_", ".jpg","____");
  $array_2 = array ("__", "","__" );
  return str_replace ($array_1, $array_2, $filename)
}

$root = "/xxx"; //Hier das entsprechende Verzeichnis einfügen
$dirhandle = opendir($root); 
while ($name = readdir($dirhandle)) {
  $complete_name = $root."/".$name;
  if (is_dir($complete_name)) {
    continue; 
  }

  $new_name = $root."/".getUnifiedName($name);
  rename($complete_name, $new_name);
}
close_dir($dirhandle);

Ansonsten wenn du ein Array brauchst, dann nimm ein assoziatives Array (Map). Dort kannst du jedem Dateinamen den Zielnamen zuordnen:
PHP:
$array_verz[$datei1] = $datei_neu;

...
foreach ($array_verz as $old_name => $new_name) {
...
}
...

@Suxxess: Was willst du mit deinem Post eigentlich erreichen?
Gibt es noch andere umständlichere Varianten, die man unbedingt kennen muss?
 
Ich muss dir danken. Der Code hat so 1 zu 1 funktioniert. Jetzt bastel ich das noch in vor mein array diff und lass ihn vllt noch überflüssige Datein löschen und ich bin fertig! Danke!
 
Zurück
Oben