Signatur
Beschreibung
msg_stat_queue() gibt detaillierte Metainformationen über eine gegebene System-V-Nachrichtenwarteschlange zurück. Dazu gehören unter anderem die Anzahl der Nachrichten in der Queue, die aktuell belegten Bytes, Eigentümer- und Berechtigungsinformationen sowie Zeitstempel der letzten Lese- und Schreiboperationen.
Die Funktion ist nützlich, um den Zustand einer Warteschlange zu überwachen – etwa um festzustellen, ob eine Warteschlange überfüllt ist, wer sie zuletzt benutzt hat oder mit welchen Rechten sie konfiguriert wurde. Sie eignet sich für Monitoring-Routinen in Inter-Process-Communication-Szenarien (IPC).
Das zurückgegebene Array enthält folgende Schlüssel: msg_perm.uid, msg_perm.gid, msg_perm.mode, msg_stime (letzter Sendezeitpunkt), msg_rtime (letzter Empfangszeitpunkt), msg_ctime (letzter Änderungszeitpunkt), msg_qnum (Anzahl der Nachrichten), msg_qbytes (maximale Bytes in der Queue), msg_lspid (PID des letzten Senders), msg_lrpid (PID des letzten Empfängers).
Voraussetzung für die Nutzung dieser Funktion ist, dass PHP mit POSIX/SysV-Unterstützung kompiliert wurde und die Erweiterung sysvmsg geladen ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $queue Pflicht | SysvMessageQueue | Ein gültiges Warteschlangen-Handle, das zuvor mit msg_get_queue() erzeugt wurde. |
Rückgabewert
false zurückgegeben. Das Array enthält Schlüssel wie msg_perm.uid, msg_perm.gid, msg_perm.mode, msg_stime, msg_rtime, msg_ctime, msg_qnum, msg_qbytes, msg_lspid und msg_lrpid.Beispiele
Basisinformationen einer Warteschlange abrufen
<?php
$key = ftok('/tmp/myqueue', 'A');
$queue = msg_get_queue($key, 0666);
$stats = msg_stat_queue($queue);
if ($stats !== false) {
echo "Nachrichten in der Queue: " . $stats['msg_qnum'] . PHP_EOL;
echo "Max. Bytes in der Queue: " . $stats['msg_qbytes'] . PHP_EOL;
echo "Eigentümer-UID: " . $stats['msg_perm.uid'] . PHP_EOL;
echo "Letzter Sender (PID): " . $stats['msg_lspid'] . PHP_EOL;
echo "Letzter Empfänger (PID): " . $stats['msg_lrpid'] . PHP_EOL;
} else {
echo "Fehler beim Abrufen der Queue-Statistiken." . PHP_EOL;
}
msg_remove_queue($queue);
Monitoring: Prüfen ob Nachrichten aufgestaut sind
<?php
$key = ftok('/tmp/myqueue', 'B');
$queue = msg_get_queue($key, 0666);
// Einige Testnachrichten senden
msg_send($queue, 1, 'Nachricht 1');
msg_send($queue, 1, 'Nachricht 2');
$stats = msg_stat_queue($queue);
if ($stats['msg_qnum'] > 10) {
echo "WARNUNG: Mehr als 10 unverarbeitete Nachrichten in der Queue!" . PHP_EOL;
} else {
echo "Queue-Status OK. Nachrichten: " . $stats['msg_qnum'] . PHP_EOL;
}
// Zeitstempel auswerten
if ($stats['msg_stime'] > 0) {
echo "Letzte Nachricht gesendet am: " . date('Y-m-d H:i:s', $stats['msg_stime']) . PHP_EOL;
}
msg_remove_queue($queue);
// Wichtig · Fallstricke
Plattformeinschränkung: Diese Funktion steht nur auf Unix-ähnlichen Betriebssystemen zur Verfügung (Linux, macOS usw.) und ist unter Windows nicht verfügbar.
Berechtigungen: Der ausführende Prozess muss ausreichende Rechte besitzen, um auf die Warteschlange zuzugreifen. Andernfalls gibt die Funktion false zurück.
Typänderung: Ab PHP 8.0.0 akzeptiert der Parameter queue nur noch ein Objekt vom Typ SysvMessageQueue. In früheren Versionen wurde eine Ressource übergeben.