Moin!
Naja, die Alternative liegt auf der Hand:
Ich ergänze da mal den Bugfix:
$fd = fopen($fname,"x");
fclose($fd);
file_put_contents($fname, file_get_contents($_FILES['myfile']['tmp_name']));
> Fehlerbehandlung dazudenken, habe ich hier weg gelassen weil unwichtig für die kurze Erklärung.
>
> Aber dadurch wird allerdings move\_uploaded\_file() natürlich nicht obsolet. Sie hat halt nur andere Schwächen als die obige Methode und ihre Variationen (Race condition vs. Manipulierbarkeit, um ein Beispiel zu nennen).
Insbesondere verlangt DIESE Methode dort RAM-Speicher für die gesamte Datei am Stück. Und sie kopiert eben in jedem Fall. Mit anderen Worten: Diese Strategie ist ungeeignet für sehr große Dateien, während bei kleinen Dateien in dieser Hinsicht kein großer Unterschied zu bemerken ist.
Oder in Zahlen:
move\_uploaded\_file() vs. CK-Copy-Methode
kleine Dateien: 1 : 1
große Dateien: 1 : 0
Summe: 2 : 1
Vorteil von CK-Copy-Methode: Überschreibt nicht die bereits existierende Datei gleichen Namens im Zielverzeichnis. Wobei DAS ja eigentlich kein Thema ist:
~~~php
$fd = fopen($fname,"x");
fclose($fd);
move_uploaded_file($_FILES['myfile']['tmp_name'], $fname);
[x] done.
Ausgleich für Svens muf-Methode - FTW! ;)
- Sven Rautenberg