Heim > Artikel > Backend-Entwicklung > Nutzung von PHP Shared Memory
php verfügt über zwei Funktionssätze, die gemeinsam genutzten Speicher verwenden: einer ist ein Paket von System V IPC-Funktionen und der andere ist shmop. Für beides ist keine Installation externer Bibliotheken erforderlich. Ersteres kann nur unter Linux verwendet werden, und wenn Sie es verwenden möchten, müssen Sie bei der Installation von PHP die Option –enable-sysvshm hinzufügen, während letzteres sowohl unter Linux als auch unter Windows verwendet werden kann (Systeme nach Win2K, Win98 wird nicht unterstützt). ), aber in Windows kann PHP nur dann ordnungsgemäß funktionieren, wenn es sich im ISAPI-Laufmodus befindet. Bei der Installation von PHP müssen Sie –enable-shmop hinzufügen.
Die Verwendung dieser beiden Funktionssätze ist recht einfach. Weitere Informationen finden Sie im PHP-Handbuch.
1. Shared-Memory-Nutzung von System V:
// Speicherblock erstellen
$key = 12345; // Shared-Memory-Schlüssel, Hinweis: Typ ist int
$memsize = 100; // Größe des gemeinsam genutzten Speichers, Einheitsbyte
$perm = 0666; // Zugriffsberechtigungen für den gemeinsam genutzten Speicher, siehe Linux-Berechtigungen
$var_key = 345; Speicher Der Schlüssel der Variablen, Hinweis: Der Typ ist int
$shmid = shm_attach( $key, $memsize, $perm ); // Einen gemeinsamen Speicher erstellen
shm_put_var( $shmid, $var_key, "abc " ); // Eine Shared-Memory-Variable einfügen, der Schlüssel ist $var_key, der Wert ist „abc“
shm_detach( $shmid ); // Shared-Memory schließen
?>
Führen Sie das obige PHP aus Programm zum Erstellen eines Schlüssels als Der gemeinsame Speicher von 12345 ist 100 Byte groß und enthält eine Variable mit dem Wert „abc“. Geben Sie ipcs in die Linux-Befehlszeile ein, um die erstellten Shared-Memory-Informationen anzuzeigen: 262144 daemon 666 100 0 0
Hinweis: 0×00003039 ist die hexadezimale Form von 12345.
Greifen Sie auf den neu erstellten gemeinsam genutzten Speicher zu und löschen Sie den PHP-Code dieses gemeinsam genutzten Speichers:
// Lesen Sie den Inhalt des Speicherblocks
$shmid = shm_attach( 12345 ); // Mit Schlüssel 12345 auf den gemeinsamen Speicher zugreifen
echo shm_get_var( $shmid, 345 ); // Variable mit Schlüssel 345 im gemeinsamen Speicher ausgeben, abc wird hier angezeigt
shm_remove( $shmid ); Den gemeinsam genutzten Speicher löschen
?> Führen Sie den obigen PHP-Code aus. Abc wird angezeigt und der gemeinsam genutzte Speicher wird gelöscht existiert nicht mehr.
2. Shared-Memory-Nutzung von shmop:
// Speicherblock erstellen
$key = 12345; // Shared-Memory-Schlüssel
$memsize = 100 ; // Größe des gemeinsam genutzten Speichers, Einheitsbyte
$perm = 0666; // Zugriffsberechtigungen für den gemeinsam genutzten Speicher, siehe Linux-Berechtigungen
$offset = 0; // Offset-Adresse des gemeinsam genutzten Speichers, 0 stellt die Startadresse des gemeinsam genutzten Speichers dar
$shmid = shmop_open($key, "c", $perm, $memsize); // Einen gemeinsamen Speicher erstellen, der zweite Parameter c stellt die Erstellung dar
$shm_bytes_geschrieben = shmop_write($shm_id, "abc", 0 ); // „abc“ in den gemeinsam genutzten Speicher schreiben
echo $shm_bytes_scribed; // Länge der in den gemeinsam genutzten Speicher geschriebenen Daten ausgeben, 3 wird hier angezeigt
shmop_close($shm_id); Gemeinsamen Speicher schließen
?> Wir schreiben ein PHP, um auf diesen gemeinsamen Speicher zuzugreifen:
// Den Speicherblock lesen
$shm_id = shmop_open(12345, "w", 0, 0); // Schlüssel öffnen Es handelt sich um einen gemeinsam genutzten Speicher von 12345. Der zweite Parameter w bedeutet Öffnen im Lese-/Schreibmodus und Öffnen des vorhandenen gemeinsam genutzten Speichers. Der dritte und vierte Parameter müssen 0 sein
$shm_data = shmop_read($shm_id, 0, 3 ); // 3 Bytes Daten aus dem gemeinsam genutzten Speicher lesen. Der zweite Parameter ist die Startadresse des gemeinsam genutzten Speichers.
// Gibt den von der vorherigen Funktion zurückgegebenen gemeinsam genutzten Wert aus. Speicherdaten
shmop_delete($shm_id); // Gemeinsam genutzten Speicher löschen
?>
Zusammenfassung:
1. Beide Funktionssätze sind einfach und leicht zu verwenden. Der einzige Vorteil von shmop besteht darin, dass es unter Linux verwendet werden kann. Unter Linux wird empfohlen, den Funktionssatz shm_* zu verwenden Das Einfügen, Aktualisieren und Lesen von Variablen ist recht praktisch, aber Shmop muss die Speicherstruktur des gemeinsam genutzten Speichers selbst planen, was etwas komplizierter ist. Darüber hinaus habe ich im obigen Beispiel direkt die Nummer 12345 als Schlüssel des gemeinsam genutzten Speichers verwendet. Tatsächlich besteht ein Standardansatz darin, die Funktion ftok zu verwenden, um einen Pfad in einen IPC-Schlüssel umzuwandeln. Spezifische Methoden finden Sie im PHP-Handbuch.
2. Wenn bei der Verwendung von shmop die Operation shmop_delete() nach Abschluss der Verwendung nicht ausgeführt wird, treten beim nächsten Schreiben des Shared-Memory-Variablenwerts Probleme auf Bei der nächsten Schreiblänge wird nur die Vorderseite abgedeckt und der überschüssige Inhalt bleibt erhalten. Im Gegenteil, wenn die Länge des vorherigen Schreibvorgangs kürzer ist als die Länge des nächsten Schreibvorgangs, wird der überschüssige Inhalt automatisch an das Ende angehängt.
3. Die für die gemeinsame Nutzung des Speichers erforderlichen Schlüssel und Variablen sind alle int-Typen.
========================
Öffnen Sie die Erstellung von gemeinsamem Speicherplatz.
Syntax: int shm_attach(int key, int [memsize], int [perm]);
Rückgabewert: Ganzzahl
Funktionstyp: Betriebssystem und Umgebung
Inhaltsbeschreibung: Diese Funktion wird verwendet, um Öffnen Oder erstellen Sie einen gemeinsamen Speicherbereich. Der Parameterschlüssel ist der Schlüssel dieses Teils. Der Parameter memsize kann weggelassen werden und stellt den minimal erforderlichen Speicherplatz dar (Einheit ist Bytegruppe). Der Standardwert ist in php3.ini oder sysvshm.init_mem in php.ini konfiguriert. Der Parameter perm kann auch weggelassen werden, um die Nutzungsrechte dieses Speicherplatzes zu bestimmen. Der Standardwert ist 666. Der Rückgabewert ist der ID-Wert des gemeinsam genutzten Speichers, der vom Programm verwendet werden kann.
shm_detach
Brechen Sie die Verknüpfung des gemeinsam genutzten Speicherbereichs ab.
Syntax: int shm_detach(int shm_identifier);
Rückgabewert: Ganzzahl
Funktionstyp: Betriebssystem und Umgebung
Inhaltsbeschreibung: Diese Funktion wird verwendet, um die Verknüpfung mit dem gemeinsam genutzten Speicherbereich zu beenden. Der Parameter shm_identifier ist der Shared-Memory-ID-Wert des zu stoppenden Teils.
shm_remove
Speicherplatz löschen.
Syntax: int shm_remove(int shm_identifier);
Rückgabewert: Ganzzahl
Funktionstyp: Betriebssystem und Umgebung
Inhaltsbeschreibung: Diese Funktion wird verwendet, um alle Daten im gemeinsam genutzten Speicherbereich zu löschen. Der Parameter shm_identifier ist der Shared-Memory-ID-Wert des zu stoppenden Teils.
shm_put_var
Variablen im Speicherbereich hinzufügen oder aktualisieren.
Syntax: int shm_put_var(int shm_identifier, int variable_key, Mixed Variable);
Rückgabewert: Ganzzahl
Funktionstyp: Betriebssystem und Umgebung
Inhaltsbeschreibung: Diese Funktion kann zum Erhöhen oder Ändern verwendet werden der Wert der Speicherplatzvariable. Der Parameter shm_identifier ist der ID-Wert des gemeinsam genutzten Speichers, der hinzugefügt und geändert werden soll. Der Parameter variable_key ist der Variablennamenschlüssel, der hinzugefügt und geändert werden soll. Die Parametervariable ist der Inhalt der Variablen. Der Typ der Variablen kann ein Double, eine Ganzzahl, ein String oder ein Array sein.
shm_get_var
Rufen Sie die im Speicherbereich angegebene Variable ab.
Syntax: Mixed shm_get_var(int shm_identifier, int variable_key);
Rückgabewert: gemischte Datentypen
Funktionstyp: Betriebssystem und Umgebung
Inhaltsbeschreibung: Mit dieser Funktion kann der angegebene Wert abgerufen werden im Speicherplatz Variablenwert. Der Parameter shm_identifier ist der abzurufende Shared-Memory-ID-Wert. Der Parameter variable_key ist der abzurufende Variablennamenschlüssel. Der Rückgabewert ist der Wert des angegebenen Variablenschlüssels.
shm_remove_var
Löschen Sie die angegebene Variable im Speicherbereich.
Syntax: int shm_remove_var(int id, int variable_key);
Rückgabewert: Ganzzahl
Funktionstyp: Betriebssystem und Umgebung
Inhaltsbeschreibung: Mit dieser Funktion kann der angegebene Variablenwert gelöscht werden der Speicherplatz. Der Parameter shm_identifier ist der zu entfernende Shared-Memory-ID-Wert. Der Parameter variable_key ist der zu löschende Variablennamenschlüssel