PHP onder Windows met IIS
Veel mensen maken gebruik van een Apache webserver onder Windows t.b.v. PHP-development. Daarbij worden vaak tools gebruikt als XAMPP en WAMP. Of er wordt gebruik gemaakt van Vagrant (eventueel i.c.m. Homestead) of Docker. Natuurlijk helemaal prima maar in veel gevallen kun je net zo goed (of beter) gebruik maken van de IIS-webserver die aanwezig is in Windows.
Voordelen
- Eenvoudig meerdere PHP versies naast elkaar draaien (je kunt bijvoorbeeld PHP 7.2.8 naast PHP 7.2.9 draaien)
- Snel (geen virtualisatie of mount van filesystem)
- Grafische interface om je webserver te beheren
- Eenvoudig te installeren
Stappenplan
- Installeren IIS en rewrite module
- Opzetten eerste vhost in IIS
- Downloaden PHP
- Configureren PHP
- IIS vhost voorzien van PHP ondersteuning
Aan de slag, installeren IIS en rewrite module
Internet Information Services
IIS is al aanwezig in Windows als onderdeel. Je hoeft deze enkel te activeren.
Als je je computer nog moet herstarten i.v.m. klaar staande Windows Updates is het verstandig dit eerst te doen anders kun je IIS soms niet activeren.
Ga hiervoor naar het klassieke Configuratiescherm.
Klik op Programma's.
Klik op Windows onderdelen in- of uitschakelen.
In de lijst met onderdelen vouw het kopje Internet Information Services open zet een vinkje aan bij Hulpprogramma's voor webbeheer > IIS-beheerconsole
Onder World Wide Web-serivces > Beveiliging kun je in principe alles naar wens uit of aanzetten, ik activeer altijd minimaal Basisverificatie (nodig als je Basic auth via IIS wilt gebruiken, vergelijkbaar met htpasswd van Apache), IP-beveiliging, Ondersteuning voor centrale SSL-certifiaten (nodig voor als je HTTPS wilt inschakkelen), Verificatiesamenvatting en Windows-verificatie.
Onder World Wide Web-serivces > Gezondheid en diagnose hoeft enkel HTTP-Logboekregistratie aan te staan. Onder World Wide Web-serivces > Prestatiefuncties raad ik aan voor development alles uit te zetten.
Onder World Wide Web-serivces > Toepassingsontwikkelingsfuncties activeer je enkel CGI. Verder kun je alles uitlaten tenzij je zelf bepaalde technologien wilt gebruiken. World Wide Web-serivces > Veelvoorkomende HTTP-functies is het handig om Bladeren door mappen, HTTP-fouten, HTTP-omleiding, Standaard document en Statische inhoud in te schakelen.
Klik op OK om de onderdelen te installeren.
Controleer de installatie van IIS door het start menu te openen en iis te typen. Als Beheer van Internet Information Services (IIS) verschijnt is de installatie gelukt.
Opzetten vhost
Host file
Vhosts die we kennen van Apache heten onder IIS Sites. Maak als eerste een verwijzing aan binnen je hosts file. Open hiervoor Kladblok als Administartor.
Open het hosts bestand. Als Kladblok als Administrator is geopend sta je al in C:\Windows\System32 en hoef je enkel in te tikken drivers\etc\hosts.
Voeg onder in het bestand een regel toe met 127.0.0.1 en de hostname waarop de website bereikbaar moet zijn. In mijn geval dev.maartendekeizer.nl. Let op dat je minimaal 1 spatie opneemt tussen het IP adres en de hostname.
IIS
Open nu de IIS beheerconsole via het start menu en klik links je PC naam aan en vervolgens Sites. Klik rechts op Website toevoegen
In het venster wat verschijnt geef je eerst een naam op voor de vhost, dit mag van alles zijn. Voor het overzicht is het handigst als je hier direct de hostname gebruikt.
Klik vervolgens op de knop Selecteren om de toepassingsgroep te selecteren. Kies hier DefaultAppPool.
Sla deze stap niet over ook al is DefaultAppPool de standaard. Anders wordt er als nog een nieuwe app pool aangemaakt. Dit is voor development echter niet nodig.
Vul de overige velden in. Bij fysiek pad de map naar je websites publieke map (meestal public, web, wwwroot of htdocs genoemd). Dit is de map waar je index.html of index.php staat. Bij hostname vul je de hostname van de site in.
Als je al een andere webserver op poort 80 hebt draaien moet je deze eerst uitzetten. Er kunnen niet twee services tegelijkertijd poort 80 claimen.
Testen!
Open je webbrowser en ga naar de hostname. Als je nog geen index.html hebt krijg je een foutmelding. Als je deze wel hebt krijg je deze te zien.
PHP downloaden
Ga naar https://windows.php.net/download/ en kies van de gewenste PHP versie de VC15 x64 Non Thread Safe variant. Download de ZIP package. De oudere versies kun je vinden in het archief.
Deze handleiding gaat verder uit van versie 7.3.8-nts-Win32-VC15-x64. Als je een andere versie download gebruik je natuurlijk deze versiegegevens in onderstaande stappen.
Pak het ZIP bestand uit.
Selecteer een tijdelijk map om de bestanden in uit te pakken. Als je later meerdere versies van PHP op je systeem wilt draaien is het handig de voorgestelde map naam aan te houden.
Open de tijdelijk map en kopieer php.ini-development en hernoem de kopie naar php.ini
Open het nieuwe bestand met Kladblok
Zoek in het bestand naar de setting date.timezone. Deze setting staat nu nog uit (er staat ; voor). Zet de setting aan (haal de ; weg). En vul deze in met je timezone. Voor Nederland kun je Europe/Amsterdam gebruiken. Op php.net is een lijst met andere timezones beschikbaar.
Zoek nu naar de setting extension_dir. Deze setting staat nu nog uit (er staat ; voor). Zet de setting aan (haal de ; weg). En vul deze in met de map waar straks PHP komt te staan en daarbinnen de ext map. In deze blog ga ik straks de map plaatsen onder C:\Program Files, het hele pad wordt dus C:\Program Files\php-7.3.8-nts-Win32-VC15-x64\ext.
Zoek in het bestand naar het lijstje extensions. Activeer de extensions die je wilt gebruiken door de ; voor de regel weg te halen.
Sla nu het bestand op en sluit Kladblok. Kopieer de tijdelijke map.
Ga naar C:\Program Files en plak hier de map. Ga door als Administrator als dit wordt gevraagd.
Open nu de IIS beheerconsole en ga naar de gewenste Site. Klik hier op Handlertoewijzingen.
Klik rechts op Moduletoewijzing toevoegen.
Vul bij Pad van aanvraag in: *.php in. Dit zorgt ervoor dat PHP geactiveerd wordt bij alle PHP bestanden.
Kies bij Module voor FastCgiModule
Vul bij Uitvoerbaar bestand (optioneel): "c:\Program Files\php-7.3.8-nts-Win32-VC15-x64\php-cgi.exe". Let op de dubbele quotes aan het begin en eind, deze zijn verplicht!
Bij Naam mag je in principe zelf een naam geven, het handigste is de naam en PHP versie gebruiken, dus php-7.3.8-nts-Win32-VC15-x64.
Klik op OK
Je krijgt nu een vraag over het aanmaken van de toepassing. Klik Ja
Ga in de IIS Beheerconsole terug naar de Site en klik op Standaarddocument.
Klik rechts op Toevoegen en vul in index.php.
Download en installeer tenslote de laatste Visual C++ redistributal. Dit kan rechtstreek bij Microsoft https://aka.ms/vs/16/release/VC_redist.x64.exe en installeer deze.
Verwijder de index.html uit je website map en plaats een nieuw bestand index.php. Vul deze met:
<?php phpinfo();
Open tenslote de website opneiwu in de webbrowser.
Happy PHP-ing!