ubuntuusers.de

php Upload Dateien automatisch umbenennen

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 877

Hallo

Hab mir für meine Web-Seite, die auf meinem PC über Apache bereitgestellt wird, ein Script erstellt, das mir (anderen) ermöglicht, Dateien auf meinen PC hochzuladen, das klappt auch hervorragend.

Das Dumme ist, es werden gleichnamige Dateien einfach überschrieben...wie muß ich mein Script abändern, damit neue Dateien, die bereits vorhanden sind, einen neuen Dateinamen bekommen, also z.B. archiv.zip, archiv(1).zip, archiv(2).zip oder ähnlich?

<?php
if($_FILES['file']['error'] == UPLOAD_ERR_OK){
   $path = '/var/www/upload/';
   $path .= basename($_FILES['file']['name']);
   if(move_uploaded_file($_FILES['file']['tmp_name'], $path)){
      // upload successful
   }
}
?>

Gruß TNT

Moderiert von xabbuh:

In das richtige Forum verschoben. Bitte beachte die als Wichtig markierten Themen.

skainz

Anmeldungsdatum:
8. Juli 2010

Beiträge: Zähle...

<?php
if($_FILES['file']['error'] == UPLOAD_ERR_OK){
   $path = '/var/www/upload/';
   $path .= basename($_FILES['file']['name']);
   $dir = $path;
   
   for($counter=1; is_file($path) == true; $counter++){
     $path = $dir;
     $path .= "(".$counter.")";
   }

   if(move_uploaded_file($_FILES['file']['tmp_name'], $path)){
      // upload successful
   }
}
?>

so würd ich das ganze machen....

TNTMaster

(Themenstarter)

Anmeldungsdatum:
30. Juli 2009

Beiträge: 877

Danke, jetzt klappt es, die Dateien werden numeriert und nicht mehr überschrieben. Damit geht zwar die Datei-Endung drauf, weil die Nummer hinten angehängt wird, aber das macht nichts, da es nur selten vorkommt, daß Dateien mit gleichem Namen hochgeladen werden. Die kann ich per Hand umbenennen.

Gruß TNT

skainz

Anmeldungsdatum:
8. Juli 2010

Beiträge: 11

stimmt, sorry...☺

<?php
if($_FILES['file']['error'] == UPLOAD_ERR_OK){
   $path = '/var/www/upload/';
   $path .= basename($_FILES['file']['name']);
   $dir = $path;
   
   for($counter=1; is_file($path) == true; $counter++){
     $path = $dir;
     $path = "[".$counter."]_".$path;
   }

   if(move_uploaded_file($_FILES['file']['tmp_name'], $path)){
      // upload successful
   }
}
?>

Rein Formel damit die Dateiendung erhalten bleibt.

Den Zähler einfach vor den Dateinamen.

macht auch das löschen der Duplikate einfacher...

lg

TNTMaster

(Themenstarter)

Anmeldungsdatum:
30. Juli 2009

Beiträge: 877

Jetzt heißt der Pfad z.B. [1]_/var/www/upload/archiv.zip, was natürlich Unsinn ist. Hab aber selbst ne Lösung gefunden, womit es klappt und die Dateien richtig umbenannt werden, also: /var/www/upload/[1]_archiv.zip.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
if($_FILES['file']['error'] == UPLOAD_ERR_OK){
   $path = '/var/www/upload/';
   $dir = $path;
   $path .= basename($_FILES['file']['name']);
   for($counter=1; is_file($path) == true; $counter++){
     $path = $dir;
     $path .= "[".$counter."]_".basename($_FILES['file']['name']);
   }
if(move_uploaded_file($_FILES['file']['tmp_name'], $path)){
      // upload successful
   }
}
?>

PS: Sollte mir echt mal nen Grundkurs PHP reinziehen.

Gruß TNT

skainz

Anmeldungsdatum:
8. Juli 2010

Beiträge: 11

ok....mit meinem Code wollte ich genau das gleiche erreichen...

dass das der pfad ist, nicht nur der dateiname habe ich irgendwie...nicht berücksichtigt... 😉

mein fehler...

natürlich...basename() nimmt den dateinamen raus, ohne pfad. und dann einfach die schleife drum rum

und du kannst soviele gleichnamige dateien raufladen wie du willst...

lg skainz

Antworten |