MyBB.de Forum

Normale Version: Hooks werden nicht immer ausgeführt!
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
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.
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
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.
Stimmt, dann wird run_shutdown() immer nochmal über die destruct-Funktion ausgeführt...
Danke für die Recherche!

Das klingt nach einiger Bastelei :-(
Fang mit dem Shutdown Setting an, das auf Ja zu stellen könnte schon einige Probleme beheben...
(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.
Wenn "useshutdownfunc" aktiviert ist, werden übrigens keinerlei Benachrichtigungen mehr ausgesendet. Dementsprechend ist es anscheinend besser, die Funktion deaktiviert zu belassen.