Ich habe ein langes Skript in PHP gemacht:
%Vor%Es läuft perfekt im Hintergrund, auch wenn ich die Seite schließe. Mein Problem ist, dass ich andere PHP-Dateien nicht öffnen kann, bis dieses Skript im Hintergrund ausgeführt wird. Wie kann ich dieses Problem lösen?
Wenn ein PHP-Skript Sitzungen verwendet, sperrt PHP die Sitzungsdatei, bis das Skript abgeschlossen ist. Eine Seitenanforderung, die versucht, eine gesperrte Sitzung zu verwenden, wird blockiert, bis die Sitzungsdatei freigegeben wird. PHP tut dies, damit Sitzungen in einem konsistenten Zustand bleiben. Zitat aus dem PHP-Fehler # 31464 :
[2005-01-10 08:13 UTC] Derick bei php dot net
Dies ist in der Tat kein Fehler, die Sitzungserweiterung muss gesperrt werden die Sitzungsdatei, so dass gleichzeitige Aktualisierungen die Datei nicht beschädigen können. Dies bedeutet, dass alle Skripte, die dieselbe Sitzungsdatei verwenden, verwendet werden müssen serialisiert. Um die Leistung zu verbessern, können Sie verwenden Ссылка , sobald Sie fertig sind Sitzungsvariablen lesen / einstellen, die die Sperre der Datei.
Die einfachste Problemumgehung wie oben beschrieben und hier ist:
session_start()
session_write_close()
Wie in den Kommentaren erwähnt, sind Sitzungen das Problem - weil die Sitzungsdatei gesperrt ist.
Verwenden Sie session_write_close()
in Ihrem lang laufenden Skript, um die Sitzungsdatei zu entsperren. Beachten Sie jedoch, dass Sie% nicht verwenden können. co_de% Variablen in diesem bestimmten Skript danach.
Tags und Links php session background-process