Moin!
Er hat in http://forum.de.selfhtml.org/my/?t=206726&m=1403981&aaf=1 noch die "normalen" I/O-Operationen (fopen, fwrite, ...) erwähnt, welche man nutzen kann. Damit bekommt man mindestens ein copy auf dem Fußweg hin.
Damit bekommt man sogar ein "Copy" hin, dass nicht einfach Zieldateien überschreibt, wenn man das nicht wünscht und das kollaborationsfähig ist, also die Aspekte einer Multiuserumgebung berücksichtigt.
Und wie entsteht der Zieldateiname?
Es gibt Methoden, auch ohne fopen(), Locking etc., konfliktfrei in der Multiuserumgebung einen Dateinamen zu finden und mit move_uploaded_file() zu benutzen, ohne sich Dateien zu zerstören:
Möglichkeit 1: Benutze die Funktion tempnam().
Möglichkeit 2: Wenn der Upload 1:1 mit einem Datenbankeintrag korreliert, verwende die unique ID des Datenbankeintrags.
Möglichkeit 3: Ignoriere das Problem, entschärfe es vielleicht durch Trennung der Verzeichnisse einzelner User, sofern es User gibt. Wer sich selbst Dateien überschreibt, wird wissen, was er tut. Wichtig ist nur, dass Dateien nur dort landen, wo sie hinsollen, und dass nur solche Dateien dort landen, die hochgeladen wurden - keine Dateien, die sich sonstwo auf dem System befinden.
Wenn move_uploaded_file() eine Prüfsumme für das File gegenprüfen würde, die mit dem Hochladen des Files angelegt würde und sofort in den Hoheitsbereich des Scriptes überführt würde, bevor es das File bewegt, dann wäre da eine zusätzliche Sicherheit. Aber das scheint die Funktion ja nicht zu tun.
Exakt das tut die Funktion doch.
- Sven Rautenberg