Signatur
Beschreibung
COMPersistHelper ist eine Hilfsklasse aus der PHP-COM-Erweiterung, die die Arbeit mit COM-Objekten vereinfacht, die Persistenz-Interfaces implementieren (z. B. IPersistStream, IPersistStreamInit oder IPersistFile). Sie vermittelt zwischen der COM-Welt und PHPs Dateisystem-Sicherheitsmechanismen wie open_basedir sowie dem PHP-Stream-System.
Das Problem ohne diese Hilfsklasse: Wenn ein COM-Objekt Daten direkt in eine Datei schreiben oder lesen möchte, kennt es PHPs open_basedir-Restriktionen nicht und umgeht sie potenziell. COMPersistHelper leitet Datei- und Stream-Operationen über PHPs eigene Mechanismen um, sodass Sicherheitsrichtlinien gewahrt bleiben.
Die Klasse wird typischerweise instanziiert, indem eine COM-Objekt-Instanz übergeben wird, die ein unterstütztes Persistenz-Interface implementiert. Anschließend können Methoden wie SaveToFile(), LoadFromFile(), SaveToStream() oder LoadFromStream() aufgerufen werden, um COM-Objektzustände sicher zu speichern und wiederherzustellen.
Diese Klasse ist vor allem in Windows-Umgebungen relevant, in denen PHP COM-Komponenten (z. B. ActiveX-Steuerelemente, Office-Automation-Objekte) nutzt und dabei die serverseitigen Sicherheitsrichtlinien einhalten muss.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $variant Pflicht | variant|object | Ein COM-Objekt, das mindestens eines der unterstützten Persistenz-Interfaces (IPersistFile, IPersistStream oder IPersistStreamInit) implementiert. |
Rückgabewert
Beispiele
COM-Objekt in Datei speichern und laden
<?php
// Beispiel: Ein COM-Objekt, das IPersistFile implementiert,
// wird über COMPersistHelper gespeichert und geladen.
// COM-Objekt instanziieren (Beispiel: ein fiktives ActiveX-Objekt)
$com = new COM('Some.PersistableObject');
// COMPersistHelper als Wrapper erzeugen
$helper = new COMPersistHelper($com);
// Zustand des COM-Objekts in eine Datei speichern
// (Pfad wird über PHPs open_basedir validiert)
$helper->SaveToFile('C:\\temp\\com_state.dat');
echo "COM-Objekt erfolgreich gespeichert." . PHP_EOL;
// Zustand aus der Datei wiederherstellen
$helper->LoadFromFile('C:\\temp\\com_state.dat');
echo "COM-Objekt erfolgreich geladen." . PHP_EOL;
?>
COM-Objektzustand über PHP-Stream speichern
<?php
// Zustand eines COM-Objekts in einen PHP-Stream schreiben
$com = new COM('Some.PersistableStreamObject');
$helper = new COMPersistHelper($com);
// PHP-Stream öffnen (z. B. temporäre Datei)
$stream = fopen('php://temp', 'r+');
// Zustand in den Stream persistieren
$helper->SaveToStream($stream);
// Stream zurückspulen und Inhalt lesen
rewind($stream);
$data = stream_get_contents($stream);
echo "Gespeicherte Bytes: " . strlen($data) . PHP_EOL;
fclose($stream);
?>
// Wichtig · Fallstricke
Plattformabhängigkeit: COMPersistHelper steht ausschließlich unter Windows zur Verfügung, da es auf der COM-Erweiterung (ext/com_dotnet) basiert. PHP muss mit --enable-com-dotnet kompiliert oder die Erweiterung muss geladen sein.
Sicherheit: Die Klasse wurde explizit entwickelt, um zu verhindern, dass COM-Objekte open_basedir-Beschränkungen umgehen. Ohne diesen Helper könnten COM-Objekte auf Dateipfade außerhalb des erlaubten Verzeichnisses zugreifen. Bei produktiven Anwendungen sollte open_basedir immer konfiguriert sein.
Voraussetzung: Das übergebene COM-Objekt muss tatsächlich eines der unterstützten Persistenz-Interfaces implementieren. Andernfalls schlägt die Instanziierung oder der jeweilige Methoden-Aufruf mit einem COM-Fehler fehl.
Dokumentation: Die offizielle PHP-Dokumentation zu dieser Klasse ist spärlich. Beim Einsatz in komplexen Szenarien empfiehlt sich ein Blick in den PHP-Quellcode (ext/com_dotnet/com_persist.c).