Signatur
Beschreibung
shm_remove_var() löscht eine zuvor mit shm_put_var() gespeicherte Variable aus dem angegebenen Shared-Memory-Segment. Das Segment selbst bleibt dabei erhalten und kann von anderen Prozessen weiterhin genutzt werden – es wird lediglich der Eintrag für den angegebenen Schlüssel ($key) entfernt.
Die Funktion ist nützlich, wenn mehrere Prozesse über einen gemeinsamen Speicherbereich kommunizieren und einzelne Datensätze gezielt freigegeben oder ungültig gemacht werden sollen, ohne das gesamte Segment zu zerstören. Ein typischer Anwendungsfall sind Inter-Prozess-Kommunikations-Szenarien (IPC) unter Linux/Unix, z. B. in lang laufenden PHP-CLI-Skripten oder Daemon-Prozessen.
Das Shared-Memory-Segment muss zuvor mit shm_attach() geöffnet worden sein, und der übergebene $key muss einer tatsächlich gespeicherten Variable entsprechen. Existiert der Schlüssel nicht, gibt die Funktion false zurück und erzeugt eine Warnung.
Sollen alle Variablen und das Segment selbst entfernt werden, ist stattdessen shm_remove() zu verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $shm Pflicht | SysvSharedMemory | Ein gültiges Shared-Memory-Handle, das zuvor mit shm_attach() erzeugt wurde. |
|
| $key Pflicht | int | Der numerische Schlüssel der Variable, die aus dem Segment entfernt werden soll. Dieser Schlüssel entspricht dem zweiten Argument, das beim Speichern mit shm_put_var() verwendet wurde. |
Rückgabewert
true zurück, wenn die Variable erfolgreich entfernt wurde. Gibt false zurück und erzeugt eine Warnung, wenn der angegebene Schlüssel im Segment nicht existiert.Beispiele
Variable aus Shared Memory entfernen
<?php
// Shared-Memory-Segment öffnen (Schlüssel 0x1234, 1 MB)
$shm = shm_attach(0x1234, 1024 * 1024);
// Zwei Variablen speichern
shm_put_var($shm, 1, 'Hallo Welt');
shm_put_var($shm, 2, ['status' => 'aktiv', 'count' => 42]);
echo shm_get_var($shm, 1); // Hallo Welt
// Variable mit Schlüssel 1 entfernen
$result = shm_remove_var($shm, 1);
var_dump($result); // bool(true)
// Versuch, die gelöschte Variable zu lesen
if (shm_has_var($shm, 1)) {
echo shm_get_var($shm, 1);
} else {
echo 'Variable mit Schlüssel 1 existiert nicht mehr.';
}
// Segment trennen (nicht löschen)
shm_detach($shm);
Fehlerbehandlung bei nicht vorhandenem Schlüssel
<?php
$shm = shm_attach(0xABCD, 512 * 1024);
shm_put_var($shm, 10, 'Testdaten');
// Schlüssel 99 wurde nie gesetzt
$result = @shm_remove_var($shm, 99);
if ($result === false) {
echo 'Fehler: Schlüssel 99 existiert nicht im Shared-Memory-Segment.';
} else {
echo 'Variable erfolgreich entfernt.';
}
shm_remove($shm); // Segment vollständig löschen
// Wichtig · Fallstricke
Plattformabhängigkeit: Shared-Memory-Funktionen auf Basis von System-V-IPC (shm_attach, shm_put_var, shm_remove_var usw.) stehen nur auf Unix-artigen Betriebssystemen zur Verfügung. Unter Windows sind diese Funktionen nicht verfügbar.
Race Conditions: Bei gleichzeitigem Zugriff mehrerer Prozesse auf dasselbe Segment sollte der Zugriff durch Semaphoren (sem_acquire() / sem_release()) synchronisiert werden, um inkonsistente Zustände zu vermeiden.
Ab PHP 8.0 gibt shm_attach() ein SysvSharedMemory-Objekt zurück; in älteren Versionen war es eine Ressource. Die Funktion shm_remove_var() akzeptiert beide Typen entsprechend der PHP-Version.