• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datei bei Upload überschreiben/ersetzen

T

TheBeat

Guest
Hallo,

ich suche nach einer Möglichkeit Bilddateien mit selben Namen beim Upload zu überschreiben bzw. zu ersetzen.
Hier mein Upload Script:
Code:
<?php
session_start();
if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="Mac_Version1.php">einloggen</a>');
}
$userid = $_SESSION['userid'];

$upload_folder = 'upload2/'; //Das Upload-Verzeichnis
$filename = "profilbild_user".$userid;
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));

 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif',);
if(!in_array($extension, $allowed_extensions)) {
    die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 4000*1024; //4000 MB
if($_FILES['datei']['size'] > $max_size) {
    die("Bitte keine Dateien größer 4mb hochladen");
}

//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
    $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF,);
    $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
    if(!in_array($detected_type, $allowed_types)) {
        die("Nur der Upload von Bilddateien ist gestattet");
    }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
 
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
    $Anzahl = 1;
    do {
        $new_path = $upload_folder.$filename.'_'.$Anzahl.'.'.$extension;
        $Anzahl++;
    } while(file_exists($new_path));
}
 
//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo 'Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a>';
?>

Ich vermute ganz stark das ich was an folgenden Zeilen ändern muss:

if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
$Anzahl = 1;
do {
$new_path = $upload_folder.$filename.'_'.$Anzahl.'.'.$extension;
$Anzahl++;
} while(file_exists($new_path));
}

Ich habe zwar mal etwas von einer Möglichkeit mit rename() gelesen aber dafür weiß ich leider zu wenig.

Kennt einer von euch einen Weg wie man mein vorhaben realisieren könnte ?
 
Werbung:
Wenn du überschreiben willst, dann nimm genau diese Zeilen raus!

Woher hast du das Script, du hast es ja anscheinend nicht geschrieben.
 
Doch ich schreibe meine Scripts mithilfe von Büchern und Googel größtenteils selber. Da ich aber gerade dabei bin PHP zu lernen verstehe und sehe ich nicht immer alle Probleme die sich aufzeigen

Bspw. die Zeilen einfach raus zu lassen, an die Möglichkeit hätte ich nicht gedacht
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Wenn du überschreiben willst, dann nimm genau diese Zeilen raus!

Woher hast du das Script, du hast es ja anscheinend nicht geschrieben.

Also du hast auf jeden Fall schon mal recht was das überschreiben angeht. Das funktioniert aber natürlich nur bei gleichen Dateien. Ich habe in meinem Script ein Problem mit der $extension :/ Sobald nämlich ein vorhandenes Bild, durch ein Bild mit anderer Endung als dem bestehendem hochgeladen wird, wird das bereits vorhandene Bild nicht mehr überschrieben :/

Ehrlich gesagt weiß ich nicht ganz was ich bezüglich der $extension ändern müsste um das Problem in den Griff zu bekommen. Hast du eventuell ne Idee oder kennst du ne Möglichkeit die es gibt um JEDE bestehende Datei zu überschreiben ? :)
 
Ermittle mit pathinfo den Dateinamen ohne Extension, suche mit glob passende Dateien und wenn es welche gibt, lösche sie mit unlink
 
Ermittle mit pathinfo den Dateinamen ohne Extension, suche mit glob passende Dateien und wenn es welche gibt, lösche sie mit unlink

Hey also ich habe jetzt mal mehr oder weniger versucht das umzusetzen was du mir sagtest und dabei ist folgender Code zustande gekommen:
Code:
if(file_exists($new_path)) {
    $array = array();
    foreach(glob('upload2/profilbild_user'.$userid) as $image)
    $array[$image] = unlink(§image);
}

So funktioniert das ganze jedoch noch nicht :/ Ich weiß das ich die pathinfo dabei noch nicht eingebaut habe doch der Code dafür ist hier:
Code:
<?php
$ordner = "upload2/";
$alledateien = scandir($ordner);
             
 
 
foreach ($alledateien as $datei) {
 
 
 $dateiinfo = pathinfo($ordner."/".$datei);
if ($datei != "." && $datei != ".."  && $datei != "_notes" & $datei != ".DS_Store") {
 ?>
    <li><a href="<?php echo $dateiinfo['dirname']."/".$dateiinfo['basename'];?>"><?php echo $dateiinfo['filename']; ?></a></li>
<?php
 };
 };
?>

Doch leider weiß ich nicht wie ich das einbinden soll :/
 
Werbung:
Vor dem move_uploaded_file:
PHP:
// Alte Bilder löschen
$oldfiles = glob($upload_folder . $filename . ".*");
if (count($oldfiles))
{
   foreach ($oldfiles as $oldfile)
      unlink ($oldfile);
}
 
Vor dem move_uploaded_file:
PHP:
// Alte Bilder löschen
$oldfiles = glob($upload_folder . $filename . ".*");
if (count($oldfiles))
{
   foreach ($oldfiles as $oldfile)
      unlink ($oldfile);
}

Hey tut mir leid das ich mich erst heute melde hatte diese Woche viel zu tun.

Also der Code ist wirklich super, funktioniert einwandfrei ! Wirklich vielen vielen Dank :D

Eine Frage aus Interesse habe ich aber :) Die pathinfo wird in dem Code ja letztendlich nicht benötigt oder sehe ich das falsch ?:)
 
Werbung:
Zurück
Oben