Signatur
Beschreibung
com_load_typelib() lädt eine COM-Typbibliothek (Typelib) und macht alle darin definierten Konstanten als PHP-Konstanten verfügbar. Dies ist nützlich, wenn man mit COM-Objekten arbeitet, die bestimmte vorzeichenbehaftete Ganzzahl-Konstanten (z. B. Flags oder Enumerationen) aus einer Typelib benötigen, ohne diese manuell definieren zu müssen.
Der Parameter $typelib_name kann entweder ein vollständiger Pfad zu einer .tlb-Datei, ein Programmatic Identifier (ProgID), eine CLSID oder ein Typelib-Name aus der Windows-Registry sein. PHP sucht in der Registry nach dem passenden Eintrag, wenn kein direkter Pfad angegeben wird.
Durch das Laden der Typelib werden alle enthaltenen Konstanten als PHP-Konstanten mit globalem Gültigkeitsbereich definiert, sodass sie direkt verwendet werden können (z. B. wdFormatDocument für Microsoft Word). Der Parameter $case_insensitive steuert, ob die Konstantennamen ohne Rücksicht auf Groß-/Kleinschreibung registriert werden.
Diese Funktion ist ausschließlich unter Windows verfügbar und setzt die PHP-COM-Extension voraus. Sie wird typischerweise einmal beim Start eines Skripts aufgerufen, das intensiv mit einem bestimmten COM-Objekt arbeitet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $typelib_name Pflicht | string | Name oder Pfad der zu ladenden Typelib. Kann ein Datei-Pfad zu einer .tlb-Datei, eine ProgID, eine CLSID oder ein in der Windows-Registry eingetragener Typelib-Name sein. |
|
| $case_insensitive | bool | true | Legt fest, ob die Konstantennamen aus der Typelib ohne Rücksicht auf Groß-/Kleinschreibung registriert werden sollen (true) oder exakt so, wie sie in der Typelib definiert sind (false). |
Rückgabewert
true zurück, wenn die Typelib erfolgreich geladen und die Konstanten registriert wurden, andernfalls false.Beispiele
Microsoft Word Typelib laden und Konstante verwenden
<?php
// Typelib für Microsoft Word laden
if (com_load_typelib('Word.Application')) {
// Konstanten aus der Typelib stehen jetzt zur Verfügung
$word = new COM('Word.Application');
$word->Visible = false;
$doc = $word->Documents->Add();
$doc->SaveAs('C:\\Temp\\test.doc', wdFormatDocument); // wdFormatDocument aus der Typelib
$doc->Close();
$word->Quit();
echo 'Dokument erfolgreich gespeichert.';
} else {
echo 'Typelib konnte nicht geladen werden.';
}
Typelib über direkten Pfad laden
<?php
// Typelib direkt über Dateipfad laden
$loaded = com_load_typelib('C:\\Windows\\System32\\stdole2.tlb', false);
if ($loaded) {
echo 'Typelib wurde erfolgreich geladen (Gross-/Kleinschreibung beachtet).';
} else {
echo 'Fehler beim Laden der Typelib.';
}
// Wichtig · Fallstricke
Nur Windows: com_load_typelib() ist ausschließlich unter Windows mit aktivierter COM-Extension (extension=php_com_dotnet.dll in der php.ini) verfügbar. Auf anderen Betriebssystemen steht die Funktion nicht zur Verfügung.
Alternative via php.ini: Typelibs können auch dauerhaft in der php.ini über die Direktive com.typelib_file vorgeladen werden, sodass ein manueller Aufruf von com_load_typelib() im Skript entfällt.
Namenskonflikte: Wenn eine geladene Typelib Konstanten definiert, die mit bereits existierenden PHP-Konstanten oder anderen geladenen Typelib-Konstanten kollidieren, kann es zu unvorhergesehenem Verhalten kommen. Es empfiehlt sich, nur die tatsächlich benötigten Typelibs zu laden.