shmop_open
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
shmop_open — Erstellt oder öffnet einen gemeinsamen Speicherbereich
Parameter-Liste
key
-
Die System-ID des gemeinsam genutzten Speicherbereichs. Dieser
Parameter kann als Dezimal- oder Hexadezimalzahl übergeben werden.
mode
-
Folgende Flags können benutzt werden:
-
"a" zum Zugriff (access) auf einen gemeinsamen Speicherbereich
(setzt SHM_RDONLY für shmat). Benutzen Sie dieses Flag, wenn Sie
einen bestehenden gemeinsamen Speicherbereich nur zum Lesen öffnen
wollen.
-
"c" zum Erzeugen (create) eines gemeinsamen Speicherbereichs (setzt
IPC_CREATE). Benutzen Sie dieses Flag, wenn Sie einen neuen
gemeinsamen Speicherbereich erzeugen wollen, oder, falls bereits ein
Segment mit derselben ID existiert, zum Öffnen dieses Bereichs für
Lese- und Schreibzugriffe.
-
"w" für Lese- und Schreibzugriffe. Benutzen Sie dieses Flag, wenn
Sie in einen gemeinsamen Speicherbereich schreiben oder daraus lesen
müssen. Das wird meistens der Fall sein.
-
"n" zum Erzeugen eines neuen gemeinsamen Speicherbereichs (setzt
IPC_CREATE|IPC_EXCL). Benutzen Sie dieses Flag, wenn Sie einen neuen
gemeinsames Speicherbereich erzeugen wollen. Falls schon einen
Bereich mit diesem Flag existiert, schlägt die Funktion fehl. Dies
ist aus Sicherheitsgründen nützlich, denn damit können Sie
vermeiden, dass konkurrierende Prozesse ausgenutzt werden.
permissions
-
Die Zugriffsberechtigungen für die gemeinsamen Speicherbereiche sind
dieselben wie für Dateien. Diese Berechtigungen müssen als Oktalwerte
übergeben werden, zum Beispiel 0644
.
size
-
Die Größe des erzeugten gemeinsam genutzten Speicherbereichs in Byte.
Hinweis:
Beachten Sie: der dritte und vierte Parameter sollten mit 0 angegeben
sein, falls Sie einen bereits existierenden Speicherbereich öffnen.
Rückgabewerte
Bei Erfolg gibt shmop_open() eine
Shmop-Instanz zurück, die verwendet werden kann, um
auf den erstellten gemeinsamen Speicherbereich zuzugreifen. Bei einem
Fehler wird false
zurückgegeben.
Fehler/Exceptions
Wenn mode
ungültig ist oder
size
kleiner oder gleich Null ist, wird ein
ValueError ausgelöst. Bei anderen Fehlern wird ein
E_WARNING
ausgegeben.
Beispiele
Beispiel #1 Einen neuen gemeinsamen Speicherbereich erstellen
<?php
$shm_key = ftok(__FILE__, 't');
$shm_id = shmop_open($shm_key, "c", 0644, 100);
?>
In diesem Beispiel wurde ein gemeinsamer Speicherbereich geöffnet. Die
System-ID wurde von der Funktion ftok() zurückgegeben.