Signatur
Beschreibung
msg_set_queue() erlaubt es, bestimmte Attribute einer bestehenden System-V-Nachrichten-Warteschlange zu verändern. Die zu setzenden Werte werden als assoziatives Array übergeben, das denselben Aufbau wie das von msg_stat_queue() zurückgelieferte Array hat.
Folgende Schlüssel werden ausgewertet und angewendet: msg_perm.uid (Eigentümer-UID), msg_perm.gid (Eigentümer-GID), msg_perm.mode (Zugriffsrechte, oktal) und msg_qbytes (maximale Anzahl Bytes in der Warteschlange). Alle anderen Schlüssel im Array werden ignoriert.
Typische Anwendungsfälle sind das nachträgliche Anpassen der Zugriffsrechte auf eine Warteschlange (z. B. damit ein anderer Prozess mit anderer UID Nachrichten lesen darf) oder das Erhöhen bzw. Verringern der maximalen Puffergröße msg_qbytes.
Bitte beachten Sie, dass das Herabsetzen von msg_qbytes unter den aktuell belegten Platz blockieren kann und dass viele Attribute root-Rechte oder entsprechende Capabilities erfordern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $queue Pflicht | SysvMessageQueue | Das Warteschlangen-Handle, das zuvor mit msg_get_queue() erzeugt oder geöffnet wurde. |
|
| $data Pflicht | array | Assoziatives Array mit den zu setzenden Attributen. Gültige Schlüssel sind msg_perm.uid, msg_perm.gid, msg_perm.mode und msg_qbytes. Alle anderen Schlüssel werden stillschweigend ignoriert. |
Rückgabewert
true bei Erfolg zurück, false wenn das Setzen der Attribute fehlschlägt (z. B. wegen fehlender Rechte oder ungültiger Parameter).Beispiele
Zugriffsrechte einer Warteschlange ändern
<?php
// Warteschlange öffnen oder anlegen
$queue = msg_get_queue(1234);
if ($queue === false) {
die('Konnte Warteschlange nicht öffnen.');
}
// Aktuelle Metadaten auslesen
$stat = msg_stat_queue($queue);
echo 'Alte Rechte: ' . decoct($stat['msg_perm.mode']) . PHP_EOL;
// Rechte auf 0666 setzen, damit alle Prozesse lesen und schreiben dürfen
$result = msg_set_queue($queue, [
'msg_perm.mode' => 0666,
]);
if ($result) {
echo 'Rechte erfolgreich geändert.' . PHP_EOL;
} else {
echo 'Fehler beim Ändern der Rechte.' . PHP_EOL;
}
// Neue Metadaten auslesen
$stat = msg_stat_queue($queue);
echo 'Neue Rechte: ' . decoct($stat['msg_perm.mode']) . PHP_EOL;
?>
Maximale Warteschlangengröße (msg_qbytes) erhöhen
<?php
$key = ftok(__FILE__, 'q');
$queue = msg_get_queue($key, 0600);
if ($queue === false) {
die('Warteschlange konnte nicht geöffnet werden.');
}
// Standardgröße auslesen
$stat = msg_stat_queue($queue);
echo 'Aktuelle msg_qbytes: ' . $stat['msg_qbytes'] . PHP_EOL;
// Puffergröße auf 131072 Bytes erhöhen (root oder CAP_SYS_RESOURCE erforderlich)
$success = msg_set_queue($queue, [
'msg_qbytes' => 131072,
]);
if ($success) {
$stat = msg_stat_queue($queue);
echo 'Neue msg_qbytes: ' . $stat['msg_qbytes'] . PHP_EOL;
} else {
echo 'Erhöhung fehlgeschlagen – möglicherweise fehlende Rechte.' . PHP_EOL;
}
msg_remove_queue($queue);
?>
// Wichtig · Fallstricke
Berechtigungen: Das Ändern von msg_qbytes auf einen Wert oberhalb des systemweiten Limits (/proc/sys/kernel/msgmnb unter Linux) ist in der Regel nur dem Superuser (root) oder Prozessen mit der Capability CAP_SYS_RESOURCE erlaubt. Normale Benutzer können den Wert nur verringern.
Plattformabhängigkeit: Diese Funktion setzt System-V-IPC voraus und ist ausschließlich auf Unix-ähnlichen Betriebssystemen (Linux, macOS, BSD) verfügbar. Unter Windows steht sie nicht zur Verfügung.
Typsicherheit: Seit PHP 8.0 erwartet der erste Parameter ein SysvMessageQueue-Objekt anstelle einer Ressource. Code, der noch eine Ressource weitergibt, muss angepasst werden.