file upload - nur existierende Datei überschreiben zulassen
Fritz
- php
0 Magic Mike0 Fritz0 Magic Mike0 Fritz0 Thomas Luethi0 Fritz
0 Magic Mike
Hallo,
per html Formular (passwortgeschützt) kann mein user eine bereits auf dem Server liegende Datei überschreiben - und _nur_ diese Datei. Damit möchte ich sicherstellen, daß der user nur bestimmte Dateien (= exakt gleicher Dateiname) aktualisieren kann, aber keine neuen Dateien hochladen.
Mein Ansatz dazu:
<?
$updir = "/home/meindir/updir";
/* file ausgewählt? */
if (!$file_name) {
die("<p>Keine Datei zum upload ausgewählt.</body></html>");
}
/* file speichern */
if (file_exists("$updir/$file_name")) {
@copy($file, "$updir/$file_name");
echo("<p>Dateiupload erfolgreich.</body></html>");
}
?>
Das funktioniert auch so weit - _meistens_?
Aber nicht immer!
Von usern wird mir berichtet, daß ihr Browser während des uploads hängenbleibt (Sanduhr).
Ich hab auch schon gesehen, daß files nur teilweise hochgeladen werden, und dann natürlich korrupt sind.
Wo liegt der Fehler in meinem Ansatz? was hab ich übersehen?
Zusatzfrage: gibt es sicherheitsrelevante Aspekte, die ich übersehen habe?
Danke für Euere Hilfe.
Gruß Fritz
Moin Fritz,
per html Formular (passwortgeschützt) kann mein user eine bereits
Du hast 1 ganzen user? ;-)
@copy($file, "$updir/$file_name");
Der Befehl copy ist hier etwas unglücklich gewählt.
Noch dazu direkt auf die bestehende Datei. Besser ist ein hochladen
in ein build Verzeichniss mit einem anschliessenden moven auf das Ziel.
Bei einem direkten Upload, so wie du das machst, wird zunächst
die Datei neu angelegt ( mit Rechten für niemanden ). Sollte der
Uploadstream abbreisen ( warum auch immer ) dann bleibt eine korrupte
Datei zurück. Zumindest unter Unix / Linux.
regds
Mike
Hallo,
Du hast 1 ganzen user? ;-)
und wenn ich mein Problem nicht löse, dann zerreisst es auch den noch :-)
Der Befehl copy ist hier etwas unglücklich gewählt.
Noch dazu direkt auf die bestehende Datei. Besser ist ein hochladen
in ein build Verzeichniss mit einem anschliessenden moven auf das Ziel.
Da hab ich ein Verständnisproblem:
Ich dachte, der upload erfolgt _grundsätzlich_ in ein temp-Verzeichnis, und erst der copy-Befehl moved die Datei in mein Zielverzeichnis.
Kann mir da mal jemand aufs Fahrrad helfen?
Gruß Fritz
Moin,
Ich dachte, der upload erfolgt _grundsätzlich_ in ein temp-Verzeichnis, und erst der copy-Befehl moved die Datei in mein Zielverzeichnis.
genau hier ist dein Prob. Copy greift direkt auf das angegeben
Verzeichniss und Datei zu. Es gibt keinen Automatismus, bei
copy, von wegen upload in tmp und move.
ich suche dir mal ein Script raus welches den Upload regelt.
Allerdings ergibt die Prüfung auf existenz der Datei einen Fehler
das musst du umbauen.
regds
Mike
Hallo,
Ich dachte, der upload erfolgt _grundsätzlich_ in ein temp-Verzeichnis, und erst der copy-Befehl moved die Datei in mein Zielverzeichnis.
genau hier ist dein Prob. Copy greift direkt auf das angegeben
Verzeichniss und Datei zu. Es gibt keinen Automatismus, bei
copy, von wegen upload in tmp und move.
Dann hab ich da irgendwas in der Doku falsch verstanden.
ich suche dir mal ein Script raus welches den Upload regelt.
Danke für das script. Hab mal kurz drübergeschaut: ist mir für meinen Zweck zu mächtig, und zu voluminös. Und ich hab bei scripts, die ich nicht selbst verbrochen habe, und ich jede einzelne Zeile verstehe, immer so ein ungutes Gefühl. Ich möchte lieber "selfen"
Gruß Fritz
Hallo,
Ich möchte lieber "selfen"
Diese Einstellung gefaellt mir sehr! ;-)
Deine Doku (oder ist es ein Buch?) ist offenbar veraltet.
$file_name und copy() brauchte man frueher;
heute gibt es $_FILES und move_uploaded_file()...
Aktuelle Doku und Beispiele:
dclp-FAQ: Wie funktioniert ein Datei-Upload über HTML-Formulare?
http://www.dclp-faq.de/q/q-formular-upload-php4.html
PHP-Manual: Steuerung von Dateiuploads
http://www.php.net/manual/de/features.file-upload.php
Gruesse,
Thomas
Hallo,
PHP-Manual: Steuerung von Dateiuploads
http://www.php.net/manual/de/features.file-upload.php
Genau, das ist es. Und da hatte ich auch meinen "Glauben" an das temp-dir her (und trotzdem weiterhin fest mit copy() geschrieben)
"Standardmäßig werden Dateien in dem vorgegebenen temporären Verzeichnis des Servers gespeichert,..."
Werd das jetzt mal so realisieren, und dann schaun mer mal ...
Gruß Fritz
Moin,
Kann mir da mal jemand aufs Fahrrad helfen?
Ziehe Dir mal das und baue es um:
http://www.palazo.net/fileupload13.zip
regds
Mike