PHP na IIS a další postřehy Michal Till
Přednášející Konzultant a vývojář – webové technologie Oblíbené: – Zend Framwork – Client-side RIA : Ext, YUI Magazín Connect – internet, vývoj softwaru
Agenda PHP na IIS pomocí nového FastCGI handleru – Thread safety – „tím to všechno začalo“ – Konfigurace Integrace: „nakopíruji to a nic“ – WordPress a spol. – častý problém s URL rewritingem Nějaké další postřehy
Agenda PHP na IIS pomocí nového FastCGI handleru – Thread safety – „tím to všechno začalo“ – Konfigurace Integrace: „nakopíruji to a nic“ – WordPress a spol. – častý problém s URL rewritingem Nějaké další postřehy
Thread safe vs. Non thread safe PHP Windows vlákna Linux procesy IIS jako CGI: navrženo na procesy, běží na vláknech => pomalé IIS jako ISAPI: rychlé, ale pro PHP nestandardní, rozdíly ignorovány programátory, docházelo i k pádu ISAPI modulu (hlavně v minulosti) …zbylo pomalé CGI
Thread safe vs. Non thread safe PHP (2) Co s tím – je třeba se zbavit režie CGI (a zachovat kompatibilitu) Recyklace toho již bylo vykonáno a to pomocí – Op-code cache (akcelerátory) – Právě FastCGI Ale ty thready: problém synchronizace (thread safety) Prostě se na to vykašleme (non thread safe)
Thread safe vs. Non thread safe PHP (3) Jednotlivá vlákna non thread safe kódu se nesynchronizují, tj. nečekají na sebe 30%-40% úspory v rychlosti POZOR: TS a NTS kód nejde kombinovat … mnoho rozšíření do PHP je kompilováno jako TS Pořád může být rychlejší op-code caching Nově: zbrusu nové FastCGI prostředí ve Win/IIS
IIS Recap: CGI -> Module/ISAPI -> FastCGI Skoro jako CGI, až na to, že Jeden proces zpracovává mnoho požadavků Windows 2008 Server, Vista SP1 Microsoft/Zend spolupráce Masivní nárůst výkonu
IIS (2) Standardní instalce (IIS 7.0) – IIS -> Handler Mappings – *.php, FastCgiModule, c:\php\php-cgi.exe – potvrdit vytvoření FastCGI prostředí („FastCGI application“) pro php-cgi.exe Pozn: nyní máme dvojitou recyklaci FCGI prostředí. PHP standardně po 500 dotazech, IIS po 200 … PHP se k tomu nikdy nedostane, což chceme … lze nastavit v IIS/php.ini
Agenda PHP na IIS pomocí nového FastCGI handleru – Thread safety – „tím to všechno začalo“ – Konfigurace Integrace: „nakopíruji to a nic“ – WordPress a spol. – častý problém s URL rewritingem Nějaké další postřehy
IIS Typický problém: PHP má mnoho konstant ohledně názvů souborů, cest a zpracovávaných URL …spousta věcí je jinak Příklad: zdá se, že problém byl v konstantě REQUEST_URI – zatímco Apache přidal query string, IIS nikoliv – zatímco Apache předával hodnotu před přepsáním na „hezká url“, IIS po … atd. … V konstantách celkově zmatek, nefungoval např. Drupal, ale už je to opraveno.
Další problémny s URL (nejen WordPress) REQUEST_URI, PATH_INFO, PATH_TRANSLATED, SCRIPT_FILENAME, __FILE__ atd… kdo se v tom má vyznat… Interpretace „/index.php/id/40“ – Standardně: file not found -> rewrite pravidlo – IIS při standardním php.ini: “No input file specified.” – cgi.fix_pathinfo = 1 – cgi.force_redirect = 0 (?) Quick-fix řešení na mnoho výše uvedeného: auto_prepend_file = C:\PHP\fix_uris.php
Další problémy s URL (nejen WordPress) (2) Na IIS je vícero rewrite enginů na tvorbu „hezkých url“ IIS Mod-Rewrite má HTTP_X_ORIGINAL_URL IIS Isapi_Rewrite má HTTP_X_REWRITE_URL Pozn.: Jak vypadá kompletní diagram ukazující, co je třeba udělat pro sjednocení proměnných?...odpověď bude v nějakém opensource CMS, kde to mají již „vychytané“ … třída CURI z Joomly
IIS Auth for Wordpress plugin Autentizace: Windows, Basic (http), Forms (HTML) Windows Auth: je třeba vytvořit účet admin, kterým bude Wordpress spravovat účty (admin = administrátorský účet ve WP) Do skupiny IIS_IUSRS, ne Administrators Změna uživatele pod kterým běží PHP – direktivy impersonate v php.ini 5.ashx 5.ashx
Memcache na IIS memcached = “paměťový server“ Jednoduché API v PHP, čte a zapisuje objekty (proměnné). Dá se použít i jako storage na sessions. Linux: memcached daemon Windows: je třeba stáhnout separátní službu „Když to nefunguje, vypnu firewall a je to“ Obdobnou funkci poskytují op-code cache
Výsledek? Interoperabilita je technicky bezproblémová Zásadní zlepšení s novým FastCGI handlerem Spolupráce Microsoftu se Zendem … to ovšem platí pokud má firma/hosting poslední verzi, jinak… … z definice se stále jedná o minoritní kombinaci
Jsme u konce Děkuji za pozornost