PHP 5.2.x auf IIS 6.0 installieren

Die Fangemeinde des PHP-Performance-Blogs wächst langsam aber sicher, was mich sehr freut. Und manchmal bekommt man sogar einen ganzen Beitrag von einem Leser zugeschickt. So getan von Tobias alias tcomic – und vielen Dank auch an dieser Stelle nochmal. Thema ist die Installation von PHP und einen Windows-Server mit dem IIS – und jeder, der PHP schon mal installiert hat (ohne XAMPP 😉 ) weiß, dass das manchmal gar nicht so einfach ist.

Vorraussetzungen

Die Vorraussetzungen für dieses Tutorial sind:

  • ein installierter IIS-Sever Version 6.0 (W2K3)
  • Die neuste PHP Version (stable) als ZIP-File. Downloaden unter: http://www.php.net/downloads.php
  • Systemvorkenntnisse

Hinweis: Dieses Tutorial bezieht sich auf die PHP Version 5.2.3 unter IIS 6.0 auf einem Windows Server 2003 mit SP1 als DC oder Clientserver in einem AD. Weiter werden in diesem Tutorial die Anbindungen von PHP an einen MSSQL- und einen MySQL-Server erläutert.

Wichtig: Bitte unbedingt das ZIP-File verwenden. Mit dem Installer habe ich NUR schlechte Erfahrungen gemacht!

Verzeichnisse anlegen

Zuerst legen wir eine Verzeichnisstruktur für den PHP-Webserver an:
– C:\Server\htdocs
– C:\Server\php5
– C:\Server\includes
– C:\Server\session
– C:\Server\tmp

Diese Verzeichnisse müssen von Hand angelegt werden.

Hinweis: Selbstverständlich können auch andere Verzeichnisstrukturen verwendet werden, allerdings wird dieses Tutorial auf dieser Struktur aufbauen.

PHP Installieren

Das installieren von PHP ist denkbar einfach:

  • Das heruntergeladen ZIP-File wird nach C:\Server\php5 entpackt
  • Die Datei php.ini-dist muss kopiert und in php.ini umbenannt werden (es ist immer sinnvoll die php.ini-dist zu kopieren und nicht nur umzubenennen, da man sonst im Notfall das Original nicht mehr zur Verfügung hat).

Jetzt haben wir PHP an und für sich installiert, lediglich das System weiss noch nichts davon, darum müssen wir noch zwei Umgebungsvariablen richtig setzen:

  • Die Variable Path wird um den Eintrag: C:\Server\php5 ergänzt, damit Windows die eigentlichen PHP DLLs überhaupt finden kann, ohne dass diese in den Systemordner verschoben werden müssen.
  • Die Variable PHPRC muss mit dem Wert C:\Server\php5 neu hinzugefügt werden, damit Windows die php.ini finden kann.

Hinweis: Es ist auch möglich keine Umgebungsvariablen zu setzen, sondern stattdessen alle PHP DLLs nach C:\Windows zu verschieben. Allerdings wäre dies eine sehr unschöne Methode!

PHP INI Einstellungen

Jetzt beginnt ein wichtiger Schritt: Die Konfiguration von PHP selbst und das Laden der Zusatzmodule um eine Verbindung zu einem MSSQL- und / oder MySQL-Server herstellen zu können.

Um die php.ini zu editieren kann diese in einem einfachen Texteditor (Notepad) geöffnet werden.
Grundeinstellungen:

Variable Alte Einstellung Neue Einstellungen
include_path =
(include_path variablen gibt es mehrere, daher ist es sinnvoll die unter „Windows: “\path1;\path2“ zu verwenden)
“.;c:\php\includes” “C:\Server\includes”
extension_dir = “./” “C:\Server\php5\ext”
upload_tmp_dir = “C:\Server\tmp”
session_save_path = “/tmp” “C:\Server\session”

Wichtig: Dies sind lediglich die Grundeinstellungen, welche benötigt werden, damit PHP auf IIS 6.0 läuft, allerdings wurde keinerlei Bezug auf die Sicherheit von PHP genommen!
Daher: Für Testumgebungen ist diese Konfiguration zweckmässig, für den Produktivbetrieb aber keinesfalls!

Dynamic Extensions:

PHP erlaubt es Dynamic Extensions zu laden, um weiter Funktionen zu Verfügung zu stellen wie z.B. Datenbankverbindungen oder Grafikbibliotheken.
Genau genommen ist eine Dynamic Extension nichts anderes als eine zusätzlich Klassenbibliothek.

Für unseren fall benötigen wir lediglich zwei Extensions:

  • php_mssql.dll
  • php_mysql.dll

Geladen werden die Extensions durch das Entfernen des führenden ; unter „Dynamic Extensions“ in der php.ini.

Wichtig: Je nach Anwendung sollten weitere Extensions geladen werden.

AD Benutzer erstellen

Um die IIS-Zugriffsberechtigungen nicht einem Standard User überlassen zu müssen sollte dafür ein eigener Benutzer in der Domäne erstellt werden.
In diesem Beispiel nennen wir den User “Webserver”. Die Einstellungen sollten so sein, dass das Passwort nie abläuft und nicht geändert werden kann.

Hinweis: Wenn Sie keinen AD-Benutzer erstellen möchten, dann lassen Sie dieses Kapitel, das Kapitel „NTFS Berechtigungen setzen“ und den entsprechenden Teil im Kapitel „IIS Einstellungen“ einfach aus. Sicherheitstechnisch ist es allerdings sinnvoll einen eigenen AD-Benutzer zu erstellen!

IIS Einstellungen

So, nun kommen wir zum Kernpunkt unserer Installation – zur IIS Konfiguration.

Konfigurationsschritte:

  • Als erstes erstellen wir eine neue Website mit dem Namen PHP Test.
  • Nun muss PHP als Allowed Webservice Extension hinzugefügt werden.
    • Dies machen wir unter > Webservice Extensions > Add a new Web service Extension.
    • Extension Name: PHP5
    • Required Files: C:\Server\php5\php5isapi.dll
    • Haken setzen bei Set extension status to Allowed.
  • Jetzt kümmern wir uns um die eigentlichen Website Einstellungen unserer PHP Test Website, welche benötigt werden, um die Website PHP-lauffähig zu machen. Dazu gehen wir in die Einstellungen unter > Home Directory
    • Local Path: C:\Server\htdocs
    • Haken setzen bei: Read, Log visits und Index this resource
    • Execute Permissions: Scripts only
    • Bei Configuration .php als bekannte Dateieindung hinzufügen mit Verweis auf : C:\Server\php5\php5isapi.dll
  • Unter > Documents alle Dokumente entfernen und index.html und index.php wieder hinzufügen, damit IIS die index.php erkennt.
  • IIS neu starten!
  • Jetzt sollte IIS in der Lage sein PHP zu parsen!

Sicherheitskonfiguration:
– Unter > Directory Security > Authentification and access control > Edit, bei Enable anonymous access den Haken setzen und den oben erstellten Benutzer eingeben.
– Jetzt versucht IIS mit diesem Benutzer auf die Ressourcen zuzugreifen.

NTFS Berechtigungen setzen

Da unser Benutzer im IIS eingestellt ist, benötigt er noch die entsprechenden Berechtigungen, um überhaupt auf die Ressourcen zugreifen zu können.
Die Berechtigungen für unseren User setzen wir wie folgt:

Pfad Berechtigungen
C:\Server Read, Execute
C:\Server\htdocs Read, Execute, Write, Change*
C:\Server\php5 Read, Execute
C:\Server\includes Read, Execute, Write, Change
C:\Server\session Read, Execute, Write, Change
C:\Server\temp Read, Execute, Write, Change

*Nur benötigt wenn z.B. ein Fileupload o.ä. realisiert werden soll (Sicherheitslücke!!!).

Wichtig: Der Benutzer Everyone bzw. Jeder benötigt in C:\Server\php5 unbedingt Read und Execute Rechte, sonst kann IIS das PHP-Modul nicht laden, da dieses geladen wird, bevor IIS den eingetragenen Benutzer verwendet (!)

MSSQL – Verbindung

Um PHP mit einem Microsoft SQL Server verwenden zu können, muss die Datei ntwdblib.dll aus dem Verzeichnis C:\Server\php5 nach C:Windows/System32 kopiert werden.

Wichtig: Die von PHP mitgelieferte ntwdblib.dll funktioniert of nicht richtig, daher einfach das Web durchsuchen und die Datei neu herunterladen bis es klappt!

Hinweis: IIS muss neu gestartet werden!

MySQL – Verbindung

Die Anbindung von PHP an MySQL Datenbanken ist genau so zu handhaben wie die Anbindung an MSSQL Datenbanken – einfach mit einer anderen DLL.
Kopiert wird hier die Datei libmysql.dll von C:\Server\php5 nach C:Windows/System32

Hinweis: IIS muss neu gestartet werden!

Informatives

PHP auf IIS?
Viele denken, dass PHP zu Apache und ASP zu IIS gehört. Dies ist allerdings nicht unbedingt so und auch performancetechnisch sind keine grossen Unterschiede zwischen PHP auf Apache oder IIS zu bemerken (allerdings nur, wenn PHP per isapi eingebunden wird).

Updaten?
Die PHP Installation sollte regelmässig aktualisiert werden, um Sicherheitslücken frühzeitig zu schliessen. Dazu wird einfach die neuste Version von PHP heruntergeladen und nach C:\Server\php5 entpackt! Aber vorher erst eine Sicherheitskopie erstellen, damit der Server nicht lange off ist, wenn es nicht klappen sollte!

Isapi?
Isapi ist eine Form wie zusätzliche Module zu IIS geladen werden können. Ausgeschrieben bedeutet es: internet service application programmer interface und ermöglicht eine sehr schnelle und effiziente Bearbeitung von Requests, welche IIS-fremde Module ansprechen (in unserem Tutorial natürlich PHP).
Die benötigten Isapi-DLLs werden beim starten von IIS in den RAM geladen. Weiter werden bis zu 14 Threads pro Prozessor für IIS inkl. Isapi zur Verfügung gestellt, welche nach dem Starten in den Leerlauf fallen bis ein Request kommt, diesen abarbeiten, um danach wieder in den Leerlauf zu fallen.
Auf diese Weise hat man immer etwas Last auf dem Webserver, auch wenn er gerade gar nichts macht. Allerdings können ankommende Requsts sofort bearbeitet werden, ohne dass die Zusatzmodule erst noch geladen werden müssen.
Auf diese Weise erhöht man die Antwortzeit des Webservers und die maximale Anzahl an Usern, welche „Gleichzeitig“ online sein können um ca. 900% im Vergleich zu CGI Applikationen (z.B. Perl oder PHP als CGI in IIS integriert)!

Ich hoffe dieses Tutorial hilft euch weiter, wenn ihr mal wieder den Server beschimpft, dass er nicht das tut, was ihr von ihm wollt 😉

Jan hat 152 BeitrÀge geschrieben

20 Kommentare zu “PHP 5.2.x auf IIS 6.0 installieren

  1. tcomic sagt:

    Was es vieleicht noch zu sagen gibt: nach dem Erstellen des AD Benutzers, sollte man sich mit diesem kurz anmelden, ansonst kann es sein, dass dieser irgendwie noch nicht richtig aktiv ist (!)…

    Ich hatte genau dieses Problem gerade gestern!

  2. Michae sagt:

    Ja das Problem mit dem Benutzer habe ich auch. Möchte nicht neuinstallieren. Und anmelden kann ich mich auch nciht mehr, wieldieser inaktiv ist. Irgendwelche Tips?

  3. tcomic sagt:

    @Michae: Wenn der Benutzer inaktiv ist wird das auf keinen Fall klappen, da IIS einen aktiven Benutzer vorraussezt. Der Websurfer-User (Anonymous-Access) verwendet ja gerade eben diesen für den IIS eingerichteten User.
    Selbstverständlch benötigst du keinen AD-User, ein lokaler tut es auch. Und Im Notfall kannst du immernoch den IIS eigenen User verwenden, was ich persönlich allerdings als etwas unschön empfinde.

  4. Jan sagt:

    Dieser Blog, weil es eben WordPress ist. Ich hab dann paar Gegenmaßnahmen eingeleitet und bisher nix derartiges wieder erlebt. Aber ich hab natürlich nicht sämtliche alten Beiträge durchgeschaut.

  5. tcomic sagt:

    Noch ein kleiner Nachtrag zum Artikel:
    Um PHP auf einem W2k3 x64 zum laufen zu bringen, muss dem IIS klar gemacht werden, dass er unter x86 (32-bit) zu laufen hat.

  6. joeroe sagt:

    Danke für diese präzise Beschreibung. Besonders der Abschnitt über die Berechtigungen war für mich die Rettung.

  7. Hallo,

    ich habe das mit dem AD-Benutzer gemacht. Aber nun bekomme ich nur noch 401.3 Zugriff verweigert, egal was ich mache.

    Hab’t ihr eine Idee woran das liegt?

    Gruß Marcus

  8. Johannes Roesler sagt:

    @Marcus Redmann:

    Hallo Marcus,

    der AD-Benutzer braucht Zugriffsrechte auf den Ordner mit dem PHP und und auf den/die Ordner mit den PHP-Seiten. Die Rechte müssen im Prinzip so lauten wie oben unter NTFS-Berechtigungen setzen.
    Im Prinzip heißt: Read und Execute für den PHP-Ordner und Read, Execute und Write (evtl. Change) für den htdocs-Ordner (… und natürlich eventuelle Ordner “drüber”).

  9. Spricht etwas dagegen dass der IIS mit ISAPI-Modul läuft, und gleichzeitig aber bestimmte Wartungs-Skripte über die “geplanten Tasks” mit der CGI-Variante aufgerufen werden? In der PHP-Distri scheint ja immer beides vorhanden zu sein.

    (Habe derzeit nur die CGI-Version, darum kann ich die Frage bisher nicht in der Praxis testen)

    Danke und LG, Paul

  10. bannerweb sagt:

    @Paul Schmidinger: So viel ich weiss spricht da nichts dagegen – ich setzte diese “Mischung” auf diversen Systemen seit einiger Zeit erfolgreich ein…

  11. rob sagt:

    HI, du schreibst:

    Jetzt haben wir PHP an und für sich installiert, lediglich das System weiss noch nichts davon, darum müssen wir noch zwei Umgebungsvariablen richtig setzen:

    Die Variable Path wird um den Eintrag: C:\Server\php5 ergänzt, damit Windows die eigentlichen PHP DLLs überhaupt finden kann, ohne dass diese in den Systemordner verschoben werden müssen.
    Die Variable PHPRC muss mit dem Wert C:\Server\php5 neu hinzugefügt werden, damit Windows die php.ini finden kann.

    Meine Frage: Wo setze ich diese Variablen denn? In welcher Datei bzw. … ?

    Danke!

  12. Götz sagt:

    Ideal! Ich bin absoluter MS SQL und ASP Programmierer und habe mich mit PHP bis jetzt nur sehr oberflächlich beschäftigt mangels eines PHP Parsers. Das wird sich nun ändern! Ich bin der Anleitung Schritt für Schritt gefolgt (gut erklärt) und es klappte auf Anhieb. Danke!

Eine Antwort schreiben

Ihre E-Mail-Adresse wird nicht veröffentlicht. Benötigte Felder sind markiert mit *

You may use these HTML tags and attributes: <a href=""> <blockquote cite=""> <pre lang=""> <b> <strong> <i> <em>