Melyik PHP verzió

Default book

A http://www.php.net oldalon mindig több verzió van az éppen érvényes PHP-ból. Melyiket használjuk Windows környezetben?

  • Jelenleg a PHP 5.4.x, PHP 7.x.x és PHP 8.x válztozatok vannak.

Szálbiztos (TS - thread safe) vagy nem szálbiztos (NTS - non thread safe) változat?

A PHP-t eredetileg Linuxokra, Apache rendszerre fejlesztették ki. Az Apache eredetileg nem szálbiztos rendszer. CGI üzemmódban működött és minden hívásra külön PHP processz indult el. Később a Windows rendszereken, de a Linux rendszereken is az Apache 2.xx verziójában megírták a többszálú alkalmazások lehetőségét. A 32 bites Windows operációs rendszerek pedig eleve szálbiztos módon működnek. Ez a megoldás sokkal gyorsabb, mintha minden alkalmazásra új processzt indítanánk. Sajnos a PECL könyvtár nem minden kiegészítése szálbiztosan lett megírva.

A szervereken több lehetőség is van a PHP futtatására. A hagyományos CGI módszer a leglassabb, de biztonságos, viszont minden kérésre külön PHP.EXE indul el.

Az ISAPI modul gyorsabb, de a biztonsággal van probléma, ugyanis a szerver indulásakor a PHP isapi modul is elindul és mindenhez hozzáfér, amihez a webszerver is hozzáfér. Ez Linuxon és Windowson úgy kezelhető úgy, hogy az Apache-ot külön apache user nevében futtatjuk és annak a jogosultságait korlátozzuk megfelelően. Az IIS alapesetben rendszerszintű jogosultságokkal fut, tehát akkor a PHP is mindenhez hozzáférhet.

A FastCGI modul olyan öszvér, amely betölti a memóriába a PHP alkalmazást és ott is tartja, és minden hívást átad neki. Ez sokkal gyorsabb, mint a CGI üzemmód, ugyanakkor a jogosultságokkal sincs probléma. Ez a célszerű IIS7 esetén. (Telepítése itt nézhető meg: http://www.msdnkk.hu/Articles/PHP_futtatokornyezet_kialakitasa_IIS_7_webszerver_felett )

A PHP 5.2.1 óta kétféle Windowson futó bináris csomagot adnak ki a PHP-ra, a nem szálbiztos PHP és nem szálbiztos binárisokat, illetve a szálbiztos megfelelőiket. Mikor melyiket használjuk?

Korábban Windowsra is csak szálbiztos bináris csomagok voltak. A windowsok többszálú architektúrával rendelkeznek, míg a Linux több processzű architektúrával. A PHP az IIS-sel használva Windows környezetben CGI üzemmódban nagyon lassú, ha több processz és nem többszálú módban használjuk. Az ISAPI lehetőség sokkal gyorsabb IIS-en, de a PHP-re fejlesztett modulok egy része Linuxra készült, nem többszálú környezetre, ezért az IIS-en töbször összeomlott a rendszer ISAPI modul esetén. Tehát IIS esetén a CGI biztonságos és lassú, a modul gyors, de összeomlik.

További opció, hogyha használunk valamiféle opcode cache-t, mint például az eAccelerator, illetve manapság már a PHP részeként szállított Zend OPcache. Ez a modul betölti a PHP kódot,  lefordítja opcóde állapotba és az így lefordított kódot memóriában tartja, majd újrafelhasználja. A PHP kód futtatása így sokkal gyorsabb.

Az is kérdés, hogyha FastCGI módot akarunk használni, ez elég gyors lesz, nem lesz inkompatibilis és az IIS PHP telepítője is ezt az üzemmódot támogatja.

A Microsoft új FastCGI modulja képes a nem szálbiztos PHP-t futtatni, amely a gyorsaságot és a biztonságot egyesíti. Ennek alapján az alábbi telepítés javasolható Windows környezetben:

  • Apache: VC6, thread safe, Isapi modul, eAccelerator
  • IIS: VC9, non thread safe, FastCGI modul

A kérdésről egy jó leírás itt található:

http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries