Lang andauernder Hintergrund PHP-Skript blockiert andere PHP-Seiten, bis es fertig ist

8

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?

    
martincpt 30.11.2012, 18:44
quelle

2 Antworten

17

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:

  • Aufruf session_start()
  • Lese / Schreib irgendwelche Sitzungsvariablen
  • Aufruf session_write_close()
  • langwierige Verarbeitung
Salman A 30.11.2012, 19:17
quelle
4

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.

    
Niet the Dark Absol 30.11.2012 19:06
quelle

Tags und Links