Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP-Upload: Datei existiert schon

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 02.03.2007, 14:59

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.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


nachfrag
PostRank 4
PostRank 4
Beiträge: 174
Registriert: 30.05.2006, 21:20
Wohnort: Westerwald

Beitrag von nachfrag » 02.03.2007, 15:29

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 ;)

wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 03.03.2007, 16:50

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.

sandoba
PostRank 6
PostRank 6
Beiträge: 395
Registriert: 20.10.2003, 21:33

Beitrag von sandoba » 03.03.2007, 17:35

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.
Shop-Software CP::Shop (brandneu: V2016.1!) und Content-Management-System Contentpapst unter www.sandoba.de / www.shop-test.com
Standardmäßig SEO-/Affiliate-freundlich, flexibel anpassbar! | Tipps&Tricks: Entwickler-Weblog zu CMS + Shop-Software

Anonymous

Beitrag von Anonymous » 03.03.2007, 17:50

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...

nachfrag
PostRank 4
PostRank 4
Beiträge: 174
Registriert: 30.05.2006, 21:20
Wohnort: Westerwald

Beitrag von nachfrag » 03.03.2007, 18:30

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

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag