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 3 notes

up
5
peteb at airpost dot net
3 years ago
This is not really true all the time:

"However, some web servers are confusing because they do not use the php.ini located alongside your PHP executable. To find out where your actual php.ini resides, look for its path in phpinfo():

Configuration File (php.ini) Path  C:\WINDOWS"

Ignore the path being C:\windows
This issue goes back over a decade. 
Php is hardwired to display "C:\windows" even though there is not any php.ini at that location. 
Moving php.ini to C:\windows will accomplish nothing. 
I have seen many posts about folks complaining that they can't get it to stop displaying "Path C:\windows".  I have not seen anything posted that fixes this and a few posts that claim it is hardwired to display this. 
I have both working and broken php setups on various windows machines and they all say this same "c:\windows" even though my php.ini file is in c:\php. 
I know apache is using the file c:\php\php.ini and not the windows directory because there is no php.ini in windows directory and changes to my php.ini file work fine even though the info from phpinfo is wrong on this line.
up
-2
Robert Dinion
5 years ago
For Windows try setting the  extension_dir set to a complete path if you have an error.
Only having
extension_dir ="ext"
did not work for me.
The Apache error log showed it looking for ext\\<extension.dll> and unable to find it.
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "C:\php\ext"
up
-4
Chris
5 years ago
In xampp. After removing the semicolon from the php.ini file, I had to stop the the apache server from the xampp GUI and restart it. Then I used the following code to view all the loaded extentions and my extension was shown there as well.

print_r(get_loaded_extensions());

Hope this helps!
To Top