Hi!
Für 2. kann man muf() allein nicht nehmen, aber das ist mit einem zusätzlichem fopen(x) lösbar.
Jain, nicht so, wie wir es vorgestellt haben. Man verschiebt so den Punkt der Race condition nur nach hinten. [...] die dadurch entsteht, dass muf die Datei zuerst löscht.
Achso, innerhalb mufs zwischen Löschen der durch 'x' angelegten Datei und dem Verschieben/Kopieren.
So wäre es vielleicht lösbar:
$fd = fopen($lockdir . '/' . $file,"x");
fclose($fd);
move_uploaded_file($_FILES['myfile']['tmp_name'], $destdir . '/' . $file);
>
> Fehlerbehandlung wieder dazudenken.
Um sie mal wenigstens minimal hinzuzufügen:
~~~php
if ($fd = fopen($lockdir . '/' . $file,"x")) {
fclose($fd);
move_uploaded_file($_FILES['myfile']['tmp_name'], $destdir . '/' . $file);
} else
// Schon vorhanden
Aber, hmm, dann hat man im $lockdir einen Haufen "unnütze" 0-Byte-Dateien rumliegen, beziehungsweise muss sie erst einmal für die bereits vorhandenen $destdir-Dateien anlegen und darf sie nicht löschen. Besonders hübsch ist das nicht.
Lo!