MyBB.de Forum
Hooks werden nicht immer ausgeführt! - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Entwicklung (https://www.mybb.de/forum/forum-74.html)
+--- Thema: Hooks werden nicht immer ausgeführt! (/thread-24132.html)



Hooks werden nicht immer ausgeführt! - icarus - 16.11.2011

Moin!

Ich bin am debuggen eines Problems. Dabei habe ich festgestellt, dass Hooks anscheinend nicht immer ausgeführt werden. Das Folgende ist meine zu Debugzwecken veränderte inc/functions.php:

PHP-Code:
$file fopen("/tmp/mailqueue""a+");
fwrite($filedate("Y.m.d G:i:s")." 3-Pre Hook\n");
fclose($file);

$plugins->run_hooks_by_ref("send_mail_queue_mail"$query);

$file fopen("/tmp/mailqueue""a+");
fwrite($filedate("Y.m.d G:i:s")." 3-Post Hook\n");
fclose($file); 

Im Hook sieht es so aus:

PHP-Code:
$plugins->add_hook('send_mail_queue_mail''syncom_send_mail_queue_mail');

...

function 
syncom_send_mail_queue_mail($query)
{
        global 
$db;

        
$date date("Y.m.d G:i:s");
        
$file fopen("/tmp/mailqueue""a+");
        
fwrite($file$date." 2-Mark\n");
... 

Dieses Logfile sieht nun so aus:
Code:
2011.11.16 12:58:06 3-Pre Hook
2011.11.16 12:58:06 2-Mark
2011.11.16 12:58:06 3-Post Hook
2011.11.16 12:58:06 3-Pre Hook
2011.11.16 12:58:06 3-Post Hook
2011.11.16 12:58:07 3-Pre Hook
2011.11.16 12:58:07 3-Post Hook
2011.11.16 12:59:04 3-Pre Hook
2011.11.16 12:59:04 3-Post Hook
2011.11.16 12:59:04 3-Pre Hook
2011.11.16 12:59:04 3-Post Hook
2011.11.16 12:59:05 3-Pre Hook
2011.11.16 12:59:05 3-Post Hook
2011.11.16 13:02:02 3-Pre Hook
2011.11.16 13:02:02 3-Post Hook
...
2011.11.16 13:02:40 3-Pre Hook
2011.11.16 13:02:40 2-Mark
2011.11.16 13:02:40 3-Post Hook
2011.11.16 13:02:40 3-Pre Hook
2011.11.16 13:02:40 3-Post Hook
D.h. dass immer mal wieder der Hook aufgerufen wird - aber eher unregelmäßig. Woran liegt das? Was kann ich dagegen machen?

Da mein gesamtes Kommunikationssystem auf der Zuverlässigkeit der Hooks basiert, schiebe ich hier leicht Panik.

Michael


RE: Hooks werden nicht immer ausgeführt! - StefanT - 16.11.2011

Das hat wahrscheinlich etwas damit zu tun, dass die Funktion beim shutdown ausgeführt wird und dort schon verschiedene System neu gestartet werde müssen, darunter das Plugin-System (scheinbar ohne die Hooks wieder zu laden, was ein Bug wäre). Du kannst versuchen die Einstellung useshutdownfunc umzustellen um dies zu verhindern.


RE: Hooks werden nicht immer ausgeführt! - icarus - 16.11.2011

Danke für die schnelle Antwort!

Die Einstellung "useshutdownfunc" ist bei mir derzeit auf "nein". Was kann schlimmstenfalls passieren, wenn ich die umstelle? Das Forum hat derzeit >2.000 Posts am Tag, da bin ich vorsichtig mit dem Experimentieren, wenn ich die Folgen nicht kenne Smile

Michael


RE: Hooks werden nicht immer ausgeführt! - StefanT - 16.11.2011

Das ist schon auf Nein? Damit hätte ich erwartet, dass es auf jeden Fall funktioniert.

Passieren kann da nichts, PHP5 unterstützt die shutdown-Funktionen und von Problemen habe ich auch nichts gehört.

Ansonsten bleibt mein Rat ausnahmsweise mal eine Code-Änderung zu verwenden. Wink Manchmal geht es einfach nicht anders.


RE: Hooks werden nicht immer ausgeführt! - frostschutz - 16.11.2011

http://dev.mybb.com/issues/1710


RE: Hooks werden nicht immer ausgeführt! - StefanT - 16.11.2011

Stimmt, dann wird run_shutdown() immer nochmal über die destruct-Funktion ausgeführt...


RE: Hooks werden nicht immer ausgeführt! - icarus - 16.11.2011

Danke für die Recherche!

Das klingt nach einiger Bastelei :-(


RE: Hooks werden nicht immer ausgeführt! - frostschutz - 16.11.2011

Fang mit dem Shutdown Setting an, das auf Ja zu stellen könnte schon einige Probleme beheben...


RE: Hooks werden nicht immer ausgeführt! - StefanT - 16.11.2011

(16.11.2011, 16:41)frostschutz schrieb: Fang mit dem Shutdown Setting an, das auf Ja zu stellen könnte schon einige Probleme beheben...
Damit könnte der Hook dann allerdings gar nicht mehr funktionieren.


RE: Hooks werden nicht immer ausgeführt! - icarus - 16.11.2011

Wenn "useshutdownfunc" aktiviert ist, werden übrigens keinerlei Benachrichtigungen mehr ausgesendet. Dementsprechend ist es anscheinend besser, die Funktion deaktiviert zu belassen.