Installation einer PHP-Erweiterung unter Windows

Unter Windows gibt es zwei Möglichkeiten, eine PHP-Erweiterung zu laden: Entweder sie wird in PHP einkompiliert oder sie wird als DLL geladen. Eine vorkompilierte Erweiterung zu laden ist die einfachste und auch die bevorzugte Methode.

Um eine Erweiterung zu laden, muss sie als .dll-Datei auf dem System vorhanden sein. Alle Erweiterungen werden automatisch und regelmäßig von der PHP-Gruppe kompiliert (bezüglich des Downloads siehe nächster Abschnitt).

Informationen darüber, wie Erweiterungen beim Kompilieren in PHP eingebunden werden, sind in der Dokumentation zum Erstellen aus dem Quellcode zu finden.

Um eine eigenständige Erweiterung (auch DLL-Datei genannt) zu kompilieren, siehe die Dokumentation Erstellen aus dem Quellcode. Wenn die DLL-Datei weder in der PHP-Distribution noch in PECL enthalten ist, muss sie möglicherweise kompiliert werden, bevor die Erweiterung verwendet werden kann.

Wo finde ich eine Erweiterung?

PHP-Erweiterungen heißen normalerweise php_*.dll (wobei der Stern für den Namen der Erweiterung steht) und befinden sich im Ordner PHP\ext.

PHP wird mit den Erweiterungen ausgeliefert, die für die meisten Entwickler am nützlichsten sind. Sie werden als bundled Erweiterungen bezeichnet.

Wenn allerdings die benötigte Funktionalität von keiner der mitgelieferten Erweiterungen zur Verfügung gestellt wird, kann eine solche Erweiterung vielleicht in » PECL gefunden werden. Die PHP Extension Community Library (PECL) ist eine Sammlung von PHP-Erweiterungen, die eine Liste aller bekannten Erweiterungen sowie einen Hosting-Service für das Herunterladen und Entwickeln von PHP-Erweiterungen bereitstellt.

Wenn eine Erweiterung für bestimmte Zwecke entwickelt wurde, kann diese auf PECL zur Verfügung gestellt werden, damit auch andere davon profitieren können, die die gleichen Anforderungen haben. Ein netter Nebeneffekt ist, dass dies eine gute Möglichkeit ist, Feedback, (hoffentlich) Dank, Fehlerberichte und sogar Korrekturen/Patches zu erhalten. Bevor eine Erweiterung zum Hosting in PECL eingereicht wird, sollte » PECL submit gelesen werden.

Welche Erweiterung soll ich herunterladen?

Häufig gibt es mehrere Versionen von einer DLL:

  • Verschiedene Versionsnummern (zumindest die ersten beiden Nummern sollten übereinstimmen)
  • Verschiedene Einstellungen für die Thread-Sicherheit
  • Verschiedene Prozessorarchitekturen (x86, x64, ...)
  • Verschiedene Einstellungen für das Debugging
  • etc.

Es ist zu beachten, dass die Einstellungen der Erweiterung mit den Einstellungen des verwendeten PHP-Programms übereinstimmen sollten. Das folgende PHP-Skript zeigt alle PHP-Einstellungen an:

Beispiel #1 Aufruf der Funktion phpinfo()

<?php
phpinfo
();
?>

Alternativ können Sie Folgendes über die Befehlszeile ausführen:

drive:\path\to\php\executable\php.exe -i

Laden einer Erweiterung

Die übliche Methode, eine PHP-Erweiterung zu laden, besteht darin, sie in die Konfigurationsdatei php.ini einzutragen. Es ist zu beachten, dass bereits viele Erweiterungen in der php.ini enthalten sind, und dass nur das Semikolon entfernt werden muss, um sie zu aktivieren.

Es ist auch zu beachten, dass seit PHP 7.2.0 anstelle des Dateinamens der Erweiterung auch deren Name verwendet werden kann. Da dies unabhängig vom Betriebssystem gilt und insbesondere für Neueinsteiger einfacher ist, ist dies die empfohlene Methode, um die zu ladenden Erweiterungen anzugeben. Dateinamen werden aus Gründen der Kompatibilität mit früheren Versionen weiterhin unterstützt.

;extension=php_extname.dll
extension=php_extname.dll
; Seit PHP 7.2.0 vorzuziehen:
extension=extname
zend_extension=another_extension

Manche Webserver können allerdings etwas verwirrend sein, da sie nicht die php.ini aus der PHP-Distribution verwenden. Um herauszufinden, wo sich die tatsächlich verwendete php.ini befindet, kann der Pfad in phpinfo() gesucht werden:

Configuration File (php.ini) Path  C:\WINDOWS
Loaded Configuration File   C:\Program Files\PHP\8.2\php.ini

Nachdem Sie eine Erweiterung aktiviert haben, speichern Sie die php.ini, starten den Webserver neu und überprüfen die phpinfo() erneut. Die neue Erweiterung sollte nun ihren eigenen Abschnitt haben.

Probleme beheben

Wenn die Erweiterung nicht in phpinfo() erscheint, sollten die Logs überprüft werden, um herauszufinden, wo das Problem liegt.

Wenn PHP auf der Befehlszeile (CLI) verwendet wird, ist der Fehler beim Laden der Erweiterung direkt auf dem Bildschirm sehen.

Wenn PHP über einen Webserver verwendet wird, hängen Ort und Format der Logs von der Software ab. Da dies nichts mit PHP selbst zu tun hat, sollte die Dokumentation des Webservers zu Rate gezogen werden, um die Logs zu finden.

Die häufigsten Ursachen für Probleme sind die Speicherorte der DLL selbst und der DLLs, von denen sie abhängt, der Wert der Einstellung "extension_dir" in der php.ini und falsche Einstellungen beim Kompilieren.

Wenn das Problem auf falsche Einstellungen beim Kompilieren zurückzuführen ist, wurde wahrscheinlich nicht die richtige DLL heruntergeladen. Versuchen Sie, die Erweiterung nochmal mit den richtigen Einstellungen herunterzuladen. Auch hier kann phpinfo() eine große Hilfe sein.

add a note add a note

User Contributed Notes 4 notes

up
1
j dot o dot l dot a dot n at bk dot ru
11 months ago
In order for php to see extensions, it is necessary to specify the root folder when specifying the address to the directory with extensions in php.ini. For example extension_dir = "php/ext"
up
1
ferdnyc at gmail dot com
2 years ago
This is handwaved somewhat in the "Resolving problems" section, but mis-location of (non-extension) DLL files is often a problem when installing PHP extensions on Windows.

Many PHP extensions come with not only the extension DLL, but supplementary DLLs that are required by that extension. (For example, php_luasandbox.dll comes with lua5.1.dll, the lua interpreter it sandboxes.) Those other DLLs should go into the same directory as the php.exe binary, NOT the extension directory.

So, if php_luasandbox.dll is installed at C:\PHP8.1\ext\php_luasandbox.dll, the interpreter would be located at C:\PHP8.1\lua5.1.dll. That allows the PHP binary C:\PHP8.1\php.exe to find those additional DLLs when required.
up
0
bk at kaelberer-aio dot de
1 year ago
In addition to the helpful comments of ferdnyc and dario: A few weeks ago I've set up a new W11 using PHP 8.1. (as a module) with Apache. It was working fine.
Today i wanted to install the PECL-extension php-amqp. This extension comes with two additional files that are said to be placed in PHPs main directory. It worked fine running from the command prompt but with Apache the extension failed with "Unable to load dynamic library 'amqp'".
I tried 100 ways to notate paths in php.ini and http.conf: c:, C:, \, \\, /, ". I also installed a new PHP in the root to get rid of the space in the path. It did not help.
When reading dario's comment i stumbeled across him mentioning "path environment variable". I checked that in Window's settings and I realized, that i had added PHP's path to the USER'S path-settings, but not to the SYSTEM'S path. That is why it worked in the command prompt but not when starting Apache as a service. After adding it there it worked fine.
up
0
dario at 4assistance dot com
1 year ago
On windows, drop your extension's dependencies into a dir of your choice, but outside of your php install. Add that dir to a path environment variable used by your php. Add <extension_name>.dll to your php's extension_dir, and update your php.ini (unless you're simply testing with php's cli).
To Top