170 likes | 281 Views
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
E N D
PHP na IIS a další postřehy Michal Till
Přednášející • Konzultant a vývojář – webové technologieOblíbené: • ZendFramwork • Client-side RIA : Ext, YUI • Magazín Connect – internet, vývoj softwaru
Agenda • PHP na IIS pomocí nového FastCGIhandleru • Threadsafety – „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 FastCGIhandleru • Threadsafety – „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 Y vlákna Linux Yprocesy • PHP @ IIS jako CGI: navrženo na procesy, běží na vláknech => pomalé • PHP @ 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-codecache (akcelerátory) • Právě FastCGI • Ale ty thready: problém synchronizace (threadsafety) • 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-codecaching • Nově: zbrusu nové FastCGI prostředí ve Win/IIS
PHP @ FastCGI @ 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
PHP@ FastCGI @ IIS (2) • Standardníinstalce (IIS 7.0) • IIS -> HandlerMappings • *.php, FastCgiModule, c:\php\php-cgi.exe • potvrditvytvořeníFastCGI prostředí („FastCGIapplication“) 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 FastCGIhandleru • Threadsafety – „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
WordPress@ 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ímcoApache přidal querystring, 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 • IISpři standardním php.ini: “No input filespecified.” • 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 (nejenWordPress) (2) • Na IIS je vícerorewriteenginů 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 Wordpressplugin • 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 impersonatev php.ini • http://mvolo.com/blogs/serverside/attachment/4835.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-codecache
Výsledek? • Interoperabilita je technicky bezproblémová • Zásadní zlepšení s novým FastCGIhandlerem • 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 • michal.till@gmail.com • 604 144 144