PHP8 im IIS unter Windows 2019 einrichten

php logo11

Fragt nicht warum ich PHP8 in einem IIS unter Winows 2019 zum Laufen bringen möchte. Es ist zum Glück nur eine Intranet-Anwendung die ich für mich bzw. meine Kollegen über die letzen Jahre geschrieben habe. Für Webserver im Internet würde ich doch eher PHP8 unter Apache oder NGINX einrichten, da ich auch zu denen gehöre die davon überzeugt sind, dass ein IIS für das Internet nicht die beste Wahl ist. Auch wenn sich die Sicherheit vom IIS bzw. WIndows-Server in den letzten Jahren sicherlich schon gebessert hat. Natürlich könnte ich auch eine Apache über Apachefriends/XAMPP auf dem Windows Server einrichten, doch habt ihr schon mal versucht, die Windows Authentifizierung (mit Single-Sign-On) mit AD-Anbindung unter dem Apache einzurichten?

Meine kleine Intranet-Anwendung lief bisher unter der letzten PHP 7.4 Version und da der bisherige Server abgelöst werden soll, kann man auch gleich auf die neuste PHP-Version umstellen und den viel geprädigten Performanceschub von PHP8 mitnehmen.

IIS unter Windows Server 2019 installieren

Als Freund der Konsole gebe ich euch gleich den Powershell-String mit, damit ihr keine Zeit beim Beglücken des „Server Managers -> Add Roles & Features“ vertrödelt.

Install-WindowsFeature -Name Web-Server,web-cgi,Web-Mgmt-Tools

PHP 8 in dem IIS als FAST-CGI einbinden

Als erstes laden wir die aktuellsten PHP8 Files von php.net -> Downloads -> Current stable -> Windows Downloads herunter.

Download PHP 8.0.1 https://windows.php.net/downloads/releases/php-8.0.1-Win32-vs16-x64.zip

Dabei solltet ihr euch entscheiden ob ihr PHP8 mit Thread Safe oder Ohne nutzen wollt. Worin nun die Unterschiede zwischen Thread Safe und Non-Thread Safe liegen, könnt ihr auf den PHP.net Seiten gut nachlesen.

Natürlich könnte man auch noch zwischen 64bit oder 32bit/x86 entscheiden. Wer aber PHP8 mit IIS auf einen Windows 2019 Server (64bit System) betreibt, sollte sich ganz klar für die 64 bit Version entscheiden um die Vorzüge und Performance-Vorteile nutzen zu können.

Ist der Download abgeschlossen, entpackt ihr die Zip-Datei und verschiebt den gesamten Ordner nach „C:\Program Files\php-8.0.1-Win32-vs16-x64“. Natürlich könnt ihr PHP auch nach C:\PHP oder anderen Ordner kopieren. Das Obliegt euch. Ich persönlich habe auch gerne die Version im Ordnernamen, damit ich später beim Testen zwischen den Versionen besser unterscheiden kann.

Handler Mapping im IIS anlegen

Nun startet den „Internet Information Server Manager“ (IIS Manager) aus dem Server Manager und legt ein neues „Handler Mapping“ an. Wie ihr seht, schreibe ich auch hier die Version von PHP mit rein.

Standard Dokument index.php im IIS

Damit der IIS auch die index.php verarbeitet bzw. die Webseite auch ohne index.php aufgerufen werden kann, muss noch ein weiterer Eintrag unter „Standard Dokument“ gemacht werden.

MySQL Extension laden

Es gibt bestimmt nicht viele Webserver auf den PHP ohne MySQL Unterstützung läuft. So müssen nun zwei Dinge gemacht werden:

  • PHP.ini-production in PHP.ini umbenennen
  • MySQL Modul laden

Dazu wechselt ihr in den Ordner in dem Ihr PHP hin verhschoben habt. In meinem Fall nach „C:\Program Files\php-8.0.1-Win32-vs16-x64“

Dort benennt ihr nun die php.ini-development oder php.ini-production um in php.ini. Im Anschluss öffnet ihr die PHP.ini und sucht nach „mysqli“. In der Regel landet ihr dann gleich an der richtigen Stelle, nämlich „;extension=mysqli“. So und hier gibt es eine Abweichende Konfiguration zwischen Windows und Linux. Ihr müsst den vollen Namen der Erweiterung die unterhalb von „C:\Program Files\php-8.0.1-Win32-vs16-x64\ext“ zu finden ist rein schreiben und damit ihr nicht jedes Mal den absoluten Pfad angeben müsst, solltet ihr auch noch die „extensions_dir=ext“ aktivieren in dem Ihr das Semikolon „;“ vor der Zeit entfernt. Sind die Änderungen gemacht, Datei speichern und in der CMD via „iisreset“ der IIS neustarten.

PHP8 auf dem IIS testen

Zu guterletzt muss natürlich noch getestet werden ob alles korrekt eingerichtet und übernommen wurde. Dazu legt ihr in „C:\inetpub\wwwroot“ eine Datei namens „index.php“ oder meinetwegen auch „test.php“ an. In die Datei schreibt ihr folgenden Testbefehl rein.

<?php echo phpinfo();?>

Anschließend ruft ihr die Datei über den Browser auf:

http://localhost/index.php

Wenn es wie folgt ausschaut, hat alles geklappt!

weitere Beiträge über Windows Server