Rename() funktioniert nicht

EnesE

Grünschnabel
Hallo,
ich habe ein großes Problem bei mir kommt folgender Fehler:
Warning: rename(/upload/userfiles/1_System/Uploads/3/25-07-2017_20-38-53_1-System_3.jpg ,/upload/userfiles/1_System/Uploads/2/25-07-2017_20-38-53_1-System_3.jpg ): Das System kann den angegebenen Pfad nicht finden. (code: 3) in D:\_XAMPP\htdocs\include\gallery.php on line 780

wenn ich folgenden Befehl ausführe:
PHP:
<?php
//...
rename($ImgUrl, $NewImgurl);
//...
?>

Die Dateien sind definitiv vorhanden und ich verstehe nicht woran es liegen kann,
Könnt ihr mir helfen??
Hier der Code-Abschnitt: Habe auch Kommentare dran geschrieben.
PHP:
<?php
//...

$ImgUrl = '/upload/userfiles/1_System/Uploads/3/25-07-2017_20-38-53_1-System_3.jpg';

//...
$UserID_DIR = userout("id");            // User ID
$UserName_DIR = userout("username");    // Username
// Ordnernamen des Users zusammensetzen
$UserFolder = $UserID_DIR;
$UserFolder .= "_";
$UserFolder .=  str_replace(' ', '',$UserName_DIR);  // Leerzeichen entfernen
$OK = 0;

$target_dir = "/upload/userfiles/" . $UserFolder ."/Uploads/";    // Gesamter Pfad zum Ordner

if(isset($edit_dir_select) && $edit_dir_new == "") {      // Wenn der User einen bestehenden Ordner aus einer Liste ausgewählt hat - Funktioniert auch!
    $NewImgfolder = $edit_dir_select;
    $NewImgurl = $target_dir.'/'.$edit_dir_select.'/'.$FileName;
    $OK = 1;
} else {       // Wenn der User einen neuen Ordner erstellen will - Funktioniert ebenfalls!
    if (!file_exists($target_dir.'/'.$edit_dir_create.'/')) {
        if (!mkdir($target_dir.'/'.$edit_dir_create.'/', 0777, true)) {
            $alert = 'Erstellung des Ordners fehlgeschlagen';
            $OK = 0;
        } else {
            $NewImgfolder = $edit_dir_create;     // Wichtig für Datenbank eintrag
            $NewImgurl = $target_dir.'/'.$edit_dir_create.'/'.$FileName;      // Wichtig für Datenbank eintrag
            $alert = 'Ordner erstellt';
            $OK = 1;
        }
    } else {
        $NewImgfolder = $edit_dir_create;    // Wichtig für Datenbank eintrag
        $NewImgurl = $target_dir.'/'.$edit_dir_create.'/'.$FileName;  // Wichtig für Datenbank eintrag
        $alert = 'Ordner existiert bereits. Bild wurde in Ordner kopiert';
        $OK = 1;
    }
}

// Ab hier fangen die Probleme an

$NewImgurl = str_replace('///', '/', $NewImgurl);   // Entfernt unnötige /// und ersetzt in /
$NewImgurl = str_replace('//', '/', $NewImgurl);    // Entfernt unnötige // und ersetzt in /
rename($ImgUrl, $NewImgurl);    // Datei soll unbenannt werden

var_dump(file_exists ( $NewImgurl ));   // gibt false zurück
var_dump(file_exists ( $ImgUrl ));      // gibt false zurück

if($OK == 1) {   // Wenn alles ok sein sollte wird der DB eintrag geändert
    $alert .= 'Alles gut';
} else {
    $alert .= 'Fehler';
}
?>
 
Auf die Schnelle würde ich tippen, daß es am Pfad selbst liegt. Durch den / am Anfang will das System auf die Rootebene zurück um von dort anzufangen. Das ist auf echten Webservern ok, auf lokalen Systemen kann das aber zu Problemen führen.

Nimm mal den / am Anfang aller Pfade weg und gehe, falls du vom Script aus rückwärts mußt, mit ../ vor. Ansonsten nur den relativen Pfad vom Script aus nehmen.
 
Auf die Schnelle würde ich tippen, daß es am Pfad selbst liegt. Durch den / am Anfang will das System auf die Rootebene zurück um von dort anzufangen. Das ist auf echten Webservern ok, auf lokalen Systemen kann das aber zu Problemen führen.

Nimm mal den / am Anfang aller Pfade weg und gehe, falls du vom Script aus rückwärts mußt, mit ../ vor. Ansonsten nur den relativen Pfad vom Script aus nehmen.
Wenn ich den Script auf meinem Webserver ausprobiere funktioniert es ebenfalls nicht.
Das Script selber ist in "D:\_XAMPP\htdocs\includes\gallery.php" und wird über "http://localhost/?p=gallery" aufgerufen die Bilder werden unter "htdocs\upload\userfiles\1_System\Uploads\" abgespeichert 1_System ist veränderbar und setzt sich aus einer ID und den usernamen zusammen.
Wenn ich das "/" am Anfang weg nehme kommt ein Fehler, dass rename() falsch angegeben wurde und wenn ich aus "/" -> "../", "../../" mache kommt die selbe Fehlermeldung, dass der Pfad falsch ist.

Ich hatte sonst nie Probleme ich bin auch kein Anfänger in PHP aber ich komme einfch nicht drauf woran es liegen könnte.

Edit: Wenn ich den Pfad der bei der Fehlermeldung erscheint im Browser an http://localhost anhänge erscheint auch das Bild
 
Zuletzt bearbeitet:
Wenn ich aus rename($ImgUrl, $NewImgurl) -> rename($_SERVER['DOCUMENT_ROOT'].$ImgUrl, $NewImgurl) mache kommt auch eine Fehlermeldung:

Warning: rename(D:/_XAMPP/htdocs/upload/userfiles/1_System/Uploads/3/25-07-2017_20-38-53_1-System_3.jpg,/upload/userfiles/1_System/Uploads/2/25-07-2017_20-38-53_1-System_3.jpg ): Das System kann den angegebenen Pfad nicht finden. (code: 3) in D:\_XAMPP\htdocs\include\gallery.php on line 782

Der gesamte Pfad ist diesesmal angegeben

Wenn ich es mit kopieren und anschließend die alte datei löschen mache klappt es auch nicht :/
 
Zuletzt bearbeitet:
Naja hab es durch einen Umweg doch noch geschafft. Hab einfach einen neuen DB eintrag hinzugefügt undzwar "imgname" und "imgfolder" und habe den Pfad dann einfach zusammensetzen lassen anstatt ihn direkt aus "imgurl" auszulesen.
Es ist zwar der selbe Pfad aber egal hauptsache es klappt:D wenn jemand das Problem doch noch findet dann kann er es ja posten

Und ich habe vorher bei rename() die beiden "/" am anfang entfernt also dass es
PHP:
<?php rename('upload...alt.jpg','upload...neu.jpg'); ?>
ist aber hat dennoch nicht geklappt obwohl es so vergegeben ist dass es ohne / beginnt :/
 
Ich hab das mal mit den Pfaden nachgestellt, die in der Fehlermeldung standen. Das rename hat funktioniert, wenn die Verzeichnisse existieren! Sollte, wie in deinem Beispiel, der Ordner "2" nicht existieren, wird er nicht angelegt. Daher vermute ich, daß er nicht vorhanden war.
 
Ich hab das mal mit den Pfaden nachgestellt, die in der Fehlermeldung standen. Das rename hat funktioniert, wenn die Verzeichnisse existieren! Sollte, wie in deinem Beispiel, der Ordner "2" nicht existieren, wird er nicht angelegt. Daher vermute ich, daß er nicht vorhanden war.

Die Ordner existierten ich hatte vorher auch einen Ablauf (if-abfrage) Dass wenn der Ordner nicht existiert er erstellt wird und erst dann das rename() ausgeführt wird aber man konnte auch in dem vorherigen Formular auswählen ob ein neuer Ordner erstellt werden soll oder ein vorhandener ausgewählt wird.

Aber danke für deine Hilfe :)
 
Zurück