Hallo liebe Selfer!
Ich habe ein sehr seltsames Problem mit verschwundenen Dateien, und ich komm ihm leider nicht auf die Schliche.
Hintergrund ist Folgender:
- bei mir können Leute mittels Ajax Bilder temporär(!) hochladen. Funktioniert ganz prima. Die Bilder landen in einem öffentlich zugänglichen TMP-Verzeichnis und erhalten einen eindeutigen Namen:
// find a free file name by generating a random one
while(true)
{
// using PHP4 !!!
$str_baseFileName = uniqid('');
// look up if a file with that name already exists
if (!file_exists('tmpUploads/'.$str_baseFileName.'.jpg'))
{
break;
}
}
-
dem User gebe ich sofort den temporären Dateinamen per Ajax zurück, so dass er das Bild anzeigen und sehen kann. Funktioniert ganz prima. Immer!
(Apaches "CheckSpelling" ist deaktiviert, es ist also exakt die richtige Datei!) -
per JavaScript erzeuge ich ein hidden-Feld für den temporären Dateinamen. Also als zusätzliches Formularfeld!
-
wenn der User zufrieden ist (und eventuell noch mehr Bilder hochgeladen hat), speichert er sein Formular mittels ganz gewöhnlichem HTTP-POST.
[SCHRITTE 1-4 beliebig oft wiederholbar]
- mein PHP-Skript nimmt den Dateinamen, holt sich die Datei, und speichert alles Nötige persistent auf der Platte und in der DB ab. Und genau das funktioniert in nur 99% der Fälle: manchmal werden Bilder (die eben noch existiert haben, S. Schritt 2) nämlich nicht gefunden, der User erhält die Mitteilung, dass es sein Bild nicht gibt.
Und tatsächlich: auf dem Server existiert dieses Bild nicht! Es existiert auch kein Bild, das zurselben Zeit hochgeladen wurde (nur mit anderer ID). Es ist, als wäre das Bild (nachdem ja kurz vorhanden war, S. Schritt 2) einfach verschwunden.
Eine weitere Anomalie: wenn's passiert, dann passiert es offenbar mit allen neuen Bildern des Formulars! D.h. für 5 Bilder haben Schritt 1-4 viermal geklappt, Schritt 5 scheitert für alle 5 Bilder auf einmal, trotz korrekten IDs.
Von Schritt 1-5 arbeiten wir also permanent mit derselben ID (z.B. "4c48b821f05a2". Und Schritt 1-4 funktionieren ganz prima, in Schritt 5 kommt diese ID auch auf dem Server an (hab ich geloggt).
Mein Verständnis der Technik sagt mir, dass irgendwo in Schritt 5 ein logischer Fehler dafür sorgt, dass das Bild vorzeitig gelöscht oder verschoben wird. Ich konnte aber nichts Derartiges finden!!! Und in 99% geht's ja auch (2000 Bilder pro Tag, ca. 15 Fehlschläge). Rekonstruieren (mit Bildern, die mir User geschickt haben) lässt sich's auch nicht.
Habt ihr irgendeine Idee, ob es Umstände gibt, in denen Unix Dateien nur eine gewisse Lebenszeit zugesteht? Oder irgendwelche anderen Ideen???
Martin