Start · Sprachen · PHP · Referenz · shmop_size

shmop_size

Funktion

Gibt die Größe (in Bytes) eines geöffneten gemeinsamen Speicherbereichs (<code>Shmop</code>) zurück.

seit PHP 5.0.0 Kategorie: misc

Signatur

shmop_size(Shmop $shmop): int

Beschreibung

shmop_size() ermittelt die Gesamtgröße eines gemeinsamen Speicherbereichs (Shared Memory), der zuvor mit shmop_open() geöffnet oder angelegt wurde. Der Rückgabewert gibt die Anzahl der Bytes an, die für diesen Speicherbereich reserviert sind.

Diese Funktion ist besonders nützlich, wenn der Speicherbereich von einem anderen Prozess angelegt wurde und die ursprüngliche Größe nicht bekannt ist. Mit der zurückgegebenen Größe lässt sich beispielsweise sicherstellen, dass ein shmop_read()-Aufruf nicht über das Ende des Segments hinausliest.

Seit PHP 8.0 wird anstelle eines Ressource-Handles ein Shmop-Objekt verwendet. Die Funktion gehört zur Shared-Memory-Erweiterung (shmop), die auf Unix/Linux-Systemen über POSIX-Shared-Memory und auf Windows über die entsprechenden API-Aufrufe implementiert ist.

Parameter

Name Typ Default Beschreibung
$shmop Pflicht Shmop Ein gültiges Shmop-Objekt, das von shmop_open() zurückgegeben wurde.

Rückgabewert

Typ
int
Beschreibung
Die Größe des gemeinsamen Speicherbereichs in Bytes als positive ganze Zahl.

Beispiele

Größe eines neu angelegten Shared-Memory-Segments ermitteln

<?php
// Shared-Memory-Segment anlegen: Key 0x1234, Größe 1024 Byte
$shmop = shmop_open(0x1234, 'c', 0644, 1024);

if ($shmop === false) {
    die('Shared Memory konnte nicht geöffnet werden.');
}

$size = shmop_size($shmop);
echo "Größe des Shared-Memory-Segments: {$size} Bytes\n";

shmop_close($shmop);
Größe des Shared-Memory-Segments: 1024 Bytes

Sicheres Lesen: Größe prüfen vor shmop_read

<?php
// Vorhandenes Segment (von einem anderen Prozess erstellt) öffnen
$shmop = shmop_open(0x1234, 'a', 0, 0);

if ($shmop === false) {
    die('Segment nicht gefunden oder kein Zugriff.');
}

$size = shmop_size($shmop);
echo "Segmentgröße: {$size} Bytes\n";

// Gesamten Inhalt sicher auslesen
$data = shmop_read($shmop, 0, $size);
echo "Gelesene Daten: " . rtrim($data, "\0") . "\n";

shmop_close($shmop);
Segmentgröße: 1024 Bytes Gelesene Daten: Hallo Shared Memory

// Wichtig · Fallstricke

Versionshinweis: Bis PHP 7.x wurde ein Ressource-Handle übergeben; ab PHP 8.0 erwartet die Funktion ein Shmop-Objekt. Bestehender Code, der mit resource-Handles arbeitet, muss entsprechend angepasst werden.

Plattformhinweis: Die shmop-Erweiterung muss beim Kompilieren von PHP aktiviert sein (--enable-shmop) oder als dynamische Erweiterung geladen werden. Auf manchen Shared-Hosting-Umgebungen ist sie nicht verfügbar.

Segmentgröße nicht verwechseln: Die Größe gibt den beim Anlegen reservierten Speicher an – nicht die tatsächlich beschriebene Datenmenge. Nicht beschriebene Bereiche enthalten typischerweise Null-Bytes (\0).