PHP 7.x auf Windows Server 2016 mit IIS installieren, Schritt für Schritt

Installieren wir ein aktuelles PHP (7.2 in diesem Fall) auf einem Windows Server 2016 in 64bit. Da wir den IIS nutzen und ein lokales CGI-Script-Handling einrichten wollen, nutzen wir die NTS (Non Thread Safe) Variante.

Auf die Unterschiede zwischen „Thread Safe“ und „Non Thread Safe“ gehen wir hier nich genauer ein. Schnelle Admins wissen aber:

  • Apache + LoadModule: Thread Safe
  • Apache + FastCGI: Non-Thread Safe
  • IIS: Thread Safe
  • IIS + FastCGI: Non-Thread Safe « Diese Anleitung

Installation von PHP 7.2 auf Windows Serrver 2016 (IIS)

  1. Windows Server 2016 installieren+updaten, IIS und Tools hinzufügen. Die Installation dauert einen Moment. Der Telnet-Client ist nicht zwingend notwendig, aber oft hilfreich.
    PS C:\> Import-Module servermanager
    PS C:\> Install-WindowsFeature -name web-server,web-cgi –IncludeManagementTools
    PS C:\> Add-WindowsFeature telnet-client
  2. PHP herunterladen und installieren: https://windows.php.net/download/. „VC15 x86 Non Thread Safe„. Wir empfehlen 32bit (x86) wegen der Extensions, es gibt noch nicht alle Extensions in x64. Jetzt grade aktuell war PHP in der Version 7.2.9.
  3. Visual C++ 2015 Runtime Update 3 RC (oder auch gleich 2017) in x86 und x64 herunterladen und installieren: https://www.microsoft.com/DE-de/download/details.aspx?id=52685
  4. Die PHP ZIP-Datei  (als Administrator) entpacken (z.B. „%Program Files (x86)%\PHP“)
  5. Kopieren der „php.ini-development“ in die „php.ini“
    PS C:\Program Files (x86)\php-nts-x86> Copy-Item .\php.ini-development .\php.ini2
  6. PHP.ini bearbeiten
    error_log = C:\inetpub\logs\php_errors.log
    max_execution_time = 60
    max_input_time = 90
    memory_limit = 256M
    default_charset = "UTF-8"
    upload_tmp_dir = "C:\inetpub\temp\IIS Temporary Compressed Files"
    upload_max_filesize = 16M
    allow_url_fopen = Off
    extension=php_wincache.dll
  7. Den PHP Interpreter zur System-PATH-Variable hinzufügen
    1. Systemeigenschaften > Erweitert > Umgebungsvariablen > Systemvariablen > Eintrag „Path“ bearbeiten > Neu > <PFAD ZU PHP> einfügen > OK > OK
  8. „Wincache Extensian for PHP“ 2.0 in 64bit herunterladen: https://www.iis.net/downloads/microsoft/wincache-extension (Aktuell: „wincache-2.0.0.8-dev-7.1-nts-vc14-x64.exe“) und in den PHP-Pfad nach \ext entpacken
  9. PHP im IIS konfigurieren
    1. „Internetinformationsdienste (IIS)-Manager“ starten > Links den Server auswählen (oberste Ebene) > „Handlerzuordnungen“ öffnen
    2. „Modulzuordnung hinzufügen“:
      1. Anforderungspfad: *.php
      2. Modul: FastCgiModule
      3. Ausführbare Datei: „C:\Program Files (x86)\<PHP-PFAD>\php-cgi.exe“
      4. Name: PHP
      5. Einschränkungen: „Handler nur bei folgender Zuordnung aufrufen“ auf „Datei oder Ordner“ stellen
  10. Standartdokument(e) hinzufügen
    1. Internetinformationsdienste (IIS)-Manager“ starten > Links den Server auswählen (oberste Ebene) >Standdartdokument
    2. Hinzufügen > „index.php“
  11. Schon fertig 🙂

Installation von Microsoft SQL Server Treibern für PHP unter Windows/IIS

  1. Download der „Microsoft PHP drivers Version for SQL Server“ (aktuell 7.2): https://github.com/Microsoft/msphpsql/releases
  2. Entpacken von x86\php_pdo*.dll nach <PHPPFAD>\ext
  3. Bearbeiten der PHP.ini
    extension=php_sqlsrv_72_nts.dll
  4. Download und Installation der „Microsoft® ODBC Driver 17 for SQL Server“ in 64bit: https://www.microsoft.com/de-DE/download/details.aspx?id=56567
  5. Webserver neustart mit „IISRESET“
  6. Fertig 🙂

Ob das jeweilige Modul geladen werden konnte, lässt sich an der Kommandozeile mit „php -m“ recht gut überprüfen.

Testen der Installation von PHP auf IIS

In C:\inetpub\wwwroot eine Datei „phpinfo.php“ anlegen mit dem folgenden Inhalt:

<?php
    phpinfo();
?>

Und aufrufen von http://<SERVERNAME>/phpinfo.php

 

WSUS Event 7032 („System.Net.Sockets.SocketException — Der angegebene Host ist unbekannt“) nach Umbenennen des Servers

Problem

Nach dem Umbenennen eines WSUS-Servers funktioniert die WSUS-Konsole (das MMC Snap In) nicht mehr richtig. Man bekommt beim Start der „Windows Update“ MMC nur diese wenig hilfreiche Fehlermeldung nur zu sehen „Dieses Snap-in reagiert nicht„.

WSUS - Dieses Snap-In reagiert nichtAußerdem verrät das Ereignisprotokoll dem geneigten Leser noch in etwa folgendes:

Ereignis-ID: 7032

Die WSUS-Verwaltungskonsole konnte über die Remote-API keine Verbindung mit dem WSUS-Server herstellen.

Stellen Sie sicher, dass der Update Services-Dienst, IIS und SQL auf dem Server ausgeführt werden. Starten Sie IIS, SQL und den Update Services-Dienst erneut, wenn das Problem weiterhin besteht.

System.Net.Sockets.SocketException — Der angegebene Host ist unbekannt

Source System

Stack Trace:
bei System.Net.Dns.GetAddrInfo(String name)
bei System.Net.Dns.InternalGetHostByName(String ….

 

Lösung

Die MMC speichert in ihren lokalen Einstellungen unter anderem den (alten) Servernamen. Den, der bei der Installation vergeben wurde. Man löscht alle WSUS-MMC-Settings durch das entfernen dieser Datei:

%USERPROFILE%\appdata\roaming\microsoft\mmc\wsus.*

Danach startet die Konsole wieder wie gewohnt.

Auf (USB-)Datenträger kann nicht geschrieben werden

Wie auch immer das passiert ist: Auf einer nagelneuen USB-Festplatte wollte ein Windows-Server nicht schrieben. Stellt sich raus, das Laufwerk ist schreibgeschützt.

Schreibschutz von Festplatten unter Windows entfernen:

diskpart

als Administrator ausführen und mit

list disk

Die Nummerierte Liste der Laufwerke ausgeben.

select disk #NUMMER

wählt das Laufwerk und

attributes disk clear readonly

entfernt das Schribschutz-Attribut. „Exit“ schliest DISKPART wieder.

Setup Fehler „Office 16 Click-to-Run Extensibility Component 64-bit Registration“

Problem

Es soll ein Office-Tool in einer Retail oder Volumenlizenz auf einem Computer installiert werden, auf dem mal Office installiert war – oder sogar noch ist. Oft meint das Setup mit der Meldung, das ein Office 365 („Click-to-Run“ Setup) installiert gewesen ist. Statt dem Visio- (oder anderem Office-Tool) Setup erscheint die Fehlermeldung:

Office 16 Click-to-Run Extensibility Component 64-bit Registration

Setupfehler

Die 32-Bit-Version von Office kann nicht installiert werden, weil die folgenden 64-Bit Programme auf ihrem Computer gefunden wurden:

Office 16 Click-to-Run Extensibility Component 64-bit Registration

Bitte deinstallieren Sie zuerst alle 64-Bit-Office-Programme, und versuchen Sie dann die erneute Installation der 32-Bit-Version von Office. Wenn Sie stattdessen die 64-Bit-VErsion von Office installieren möchten, führen Sie bitte das Setupprogramm der 64-Bit-Version aus.

Lösung

Wichtig! Microsoft Office 365 (egal ob 32-Bit oder 64-Bit) und Volumen/Retail-Programme wie Vision, Project (egal ob 32-Bit oder 64-Bit) oder ähnliche Software können von Datenträgern (ISO/DVD) nicht zusammen auf einem Windows installiert werden. Es ist uns auch kein zuverlässiger Trick bekannt der dies umgeht; man muss sich für eine Installationsform (Retail/Open/VL oder Online) entscheiden. Dieser Artikel behandelt nur, wie dieser Fehler behoben wird, wenn man Office 365 (vermeintlich) vollständig deinstalliert hat.

  1. Öffne den Ordner %windir%\installer (Start>Ausführen>’installer‘)
  2. Stelle sicher das in den Ordneroptionen alle Dateien eingeblendet sind
  3. Füge die Spalte „Betreff“ im Explorer hinzu (rechte Maustatste auf die Spaltenübersicht>Weitere>Betreff)
  4. Für jede MSI-Datei sieht man in der Betreff-Spalte das Produkt. Sortiere nach dieser Spalte und suche den Namen aus deinem Fehler (z.B. „Office 16 Click-to-Run Extensibility Component“)
  5. Rechte Maustaste auf das MSI und „deinstallieren“

Unter den installierten „Apps“ (in der neuen unseligen modernen Programmübersicht) sowie in der klassischen „Programme&Features“ Übersicht findet man diese Einträge leider nicht.

Windows Server 2016 Remotedesktop (RDS) mit RDWeb/Gateway Authentifizierungsfehler 0x607

Problem

In einer RDS Farm mit RDS Sessionhosts (RDSH), RDS Gateway und/oder RDS Broker Server(n) tritt „auf einmal“ ein Fehler bei der Verbindung mit einem RDS-Client ab Version  auf. Das fällt meistens bei der Anmeldung über das Web-Gateway auf – dort klappt die Authentifizierung, aber die RDP-Sitzung startet nicht. Der Fehler lautet:

„Ein Authentifizierungsfehler ist aufgetreten (Code: 0x607)“

RDS Authentifizierungsfehler 0x607Der Fehler tritt nicht auf, wenn man einen Windows 7 Client (RDP v7.x) verwendet.

Lösung (3 Möglichkeiten)

Schuld ist in der Regel eine Unstimmigkeit bei der Zertifikatsauswahl zwischen Client, Broker und Sitzungshost.

Möglichkeit 1: Sitzungssicherheit für die (in der Regel interne) Verbindung Gateway <-> Sitzungshost auf „niedgrig“ stellen. Dann wird der Fingerprint-Mismatch ignoriert und die Verbindung funktioniert sofort wieder.

Server-Manager > (Links) Remotedesktop-Dienste > Sammlungen/Sammlungsname > Aufgaben/Eigenschaften bearbeiten > Sicherheit > Verschlüsselungsstufe > „niedrig“

Nach einem Klick auf „ok“ klappt das sofort, das Gateway nutzt die Verbindungseinstellungen direkt.

Möglichkeit 2: Die „korrekte“ aber äußerst fummelige Lösung besteht darin, das korrekte RDS-Zertifikat das im RDS-Manager festgelegt wurde auf die RDSH zu verteilen, dort manuell (!) in das Computerkonto zu importieren und den zugehörigen Fingerprint in dem Registry-Schlüssel

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"SSLCertificateSHA1Hash"=hex:<fingerprint>

festzulegen. Nach einem Reboot der Hosts funktioniert die Verbindung meistens. Wie das allerdings klappen soll, wenn man auf einer LAN-Seite interne Zertifikate und auf der WAN-Seite externe nutzt konnte uns bishe rnoch niemand erklären …

Möglichkeit 3: Jemand(tm) hat auf dem Gateway die „Authentifizierung auf Netzwerkebene“ eingeschaltet. Das funktioniert sehr gut im internen Netzwerk, nicht aber wenn sich der Client außerhalb desselben befindet. Sprich: diese Sammlung funktioniert fehlerfrei für interne Nutzer, bei einer externen Anmeldung über RDWeb oder RDP am Gateway tritt der Fehler 0x607 auf.

RDS Fehler 0x607