Start · Sprachen · PHP · Referenz · msg_stat_queue

msg_stat_queue

Funktion

Liefert statistische Informationen zur Datenstruktur einer POSIX-Nachrichtenwarteschlange als assoziatives Array.

seit PHP 4.3.0 Kategorie: misc

Signatur

msg_stat_queue(SysvMessageQueue $queue): array

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

Typ
array
Beschreibung
Gibt ein assoziatives Array mit Statusinformationen zur Warteschlange zurück. Schlägt die Operation fehl, wird 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);
Nachrichten in der Queue: 0 Max. Bytes in der Queue: 65536 Eigentümer-UID: 1000 Letzter Sender (PID): 0 Letzter Empfänger (PID): 0

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);
Queue-Status OK. Nachrichten: 2 Letzte Nachricht gesendet am: 2024-01-15 10:30:00

// 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.