Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP foreach user script scheint Apache zum Hängen zu bringen

Dieses Verhalten klingt nach Sitzungssperre. Die Standardfunktion von PHP-Sitzungen besteht darin, die Sitzung zu sperren (um zu verhindern, dass zwei Prozesse in das Sitzungsobjekt schreiben). Dies ist normalerweise für typische kurzlebige PHP-Skripte in Ordnung, kann Sie jedoch beißen, wenn Sie etwas haben, das lange ausgeführt wird.

Wenn Ihre Anwendung überhaupt keine Sitzungen verwendet, sollten Sie session.auto_start deaktivieren in php.ini oder .htaccess:http ://www.php.net/manual/en/session.configuration.php#ini.session.auto-start (Wenn Sie es dort nicht sehen oder es bereits deaktiviert ist, Sie aber eine Art Framework verwenden, startet das Framework möglicherweise die Sitzung für Sie; wenn ja, ist es einfacher, zur nächsten Lösung zu gehen, als zu versuchen, zu kämpfen Rahmen.)

Wenn Sie die Sitzung auf einigen Seiten verwenden, aber nicht in diesem langwierigen Prozess, besteht die Lösung darin, die Sitzung am Anfang Ihres Skripts mit session_write_close() :

<?
set_time_limit(0);

require '../connect.php';
require '../includes/ses.php';

session_write_close();

$i = 1;
....

Nochmals die Framework-Warnung:Wenn das Framework eine Sitzung für Sie startet, dann setzen Sie session_write_close(); nach dem Einbinden der Framework-Dateien, nicht vorher! (Sie haben in Ihren Kommentaren erwähnt, dass dies der Fall war, weshalb ich es nach den erforderlichen Zeilen eingefügt habe.)

Wenn Ihr lang andauernder Prozess die Sitzung verwenden muss, aber schreibgeschützt ist, funktioniert das obige immer noch. Siehe https://stackoverflow.com/a/14409902/841830 (Wie diese Antwort zeigt, ist es auch möglich, am Ende des lang andauernden Prozesses in die Sitzung zu schreiben.)

(P.S. Dies wurde bereits in den Kommentaren beantwortet, aber ich habe sein Angebot von Wrikken angenommen, es als Antwort zu posten. Ja, die Gerüchte stimmen:Für ein paar Wiederholungen tue ich alles...)