Ausführen von imap_close funktioniert nicht

8

Ich habe eine Seite mit Kunden und mit ajax im Laden Informationen darüber, ob sie uns E-Mails senden oder nicht.

Code sieht so aus:

%Vor%

Aber es gibt ungefähr 20-30 Kunden auf einer Seite, also dauert der Prozess manchmal etwa 10-20 Sekunden und ich konnte den Prozess nicht optimieren.

Aber wenn der Client versucht, eine Seite neu zu laden, wartet er immer noch, bis imap_search fertig ist. Beim erneuten Laden kann es also 20 Sekunden dauern, bis die Seite neu geladen wird.

Ich habe versucht, die Funktion ajax mit beforeunload abzubrechen und die imap zu schließen, aber das funktioniert nicht.

Mein Code:

Ajax:

%Vor%

PHP:

%Vor%

Aber obwohl die ajax abgebrochen wird und imap_close für die Variable imap_open aufgerufen wird, dauert es immer noch 10-20 Sekunden, bis die Seite neu geladen wird, also gehe ich davon aus, dass die Imap nicht geschlossen wurde.

Wie schließe ich imap , damit die Seite sofort neu geladen werden kann?

    
JTC 10.03.2016, 14:36
quelle

2 Antworten

2

Ich würde empfehlen, es zu töten, indem Sie eine Datei erstellen, die eine Unterbrechung verursacht:

%Vor%

Dann rufen Sie auf Ihrem Ausgangs-Ajax einfach ein PHP-Skript auf, das diese Datei einfach erstellt. und es wird Ihre Schleife brechen und die Datei entfernen.

    
Greg Borbonus 17.03.2016 21:25
quelle
1

Wenn ich richtig verstanden habe, liegt der zeitaufwändige Code in der foreach () Schleife.

Nun, selbst wenn Sie eine zweite Anfrage zum Beenden der IMAP-Sitzung machen, wird diese foreach () - Schleife fortgesetzt, bis entweder oder PHP sie beendet wenn (und wenn) die Ausführungszeit die Einstellung für max_execution_time überschreitet.

In jedem Fall brauchen Sie etwas innerhalb Ihrer foreach () - Schleife, die bei jeder Runde prüft, ob eine Abbruchbedingung erfüllt ist, um die aktuelle Anfrage zu beenden und dem Kunden zu erlauben, eine neue zu erstellen.

Ich schlage vor, dass Sie sich die PHP-Funktion connection_aborted () ansehen, die Sie verwenden könnten Erkennen, sobald der Client die aktuelle Anfrage abbricht, und allgemeiner können Sie das Thema Verbindungsbehandlung um besser zu verstehen, wie Verbindungen und Anfragen in PHP gehandhabt werden.

    
johnwait 15.03.2016 13:19
quelle

Tags und Links