Ich konnte es reproduzieren und das Problem darstellen. Zuerst sah es so aus, wie du es beschrieben hast: Ich habe das Skript im Browser angefragt und während des Laufens habe ich den Dateiinhalt überprüft - es war busy!
. Dann lief ich zweites Skript und im Browser war es auch Laden, das gleiche wie das erste. Ich dachte, es läuft auch, , aber es war nicht.
Es ist ziemlich einfach zu Figur, wenn statt busy!
Sie etwas zufällig verwenden, wie:
file_put_contents('test.txt', 'busy washing ' . (mt_rand(1, 999) * 99999) . ' dishes');
Führen Sie die gleichen zwei Skripte die gleiche Art und Weise und Dateiinhalte überwachen. Zuerst wird es sein, was das erste Skript geschrieben hat. Sagen Sie busy washing 1 dishes
. Dann werden Sie feststellen, dass sich der Inhalt zu dem ändert, was das zweite Skript schreibt, die Nummer wird anders sein.
Im Grunde, was passiert, ist das zweite Skript wartet, während zuerst beendet wird und erst dann startet. Lustigerweise löscht das erste Skript die Datei, wodurch das zweite Skript normal ausgeführt werden kann, aber es sieht im Browser so aus, als würden beide gleichzeitig arbeiten. Tatsächlich läuft das zweite Skript doppelt so lange wie das erste.
Ich habe dieses Verhalten bei schweren asynchronen Anfragen über AJAX und Anforderung der gleichen Website-Seite in einem anderen Browser Registerkarte aufgetreten. Bis das Skript beendet ist, konnte ich die Registerkarte nicht laden.
So lange Geschichte kurz, es gibt kein Problem! Wenn Sie diese Skripte über Cron in die Warteschlange stellen, werden sie separat ausgeführt und die zweite wird beendet, indem Sie feststellen, dass die Datei nicht leer ist.
Siehe [flock] (http://php.net/manual/en/function.flock.php). –
Es sollte keine Zwischenspeicherung geben. Ich bin nur neugierig, was passiert, wenn Sie manuell etwas in die Datei schreiben und Ihr Skript ausführen? – Ranty
@LeviMorrison sieht gut aus, aber was ist mit 'file_get_contents()'? – Peter