Hi!
file_exists prüft die Existenz der Datei, hinterlässt für andere Prozesse aber keinerlei Spuren, dass der geprüfte und nicht gefundene Dateiname danach dann in Benutzung ist.
fopen(x) [...] wichtig ist, dass die Datei bei Nichtexistenz angelegt wird, und bei Existenz ein Fehler kommt. Dadurch wird jedes andere Skript, was zeitgleich dasselbe versucht, entweder vorher laufen und die Datei früher anlegen, oder später laufen und die angelegte Datei finden und abbrechen.
Wenn man also annimmt, dass nur dieses (oder die eigenen Scripte, die nach dem selben Verfahren aufgebaut sind) auf die Zieldatei zugreift, dann ist das also eine Art Schutz vor Doppelterstellung. Wenn man jedoch nicht davon ausgehen kann, dann hilft das auch nicht völlig. Dann wäre zu klären, ob nicht beeinflussbare Codeteile im eigenen Verantwortungsbereich (verwendete Software von anderen Herstellern) mit dieser Datei zu arbeiten versuchen. Gegen Angriffe von der Seite (Mithostlingen oder eingenistetem Ungeziefer) sind Dateisperren ja sowieso nicht konzipiert. Welche Szenarien gilt es eigentlich zu verhindern?
1. Verschieben von nicht hochgeladenen Dateien (z.B. /etc/passwd in ein per Web zugreifbares Verzeichnis)
2. Überschreiben bereits vorhandener Dateien (optional, weil mitunter auch gewünscht)
x. _____
Punkt 1 kann muf()[*] leisten, $_FILES['x']['tmp_name'] nicht, wenn man davon ausgehen muss, dass andere diese Variable umbelegen.
Für 2. kann man muf() allein nicht nehmen, aber das ist mit einem zusätzlichem fopen(x) lösbar.
Wenn ich nun nichts übersehen habe, ist muf() immer noch im Vorteil gegenüber $_FILES und das Überschreibproblem recht einfach lösbar.
[*] nette Abkürzung für move_uploaded_files()
Lo!