Ich habe eine foreach-Schleife, die sich darin verzweigt. Nach dem Prozess greift er auf die Datenbank zu. Ich erhalte eine Fehlermeldung:pcntl_fork und die MySQL-Verbindung ist weg
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Die Sache ist, ich bin der Verbindung zur Datenbank nach ich gegabelt haben.
Meine Frage: Warum würde das passieren?
Wenn dies passiert, bin ich tatsächlich Zugriff auf die Datenbank vor forking? Wird das Kind DB-Verbindungen erben?
(Hinweis: Ich kann Code schreiben, aber es ist ziemlich groß, da es alles in Klassen ist, was meine Verwirrung beim Zugriff auf die DB verursachen könnte. Eine andere Sache, die Sie wissen sollten, ist, dass ich ZF benutze .)
Ich habe nicht mit Zend Framework gespielt, aber ich frage mich, ob es eine Art von internen Pooling von Datenbankverbindungen hält. Oder macht es vielleicht dauerhafte Verbindungen? Ansonsten sollten Kinder keine DB-Verbindungen oder irgendetwas anderes erben, da es sich um verschiedene PHP-Prozesse handelt. – Fanis
Ack, ich stehe korrigiert. Meine obige Antwort basierte auf Intuition, aber nicht auf persönlicher Erfahrung, da dies noch nicht erforderlich war. Lesen mehr in es sehe ich gegabelten Kinder erben die DB Verbindung ihrer Eltern, und es ist ein bekanntes Problem: http://www.php.net/manual/en/function.pcntl-fork.php#70721 – Fanis
@Fanis - Can Sie machen Ihren letzten Kommentar zu einer Antwort, damit ich auf den großen grünen Haken klicken kann? Danke für das Ausgraben dieser Info. Ich werde nicht forkieren, stattdessen werde ich einen neuen Prozess ausführen, der seine eigene db Verbindung hat. Es wird dann verzweigen, um den aufrufenden Prozess nicht zu binden, und dann wird es in dem Kind ausgeführt, protokolliert es in einem Protokoll, dass ein anderer Cron-gestarteter Prozess mitkommen wird und überprüfen wird, ob es abgeschlossen wurde. Hmmmm ... Es könnte diesmal nur funktionieren! Vielen Dank! –