Update 14. července 2006: Některé formulace byly po komentářích Viléma Málka upraveny tak, aby článek nevyzníval, že PHP nelze na IIS provozovat jako ISAPI filtr. Mně se sice takto PHP rozchodit nepodařilo, ale nejspíš se jednalo o problémy konkrétní konstelace a ne o obecné překážky.
Článek popisuje instalaci PHP 5.1 a MySQL 4.1 na Windows 2003 Serveru R2. PHP bude nainstalováno jako CGI modul.
Co budete potřebovat
- Windows 2003 R2, 180-ti denní trial, obsahuje IIS 6
- PHP 5.1, ZIP distribuci i installer
- MySQL 4.1 (už sice byla vydána verze 5.0 a 5.1 se chystá, nicméně hostingy budou ještě nějakou chvíli konzervativní a 4.1 bude aktuálně používaná verze)
Pokud si chcete instalaci vyzkoušet nanečisto, doporučuji stáhnout VMWare Workstation (použít by šel i Microsoft Virtual Server, který je zdarma) a instalovat ve virtuálním, zcela izolovaném prostředí. Předejdete tak nechtěným zásahům do ostrého operačního systému.
CGI vs. ISAPI
Tento článek popisuje instalaci PHP jako CGI modulu, což má své výhody i nevýhody. Někdy se uvádí, že ISAPI je rychlejší, ale na druhou stranu méně stabilní a náchylnější k chybám. Uslyšíte i názory vyvracející jak první, tak druhou část předchozí věty, takže ve výsledku bude záležet spíš na tom, pro jakou cestu se rozhodnete vy. Důležité je pouze vědět to, že mezi CGI a ISAPI existují rozdíly a z praktických důvodů byste se tak měli pokusit o instalaci té verze, která nakonec poběží na hostingu.
Proč je popisována instalace CGI a ne ISAPI?
- Protože instalace PHP jako ISAPI filtru je dokonale popsána v článku Petera Guye.
- Protože i přesto, že jsem dodržel veškeré pokyny v Peterových instrukcích (aspoň jsem o tom přesvědčen), instalace se nezdařila (PHP odmítalo brát v úvahu uživatelsky upravený php.ini a neustále používalo výchozí hodnoty).
Instalace
Instalace Windows 2003 Serveru i IIS 6.0 je snadná klikací záležitost, ale jak už to tak chodí, PHP i MySQL vyžadují poměrně velkou pozornost, protože drobné opomenutí zdánlivé maličkosti může způsobit celkovou nefunkčnost.
Nejdřív pár odkazů. Základní instrukce poskytuje oficiální manuál a pokud potřebujete opravdu dlouhý, podrobný a kvalitně zpracovaný návod na instalaci PHP na IIS 6 jako ISAPI filtr, doporučuji již zmíněný návod Petera Guye.
- Nainstalujte PHP. Nejjednodušší je použít instalátor, ale
i manuální instalace je snadná – v podstatě stačí PHP
rozbalit do C:\PHP a provést pár dobře mířených zásahů do IIS.
Při manuální instalaci však musíte dávat pozor na některé detaily
(např. správné nastavení php.ini), proto popíšu hybridní postup –
nejdřív instalátor, potom ruční konfigurace.
- Spusťte instalátor a nechte se vést průvodcem. Většina věcí je defaultně nastavena vyhovujícím způsobem. Další postup předpokládá, že jste PHP nainstalovali do adresáře C:\PHP.
- Abyste měli k dispozici všechny funkce PHP ze standardní binární distribuce (instalátor obsahuje nutné minimum), nakopírujte do adresáře C:\PHP soubory ze ZIP balíku, který jste stáhli z php.net.
- Nyní je potřeba „dokonfigurovat“ IIS, instalátor bohužel vše automaticky nezvládne. Spusťte IIS konzoli: Start > All Programs > Administrative Tools > IIS
- Přejděte na záložku Web Service Extensions a klikněte na odkaz Add a new Web service extension…. Extension name zvolte podle vlastní chuti, např. PHP CGI a do Required files přidejte odkaz na C:\PHP\php-cgi.exe. Nezpomeňte zaškrtnout Set extension status to Allowed. Tento krok by instalátor měl dělat automaticky, ale asi není dobře připraven na novou verzi IIS.
- Pravým tlačítkem klikněte na Web Sites, vyberte
Properties, přejděte na záložku Home Directory a
zkontrolujte následující:
- ve spodní části musí být Execute permissions nastaveno aspoň na Scripts only
- když klepnete na Configuration…, na záložce Mappings by měla být vytvořena přípona .php s mapováním na soubor C:\PHP\php-cgi.exe
- vraťte se na hlavní dialog Web Site Properties a pokud chcete automaticky spouštět soubory index.php, přejděte na záložku Documents a přidejte index.php
- nyní jste pro správný běh připravili PHP soubory, ale pokud budete
chtít, aby vám dobře fungovaly i statické soubory typu
http://localhost/index.htm
, musíte na záložce Home directory zaškrtnou minimálně Read práva pro danou Local path (typicky C:\InetPub\wwwroot)
- Abyste nemuseli nic kopírovat do C:\WINDOWS\System32, přidejte do
proměnné prostředí PATH řetězec C:\php – systémové proměnné
najdete ve vlastnostech tohoto počítače na záložce Advanced pod tlačítkem
„Environment Variables“. Pokud chcete, aby se php.ini načítalo ze
složky C:\PHP a nikoliv z C:\WINDOWS, přidejte ještě novou proměnnou
prostředí s názvem
PHPRC
a s hodnotouC:\PHP
. Nyní restartujte počítač, jinak se změny neprojeví. - Teď je ještě potřeba nastavit práva. Pokud se počítač jmenuje WIN03, je klíčovým uživatelem IUSR_WIN03. Přidejte mu oprávnění na adresář C:\PHP, C:\PHP\ext a všechny soubory v těchto složkách. Toto je velmi důležité. Stejný uživatel by měl mít rovněž správná oprávnění nastavena na soubory a složky pod wwwrootem.
- Proveďte případné žádané úpravy v php.ini (pokud jste to ještě neučinili, přesuňte soubor z C:\WINDOWS do C:\PHP). Já jsem si tento soubor vyžádal od svého webhostera, abych mohl mít lokál nastavený co nejpodobněji jako na serveru.
- Tak, teď by mělo být PHP nainstalováno. Je na čase vytvořit drobný skript, který bude obsahovat aspoň funkce session_start() a phpinfo(). Umistěte ho do C:\Inetpub\wwwroot, opět by na něj měl mít nastavena práva uživatel IUSR_Win03 a soubor zobrazte v prohlížeči. Pokud jste postupovali přesně podle pokynů, neměl by nastat žádný problém. Hlavně zkontrolujte, jestli se vám dobře načetlo php.ini (phpinfo() tuto informaci vypisuje na šestém řádku) a jestli se v adresáři vyhrazeném pro session data (nastavuje se v php.ini) objevil nějaký soubor (klidně s délkou nula bajtů).
- Instalace MySQL je opět velmi snadná – v průvodci opět můžete většinou nechat defaultní hodnoty.
- Teď už jen propojit PHP s MySQL. Instalace extensions je popsaná v manuálu, v podstatě se jedná o malý zásah do php.ini – zkontrolujte, že máte dobře nastavený extension_dir a že před extension=php_mysql.dll není středník. MySQL knihovna je závislá na souboru libmysql.dll, který najdete v C:\PHP, proto je životně důležité, aby cesta C:\PHP byla součástí proměnné prostředí PATH a aby měl soubor libmysql.dll měl nastavena práva pro uživatele IUSR_Win03. Funkčnost prověříte přidáním funkce mysql_connect() do testovacího skriptu.
Tak, a je to.
Pár poznámek závěrem
- Při správném postupu není nutno nic kopírovat do C:\WINDOWS (ani php.ini, ani DLL knihovny). Klíčem k úspěchu je PATH=„…;C:\php“.
- Jakékoliv problémy velmi pravděpodobně způsobuje problém s nastavenými právy. Doporučuji všechny soubory, ať už .php skirpty nebo EXE a DLL v C:\PHP zpřístupnit pro čtení a pro vykonávání uživateli IUSR_*.
- Pokud narazíte na chybu „CGI Error; The specified CGI application misbehaved by not returning a complete set of HTTP headers.“, je pravděpodobně chyba v php.ini souboru. Viz CGI users must set the cgi.force_redirect PHP directive to 0 inside php.ini.
- Druhá věc, která mě delší dobu trápila, byla neschopnost PHP
správně najít php.ini. U CGI modulu by mělo jít umístění php.ini
určit pomocí proměnné prostředí
PHPRC
, případně přidáním klíčeHKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath = C:\PHP
(jednoduché zpětné lomítko) do registrů.
Přeji hodně štěstí při instalaci. Občas ho budete potřebovat :)
mod rewrite?
PHP na IIS je hezká věc, ale jak na IIS nahradit mod_rewrite? ISAPI filtry co jsem našel byly všechny drahé…