Seite 1 von 1
PHP-Upload: Datei existiert schon
Verfasst: 02.03.2007, 14:59
von wuschba
Hi. Ich habe ein PHP-Upload-Script gebastelt, funktioniert soweit auch.
Nun passiert es aber, dass existierende Dateien vom Script überschrieben werden, da möchte ich dem Benutzer eine "Wollen-Sie-wirklich-"Warnung anbieten. Der Dateiname auf dem Server ergibt sich aus dem Dateinamen der hochgeladenen Datei.
Wie mache ich das denn? Wenn ich die Datei hochgeladen habe und dann erst die Warnung ausgebe, ist beim nächsten Submit die Tmp-Datei schon wieder wech, so dass ich die Datei nicht mehr mittels move_uploaded_file verschieben kann.
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 02.03.2007, 15:29
von nachfrag
hallo,
hört sich nach einem netten feature an.
Mein Ansatz wäre: move_uploaded_file($woandershin) und mit einem
if(file_exists(...)) abfragen, ob die Datei schon exisitiert.
Der lokale Name der Datei steht in $_FILES['FORMULARFELDNAME']['name'].
Wenn nein > Datei verschieben (mit rename() )
Wenn ja > Dateiname in session o.ä. speichern und Warnung ausgeben.
Grüße
EDIT: rename und nicht remane

Verfasst: 03.03.2007, 16:50
von wuschba
Hi nachfrag, danke für die Antwort. Das Problem ist: Ich kann den temporären Dateinamen soviel speichern, wie ich will: Die Datei wird von PHP direkt nach dem Abarbeiten des Scripts gelöscht, d.h. gebe ich eine Warnung aus, der Benutzer sagt "trotzdem machen", ist die Datei schon wieder weg.
Ich sehe auch keine Chance, sie dann nochmal hochzuladen - was an sich aber ja auch schon nicht sehr gut wäre, da sie dann 2x durch den Äther gehen würde.
Verfasst: 03.03.2007, 17:35
von sandoba
Möglich ist folgendes: Den Benutzer zusätzlich einen gewünschten Dateinamen eingeben lassen und per AJAX überprüfen, ob eine Datei mit diesem Namen schon existiert (ähnlich wie bei Benutzernamen in Foren u.ä.).
Falls ja: Fehlermeldung ausgeben.
Falls nein: Per JS Button zum Abschicken des Formulares + Datei hochladen freischalten.
Sicherhaltshalber trotzdem noch per PHP sicherstellen, dass vorhandene Dateien nicht überschrieben werden.
Verfasst: 03.03.2007, 17:50
von net(t)worker
speicher die hochgeladene Datei unter einem anderen Namen ab, hängt z.b. einfach nen timestamp dran, und frage den User dann was passieren soll, ob er die bestehende datei überschreiben möchte, oder der neuen einen anderen Namen geben... und jenachdem was er will, machste das dann... feddich...
Verfasst: 03.03.2007, 18:30
von nachfrag
Hallo wuschba,
wuschba hat geschrieben:Das Problem ist: Ich kann den temporären Dateinamen soviel speichern, wie ich will: Die Datei wird von PHP direkt nach dem Abarbeiten des Scripts gelöscht, d.h. gebe ich eine Warnung aus, der Benutzer sagt "trotzdem machen", ist die Datei schon wieder weg.
Dass der tmp_name dann "weg" ist, ist auch logisch.
Du würdest die Datei ja auch unter einem dir bekannten Namen speichern (entweder in einem incoming Verzeichnis oder wie vorgeschlagen mit Timestamp), wenn Du feststellst, dass es diese Datei schon gibt.
Du müsstest dann für die "Überschreiben-Nachfrage" zwischenspeichern:
1. den "Original-Namen" der Datei, steht in $_FILES[$bla]['name'] - für die Nachfrage und zum Überschreiben
2. wo sie hingespeichert wurde, um sie dann von dort zu verschieben oder wieder zu löschen wenn der User doch nicht überschreiben will.
Wenn der User also sagt "ja, überschreiben" greifst du nicht mehr auf die PHP tmp Datei zu, sondern auf den von dir (temporär) vergebenen Namen.
Hoffe das ist halbwegs verständlich
Grüße