2017-07-16 3 views
-2

Ich habe Schwierigkeiten, alle Informationen zum Durchlaufen aller Unterordner innerhalb eines Ordners zu finden und sie mit PHP umzubenennen. Ich benenne sie so um, dass ich an die Anzahl der Unterordner keine Grenzen mehr erreiche.Schleife und benenne alle Unterordner in PHP um

Im Moment meiner Benutzerordnerstruktur ist wie folgt:

images/logos/1216/logo.jpg 
images/logos/11437/logo.jpg 
images/logos/234438/logo.jpg 

Also ich durch alle Ordner innerhalb des ‚Logos‘ Schleife will und benennen Sie sie wie folgt:

images/users/1/1216/logos/logo.jpg 
images/users/11/11437/logos/logo.jpg 
images/users/234/234438/logos/logo.jpg 

Zur Berechnung Der Name des neuen Unterordners, ich nehme die vorhandene Benutzer-ID (dh 11437 und dividiere durch 1000).

Das eigentliche Problem ist, wie, durchlaufe ich alle Unterordner und was ist der beste Weg, um die Ordnerstruktur umzubenennen.

+0

Dies ist nicht wirklich eine Frage der Umbenennung, da Sie eine komplett andere Struktur erstellen. Ich würde sagen, Sie sollten die Dateien kopieren und dann das Original entfernen. – Andreas

+0

Sind alle Dateien logo.jpg? – Andreas

+0

ja, alle Dateien heißen logo.jpg im Moment – Mark

Antwort

0

Wenn ich über die erste Zeile des Codes hier richtig bin, erhalten Sie ein Array, das wie die zweite Zeile aussieht. Testen Sie das zuerst und erstellen Sie eine Sicherungskopie Ihrer Dateien.

Dies sollte alle Benutzer-IDs oder Verzeichnisse auflisten und durchlaufen sie.
Wenn die Kopie erfolgreich ist (true), wird die alte Datei entfernt, andernfalls wird eine Fehlermeldung zurückgegeben.

Dies ist ungetestet Code

//$arr = array_filter(glob('images/logos/*'), 'is_dir'); 
$arr = array("images/logos/1216","images/logos/11437","images/logos/234438"); 
//var_dump($arr); 

foreach($arr as $dir){ 
    $UID = str_replace("images/logos/", "", $dir); 
    $newpath = "images/users/" . floor($UID/1000) . "/" . $UID . "/logos/logo.jpg"; 
    $oldpath = $dir . "/logo.jpg"; 
    if(copy($oldpath, $newpath)){ 
     unlink($oldpath); 
    }else{ 
     echo "error with file " . $oldpath . "<br>\n"; 
     $error = true; 
    } 
} 

if(!$error) unlink("images/logos"); 

EDIT; Ich habe gerade bemerkt, dass ich in letzter Zeit zu viel Excel verwendet habe. Die & wurde geändert.
EDIT2; habe jetzt den Code auf meiner eigenen Seite getestet und es scheint, dass der Glob den Pfad zurückgibt. Enthaltener Code, um die UserID zu erhalten.

+0

Danke für den obigen Code, das Problem, das ich habe, ist, dass es Tausende von Unterordnern in den Logos-Ordner, wollte ich eine Methode, alle Unterordner innerhalb der Logos durchlaufen Ordner und kein Array zur Verfügung stellen. – Mark

+0

@Mark ja ... Die Foreach durchläuft sie. – Andreas

+0

Sehen Sie hier als Referenz: https://3v4l.org/Jm42j – Andreas

Verwandte Themen