Hallo, Gast!
AnmeldenRegistrieren

Hooks werden nicht immer ausgeführt!
#1
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
 
#2
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.
 
#3
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
 
#4
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.
 
#5
http://dev.mybb.com/issues/1710
 
#6
Stimmt, dann wird run_shutdown() immer nochmal über die destruct-Funktion ausgeführt...
 
#7
Danke für die Recherche!

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


Möglicherweise verwandte Themen…
Task wird nicht ausgeführt
Letzter Beitrag: 31.03.2021, 10:28
Was genau sind "Hooks"?
Letzter Beitrag: 05.02.2019, 10:18
[geteilt] Reihenfolge der Hooks?
Letzter Beitrag: 15.12.2013, 14:46
Reihenfolge der Hooks?
Letzter Beitrag: 12.08.2013, 17:08
Hooks: Dokumentation, in welcher die mitgegebenen Argumente aufgelistet sind?
Letzter Beitrag: 27.07.2013, 18:18