PHP

A Wikipédiából, a szabad enciklopédiából
(PHP programozási nyelv szócikkből átirányítva)
PHP

Paradigma
Jellemző kiterjesztésphp
Megjelent1995. június 8.
TervezőRasmus Lerdorf
Fejlesztő
  • Rasmus Lerdorf
  • Andi Gutmans
  • PHP Group
  • Zend Technologies
  • Zeev Suraski
Utolsó kiadás8.3.6 (stabil verzió, 2024. április 11.)[1]
DialektusokZend Engine, HHVM, Phalanger, Quercus, Project Zero, Parrot
Hatással volt rá
Befolyásolt nyelvekFalcon, Hack
Operációs rendszer
LicencPHP Licenc
Weboldal

A PHP egy általános szerveroldali szkriptnyelv dinamikus weblapok készítésére. Az első szkriptnyelvek egyike, amely külső fájl használata helyett HTML oldalba ágyazható. A kódot a webszerver PHP feldolgozómodulja értelmezi, ezzel dinamikus weboldalakat hozva létre.[2] Rasmus Lerdorf 1995-ben indította útjára. Ma a The PHP Group tartja fenn és fejleszti.[3] A PHP szabad szoftver, de licence nem csereszabatos a GNU licenccel, mivel megkötéseket tartalmaz a PHP név használatára.[4]

A PHP születésekor csupán egy makrókészlet volt személyes honlapok karbantartására. Innen jön az eredeti név is: Personal Home Page Tools.[5] A rövidítés jelentése később PHP: Hypertext Preprocessor lett, így rekurzívvá vált.[6][7] Később a PHP képességei bővültek, így egy önállóan használható programozási nyelv alakult ki, amely képes nagyméretű webes adatbázisalapú alkalmazások működtetésére is.

A PHP nyelv népszerűsége képességeinek bővülésével folyamatosan nőtt. A NetCraft elemző cég felmérései szerint a PHP-t 1999 novemberében több mint 1 millió kiszolgálón használták. Ez a szám 2001 szeptemberére 6 millióra ugrott, 2003 októberében pedig már állítólag 14 millió gépre telepítették a PHP-t. A SecuritySpace.com szerint a PHP az Apache legnépszerűbb modulja, a mod_ssl-t, a perl modult és a FrontPage-et is maga mögé utasítva. 2007 áprilisában több, mint 20 millió honlap és 1 millió szerver használta.[8]

A hagyományos HTML lapokkal ellentétben a kiszolgáló a PHP-kódot nem küldi el az ügyfélnek, hanem a kiszolgáló oldalán a PHP-értelmező motor dolgozza fel azt. A programokban lévő HTML elemek érintetlenül maradnak, de a PHP kódok lefutnak. A kódok végezhetnek adatbázis-lekérdezéseket, létrehozhatnak képeket, fájlokat olvashatnak és írhatnak, kapcsolatot létesíthetnek távoli kiszolgálókkal. A PHP-kódok kimenete a megadott HTML elemekkel együtt kerül az ügyfélhez.

A PHP-t parancssori alkalmazásként is telepítik, így alkalmas parancsfájlok készítésére. Számos rendszergazda automatizálási célokra is a PHP-t használja, pedig ezt a feladatot hagyományosan Perl- vagy shell scriptekkel oldották meg.[2]

Története[szerkesztés]

A PHP fejlődése kezdetén csak CGI-programok halmaza volt. Ezeket Rasmus Lerdorf néhány Perl szkript lecserélésére írta, amelyeket honlapjának karbantartására (például önéletrajzának megjelenítésére és a látogatottság mérésére) használt. Később ezeket a programokat kombinálta a szintén általa írt Form Interpreter (űrlap-értelmező) alkalmazással - így jött létre a PHP/FI, ami már jóval szélesebb funkcionalitással bírt. Az új, C nyelven megírt változat képes volt adatbázisokhoz kapcsolódni és segítségével egyszerű dinamikus weboldalakat is létre lehetett hozni. Lerdorf 1995. június 8-án adta ki a PHP első nyilvános változatát, hogy külső segítséggel gyorsabbá tegye a hibák megtalálását és a kód további fejlesztését.[9] Az új verziót PHP 2-nek nevezte el és már megtalálhatóak voltak benne a mai PHP alapvető tulajdonságai: a Perl-éhez hasonló változók, az űrlapok kezelése és a HTML-kód beszúrásának lehetősége. A PHP szintaktikája is hasonló volt a Perl-éhez, de annál jóval korlátoltabb, egyszerűbb és kevésbé egységes volt.[3][10]

1997-ben Zeev Suraski és Andi Gutmans, két izraeli fejlesztő újraírta az értelmezőt, ezzel megteremtve a PHP 3 alapját - ekkor született meg a PHP új neve, a PHP: Hypertext Preprocessor rekurzív rövidítés is.[3] A fejlesztőcsapat 1997 novemberében, két hónapnyi béta-tesztelés után kiadta a PHP/FI 2-t, majd megkezdődhetett a PHP 3 tesztelése és végül megjelenése 1998 júniusában.[3] Suraski és Gutmans ekkor megint a PHP-mag újraírása mellett döntött, amiből 1999-ben megszületett a Zend Engine. A két fejlesztő ekkor alapította meg a Zend Technologies-t is, ami máig aktívan ellenőrzi a PHP fejlesztését.[3]

A Zend Engine 1.0 által hajtott PHP 4 2000. május 4-én jelent meg.[3] Ezt követte 2004. július 13-án a következő nagy mérföldkőnek számító, az új Zend Engine II-n alapuló PHP 5.[11] Az ötös verzió sok újítást tartalmazott: fejlettebb objektumorientált programozási lehetőségeket, a PDO (PHP Data Objects) adatbázis-absztrakciós kiterjesztést, és sok teljesítményt növelő javítást is.

A PHP 4 fejlesztése 2007 végén maradt abba, az utolsó megjelent verziója a 4.4.8 verziószámot viselte - a PHP Group ezekhez és a PHP 4 előző változataihoz 2008 augusztusáig biztosított biztonsági frissítéseket.[12][13][14][15] 2008. február 4-étől A GoPHP5 kezdeményezés keretében több vezető PHP-alapú szabad-szoftver projekt döntött a PHP 4-támogatás megszüntetéséről, hogy ezzel mozdítsák előre az ötös verzióra való áttérést.[16]

A PHP 5 évei alatt több nagyobb fejlesztés zajlott. Ezeket a PHP 6-ban adták volna ki, de problémák adódtak a Unicode támogatásával. Így a kevésbé problémás eszközöket a PHP 5 különböző verzióiba tették bele, a többit pedig összevonták egy külön ágba. Innen fog jönni a PHP 6, miután sikeresen megoldották ezeket a problémákat.

A PHP 5.4-ből eltávolították a következőket: register_globals,[17] a speciális karakterek backslash-es escape-elése, és a biztonságos mód.[12][18] Ezek az eszközök biztonsági rést nyitottak a PHP programokban, ezért távolították el őket. Az escape-eléshez vannak más eszközök, például az addslashes() függvény, a MySQL utasításokban pedig a mysql_real_escape_string(). Mindezek már a PHP 5.3-ban is elavultnak számítottak, és figyelmeztetést váltanak ki.[19]

A 2011-es állapot szerint a PHP natívan nem támogatja a Unicode-ot és a több bájtos karaktereket tartalmazó stringeket. Ezek majd a PHP 6-ba fognak bekerülni, ami lehetővé teszi majd, hogy a neveknek ne kelljen csupán ASCII karakterekből állnia.[20][21]

Jelenleg a PHP 7 főverzió a nyelv egyetlen aktívan fejlesztett verziója, a még támogatott legrégebbi verziója a 7.1-es.

Léteznek PHP értelmezők 32 és 64 bites platformokra is. Microsoft Windowsra csak egy 32 bites disztribúció létezik, ami miatt még szükséges az Internet Information Services (IIS) 64 bites rendszerein a 32-bit-támogatás.[forrás?] A korábban már létezett kísérleti 64 bites PHP 5.3.0-értelmezőt visszavonták.[22]

A PHP nyelv szabad, de licence kimondja, hogy a származtatott termékek nem használhatják nevükben a PHP szót a group@php.net írásos engedélye nélkül.[23] Emiatt a PHP licenc nem csereszabatos a GNU General Public License-szel.[24]

A PHP működése[szerkesztés]

A LAMP (szoftvercsomag) tartalmazza a PHP-t

A PHP oldalak elkészítésénél a HTML-t gyakorlatilag csak mint formázást használják. Ezen lapok teljes funkcionalitása a PHP-re épül. Amikor egy PHP-ben megírt oldalt akarunk elérni, a kiszolgáló először feldolgozza a PHP utasításokat, és csak a kész (HTML) kimenetet küldi el a böngészőnek. Így kliensoldalról nem látható a programkód.[25] A feldolgozáshoz egy ún. interpretert (értelmezőt) használ, amely általában a webszerver egy külső modulja. Ebben hasonlít más szerver oldali szkript nyelvekre, mint a Microsoft ASP.NET-je, a Sun Microsystems JavaServer Pages,[26] és a mod_perl. Az 5.4-es verzió óta a nyelv tartalmaz egy egyszerű, parancssorban beállítható webszervert.

A PHP nyelv lényegében a HTML nagymértékű kiegészítése. Rengeteg olyan feladat végezhető el vele, amelyre az ügyféloldali szkriptek nem képesek (vagy ha igen, korlátozottan).[26] Ilyenek a bejelentkezés, az adatbáziskezelés, fájlkezelés, kódolás, adategyeztetés, kapcsolatok létrehozása, e-mail küldése, adatfeldolgozás, dinamikus listakészítés, és hasonlók. Mindenütt, ahol sokszor ismétlődő lépésekből álló feladatsort kell végrehajtani (például képek listázása és linkelése, listakészítés stb.), ez a programnyelv nagyszerű segítség. Alapvetően szűrőként működik,[27] ami egy bemeneti fájlból egy kimeneti fájlt állít elő. A PHP 4 óta a parser lefordítja a kódot, hogy a Zend motor lefuttathassa azt.[28]

Sok különböző platform használja, és relációs adatbázisok kezelésére is megfelel (RDBMS). Ingyenes és nyílt; a PHP Group feljogosítja a fejlesztőket a nyelv bővítésére és beállítására. A webfejlesztésben népszerűvé vált LAMP struktúrában a P többnyire a PHP-re utal, - bár lehet a Python vagy a Perl nyelv rövidítése is. A többi betű rendre a Linux, az Apache HTTP Server és a MySQL rövidítése. Hasonló csomagok más operációs rendszerekre is elérhetők: a WAMP Windows, a MAMP pedig Mac OS X rendszerre. Az XAMPP is ilyen, platformfüggetlen szoftvercsomag.

2007 áprilisában több, mint 20 millió internetes tartomány mögött futott PHP alkalmazás, és a mod_php lett a legnépszerűbb Apache HTTP Server modul.[29] A webszerverek 75%-án használtak PHP-t.[30] Több tartalomkezelőt is PHP-ben írtak. Ilyenek a MediaWiki,[31] a Joomla!, az eZ Publish, a SilverStripe,[32] a WordPress,[33] a Drupal[34] és a Moodle.[35] Minden olyan weboldal, amit ezekkel hoztak létre, PHP-ben íródott; így a Wikipédia, a Facebook,[36] és a Digg felhasználói felülete is.[37]

Egyéb futási módok[szerkesztés]

A PHP programok futhatnak közönséges programként is. (Tehát nem HTML oldalba építve). Ezt a lehetőséget azonban ritkán használják ki.[forrás?] Ha mégis, sokszor weblapokkal kapcsolatos időzített folyamatok megvalósításához alkalmazzák, mivel azok azonos programnyelven, azonos megközelítési módon hajthatók végre.

Lehetőség van komplex konzolos alkalmazások írására is, ncurses használatával.[forrás?]

Microsoft Windows platformra is írhatók grafikus programok PHP-ben. Ehhez több mód is adott:

PHP-GTK - a sok program által használt Gimp Tool Kit függvényeit és felületi eszközeit lehet elérni.

Winbinder - egy fejlett modul- és futtatókörnyezet-páros. A standard felületi elemeket teszi elérhetővé, valamint lehetőséget ad egyedi elemek létrehozására. A csomag tartalmaz egy integrált fejlesztő eszközt is, melynek segítségével Drag and drop módszerrel lehet összerakni a kívánt felületet.

A PHP támogatta a keretrendszerek fejlesztését, melyek építőelemeket és tervezési módszereket ajánlanak a prototípus alapú tervezéshez és fejlesztéshez. Ezek közé tartoznak a CakePHP, a Symfony, a CodeIgniter, a Yii Framework, a Nelli, és a Zend Framework, a webalkalmazások fejlesztéséhez hasonló eszközökkel.

Fordítóprogramok[szerkesztés]

A PHP nyelvet eredetileg értelmezett szkriptnyelvnek írták meg. Azóta már több fordító is létezik, melyek elszakítják a nyelvet az értelmezőtől. Előnyük a gyorsabb futás, a statikus analízis lehetősége és a más nyelvekkel való jobb együttműködés.[forrás?]

Lehetséges módszerek:

  • HipHop - a PHP-kódot C++-kóddá alakítja, majd futtatható változatot készít belőle. A Facebook fejlesztői fejlesztik. Nyílt forrású.
  • php2c - a php kódot C kóddá alakítja
  • php2exe - több megoldás is létezik. Ezek nagy része csak részleges.
  • Phalanger - CIL-be fordít.

Ezek a módszerek kétszeresére gyorsították a PHP-ben írott programokat.

Optimalizáció[szerkesztés]

PHP-ban az 5.3-as verzió óta van szemétgyűjtés. A garbage collector eltakarítja azokat az objektumokat és más megjegyzett dolgokat, amikre feltehetően már nem lesz szükség. Ekkortól ehhez már nem kell Zend Optimizert installálni.

A PHP szkriptnyelv. A kódot az értelmező futás közben fordítja, és azonnal végre is hajtja.[38][39] Léteznek fordítók is, hogy ne kelljen a kódot mindenki számára külön lefordítani.

Vannak olyan egyedi (nem gyártó által elismert) modulok, melyek egyfajta köztes megoldást nyújtanak: nem a nyers forráskód kerül tárolásra, hanem egyfajta byte-kód. Ez csak a feldolgozás gyorsítására szolgál. Van rá hivatalos megoldás is. Ennek lényege, hogy az egyes futásokkor megvizsgálja a forrást, és ha az megváltozott, a felesleges részeket (megjegyzések, fölös blokk-kezdések, white space karakterek) kiszűrve generál egy köztes állapotot tároló állományt. Ha a kód nem változott, betölti az előbb eltárolt „könnyített” változatot, és azt futtatja. Ez jelentheti azt is, hogy az ember által olvasható kódot tokenizálja. Így a feldolgozás egy részét „megspórolva” fut a program.

Az optimalizálók tömörebbé teszik a kódot, összeolvasztják a redundáns utasításokat, és más hasonló változtatásokat tesznek, hogy a végrehajtás gyorsabbá váljon.[40] A PHP-szkriptekben gyakran van erre lehetőség. Az eAcceleratornak van PHP kiterjesztése.[41] Bizonyos esetekben ez a módszer nem működik, mivel a kód tartalmazhat nemfeldolgozható elemeket.

Egy másik módszer a cache-elés, vagyis a lefordított kód tárolása a megosztott memóriában, hogy ne kelljen mindent újra és újra lefordítani. A tervek szerint a PHP 6-nak már lesz beépített cache-e, az APC.[42]

A két módszer egymástól független, ezért kombinálhatók.

Verziók[szerkesztés]

Jelentés
Piros Már nem támogatott kiadás
Sárga Csak biztonsági és hibajavításokat kap
Zöld Támogatott kiadás, új funkciókat is kaphat
Kék Elkövetkezendő kiadás
Főverzió Alverzió Kiadás dátuma Megjegyzések
1 1.0.0 1995-06-08 Eredeti nevén PHP Tools (Personal Home Page Tools). A „PHP” név első használata.[3]
2 2.0.0 1997-11-01 Alkotója szerint a legegyszerűbb eszköz dinamikus weboldalak készítésére.[3]
3 3.0.0 1998-06-06 A fejlesztés csapatmunkává vált. Zeev Suraski és Andi Gutmans újraírták a rendszer alapját.[3]
4 4.0.0 2000-05-22 Megjelent az új parancsértelmező mag, a Zend Engine[43]
4.0.1 2000-06-28 Hibajavítás. Hibajavítások listája.
4.0.2 2000-08-29 Hibajavítás. Hibajavítások listája.
4.0.3 2000-10-11 Hibajavítás. Hibajavítások listája.
4.0.4 2000-12-19 Hibajavítás. Hibajavítások listája.
4.0.5 2001-04-30 Hibajavítás. Hibajavítások listája.
4.0.6 2001-06-23 Hibajavítás. Hibajavítások listája.
4.1.0 2001-12-10 Megjelentek a szuperglobális változók, tömbök ($_GET, $_POST, $_SESSION, stb.)[43]
4.1.1 2001-12-26 Hibajavítás. Hibajavítások listája.
4.1.2 2002-02-27 Hibajavítás. Hibajavítások listája.
4.2.0 2002-04-22 A register_globals környezeti változó alapértelmezésben kikapcsolt értéket vett fel.[43]
4.2.1 2003-05-22 Hibajavítás. Hibajavítások listája.
4.2.2 2003-07-22 Hibajavítás. Hibajavítások listája.
4.2.3 2002-09-06 Hibajavítás. Hibajavítások listája.
4.3.0 2002-12-27 CGI mód mellett már lehetőség van a CLI, azaz parancssori futtatásra is[43][44]
4.3.1 2003-02-17 Hibajavítás. Hibajavítások listája.
4.3.2 2003-05-29 Hibajavítás. Hibajavítások listája.
4.3.3 2003-08-25 Hibajavítás. Hibajavítások listája.
4.3.4 2003-11-03 Hibajavítás. Hibajavítások listája.
4.3.5 2004-03-26 Hibajavítás. Hibajavítások listája.
4.3.6 2004-04-15 Hibajavítás. Hibajavítások listája.
4.3.7 2004-06-03 Hibajavítás. Hibajavítások listája.
4.3.8 2004-07-13 Hibajavítás. Hibajavítások listája.
4.3.9 2004-09-22 Hibajavítás. Hibajavítások listája.
4.3.10 2004-12-14 Hibajavítás. Hibajavítások listája.
4.3.11 2005-03-31 Hibajavítás. Hibajavítások listája.
4.4.0 2005-07-11 Man oldalak a phpize-hoz és a php-config-hez[43]
4.4.1 2005-10-31 Hibajavítás. Hibajavítások listája.
4.4.2 2006-01-11 Hibajavítás. Hibajavítások listája.
4.4.3 2006-08-03 Hibajavítás. Hibajavítások listája.
4.4.4 2006-08-17 Hibajavítás. Hibajavítások listája.
4.4.5 2007-02-14 Hibajavítás. Hibajavítások listája.
4.4.6 2007-03-01 Hibajavítás. Hibajavítások listája.
4.4.7 2007-05-03 Hibajavítás. Hibajavítások listája.
4.4.8 2008-01-03 Számos biztonsági, kiegészítő és hibajavítás, a következő biztonsági frissítés 2008-08-08 esedékes ha szükségszerű.
4.4.9 2008-08-07 Több biztonsági, kiegészítő és hibajavítás, a PHP 4.4 széria utolsó kiadása.[45][46]
5 5.0.0 2004-07-13 Megjelenik a Zend Engine II, teljesen új objektumorientált lehetőségekkel[47]
5.0.1 2004-08-22 Hibajavítás. Hibajavítások listája.
5.0.2 2004-09-23 Hibajavítás. Hibajavítások listája.
5.0.3 2004-12-15 Hibajavítás. Hibajavítások listája.
5.0.4 2005-03-31 Hibajavítás. Hibajavítások listája.
5.0.5 2005-09-05 Hibajavítás. Hibajavítások listája.
5.1.0 2005-11-24 A PHP motor újratervezése, hatékonyságjavítás új fordítói változók bevezetésével.[47] Új interfész adatbázisokhoz.[48]
5.1.1 2005-11-28 Hibajavítás. Hibajavítások listája.
5.1.2 2006-01-12 Hibajavítás. Hibajavítások listája.
5.1.3 2006-05-02 Hibajavítás. Hibajavítások listája.
5.1.4 2006-05-04 Hibajavítás. Hibajavítások listája.
5.1.5 2006-08-17 Hibajavítás. Hibajavítások listája.
5.1.6 2006-08-24 Hibajavítás. Hibajavítások listája.
5.2.0 2006-11-02 A "filter" kiterjesztés alapértelmezett módon elérhető. Natív JSON támogatás.[47]
5.2.1 2007-02-08 Hibajavítás. Hibajavítások listája.
5.2.2 2007-05-03 Hibajavítás. Hibajavítások listája.
5.2.3 2007-05-31 Hibajavítás. Hibajavítások listája.
5.2.4 2007-08-30 Hibajavítás. Hibajavítások listája.
5.2.5 2007-11-08 Hibajavítás. Hibajavítások listája.
5.2.6 2008-05-01 Hibajavítás. Hibajavítások listája.
5.2.7 2008-12-04 Hibajavítás. Hibajavítások listája.
5.2.8 2008-12-08 Hibajavítás. Hibajavítások listája.
5.2.9 2009-02-26 Hibajavítás. Hibajavítások listája.
5.2.10 2009-06-18 Hibajavítás. Hibajavítások listája.
5.2.11 2009-09-26 Hibajavítás. Hibajavítások listája.
5.2.12 2009-12-17 Hibajavítás. Hibajavítások listája.
5.2.13 2010-02-10 Hibajavítás. Hibajavítások listája.
5.2.14 2010-07-22 Hibajavítás. Hibajavítások listája.
5.2.15 2010-12-08 Hibajavítás. Hibajavítások listája.
5.2.16 2010-12-10 Hibajavítás. Hibajavítások listája.
5.2.17 2011-01-06 Kritikus hibajavítás a lebegőpontos számításokkal kapcsolatosan. Hibajavítások listája.
5.3.0 2009-06-30 Névtér támogatás, sqlite3 Hibajavítások listája.
5.3.1 2009-11-19 Több mint 100 hibajavítás. Hibajavítások listája.
5.3.2 2010-03-04 Sok hibajavítást magában foglaló kiadás. Hibajavítások listája.
5.3.3 2010-07-22 Főleg biztonsági és hibajavítások. Hibajavítások listája.
5.3.4 2010-12-09 Számos biztonsági és hibajavítás.
5.3.5 2011-01-11 (CVE-2010-4645) biztonsági javítás.
5.3.6 2011-03-17 Biztonsági és hibajavítások. Hibajavítások listája.
5.3.7 2011-08-18 Ez a kiadás a PHP 5.3.x branch stabilitásának javítására fókuszált. Több, mint 90 hiba javítást tartalmazott, biztonsági javításokkal együtt. Hibajavítások listája.
5.3.8 2011-08-23 Ez a kiadás a PHP 5.3.7-ben megjelent 2 fontosabb problémát javított. Hibajavítások listája.
5.3.9 2012-01-10 Ez a kiadás a PHP 5.3.x branch stabilitásának javítására fókuszált. Több, mint 90 hiba javítást tartalmazott, biztonsági javításokkal együtt. Hibajavítások listája.
5.3.10 2012-02-02 Ez a kiadás javítja a Stefan Esser által jelentett távoli önkényes kód végrehajtási sebezhetőséget (CVE-2012-0830). Hibajavítások listája.
5.3.11 2012-04-26 Hibajavítások listája.
5.3.12 2012-05-03 Hibajavítások listája.
5.3.13 2012-05-08 CGI-alapú rendszerek sebezhetőségének javítása. Hibajavítások listája.
5.3.14 2012-06-06 Számos biztonsági és hibajavítás.
5.3.15 2012-07-19 Számos biztonsági és hibajavítás.
5.3.16 2012-08-16 Számos hibajavítás.
5.3.17 2012-09-13 Számos hibajavítás.
5.3.18 2012-10-18 Számos hibajavítás.
5.3.19 2012-11-22 Hibajavítások listája.
5.3.20 2012-12-20 Hibajavítások listája.
5.3.21 2013-01-17 Hibajavítások listája.
5.3.22 2013-02-21 Hibajavítások listája.
5.3.23 2013-03-14 Hibajavítások listája.
5.3.24 2013-04-11 Hibajavítások listája.
5.3.25 2013-05-09 Hibajavítások listája.
5.3.26 2013-06-06 Hibajavítások listája.
5.3.27 2013-07-11 Hibajavítások listája.
5.3.28 2013-12-12 Hibajavítások listája.
5.3.29 2014-08-14 Hibajavítások listája.
5.4.0 2012-03-01 Eltávolított elemek: register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister() és session_is_registered().[49] Továbbá számos fejlesztés a meglévő funkcionalitáson. Hibajavítások listája.
5.4.1 2012-04-26 Számos biztonsági és hibajavítás.
5.4.3 2012-05-08 CGI-alapú rendszerek és az apache_request_header() buffer túlcsordulásos sebezhetőségének javítása. Hibajavítások listája.
5.4.4 2012-06-06 Számos biztonsági és hibajavítás.
5.4.5 2012-07-19 Számos biztonsági és hibajavítás.
5.4.6 2012-08-16 Hibajavítások listája.
5.4.7 2012-09-13 Hibajavítások listája.
5.4.8 2012-10-18 Hibajavítások listája.
5.4.9 2012-11-22 Hibajavítások listája.
5.4.10 2012-12-20 Hibajavítások listája.
5.4.11 2013-01-17 Hibajavítások listája.
5.4.12 2013-02-21 Hibajavítások listája.
5.4.13 2013-03-14 Hibajavítások listája.
5.4.14 2013-04-11 Hibajavítások listája.
5.4.15 2013-05-09 Hibajavítások listája.
5.4.16 2013-06-06 Hibajavítások listája.
5.4.17 2013-07-04 Hibajavítások listája.
5.4.18 2013-08-15 Hibajavítások listája.
5.4.19 2013-08-22 Hibajavítások listája.
5.4.20 2013-09-19 Hibajavítások listája.
5.4.21 2013-10-17 Hibajavítások listája.
5.4.22 2013-11-14 Hibajavítások listája.
5.4.23 2013-12-12 Hibajavítások listája.
5.4.24 2014-01-09 Hibajavítások listája.
5.4.25 2014-02-06 Hibajavítások listája.
5.4.26 2014-03-06 Hibajavítások listája.
5.4.27 2014-04-03 Hibajavítások listája.
5.4.28 2014-05-01 Hibajavítások listája.
5.4.29 2014-05-29 Hibajavítások listája.
5.4.30 2014-06-26 Hibajavítások listája.
5.4.31 2014-07-24 Hibajavítások listája.
5.4.32 2014-08-21 Hibajavítások listája.
5.4.33 2014-09-18 Hibajavítások listája.
5.4.34 2014-10-16 Hibajavítások listája.
5.4.35 2014-11-13 Hibajavítások listája.
5.4.36 2014-12-18 Hibajavítások listája.
5.4.37 2015-01-22 Hibajavítások listája.
5.4.38 2015-02-19 Hibajavítások listája.
5.4.39 2015-03-19 Hibajavítások listája.
5.4.40 2015-04-16 Hibajavítások listája.
5.4.41 2015-05-14 Hibajavítások listája.
5.4.42 2015-06-11 Hibajavítások listája.
5.4.43 2015-07-09 Hibajavítások listája.
5.4.44 2015-08-06 Hibajavítások listája.
5.4.45 2015-09-03 Hibajavítások listája.
5.5.0 2013-06-20 Hibajavítások listája.
5.5.1 2013-07-18 Hibajavítások listája.
5.5.2 2013-08-15 Hibajavítások listája.
5.5.3 2013-08-22 Hibajavítások listája.
5.5.4 2013-09-19 Hibajavítások listája.
5.5.5 2013-10-17 Hibajavítások listája.
5.5.6 2013-11-14 Hibajavítások listája.
5.5.7 2013-12-12 Hibajavítások listája.
5.5.8 2014-01-09 Hibajavítások listája.
5.5.9 2014-02-06 Hibajavítások listája.
5.5.10 2014-03-06 Hibajavítások listája.
5.5.11 2014-04-03 Hibajavítások listája.
5.5.12 2014-05-01 Hibajavítások listája.
5.5.13 2014-05-29 Hibajavítások listája.
5.5.14 2014-06-26 Hibajavítások listája.
5.5.15 2014-07-24 Hibajavítások listája.
5.5.16 2014-08-22 Hibajavítások listája.
5.5.17 2014-09-18 Hibajavítások listája.
5.5.18 2014-10-26 Hibajavítások listája.
5.5.19 2014-11-13 Hibajavítások listája.
5.5.20 2014-12-18 Hibajavítások listája.
5.5.21 2015-01-22 Hibajavítások listája.
5.5.22 2015-02-19 Hibajavítások listája.
5.5.23 2015-03-19 Hibajavítások listája.
5.5.24 2015-04-16 Hibajavítások listája.
5.5.25 2015-05-14 Hibajavítások listája.
5.5.26 2015-06-11 Hibajavítások listája.
5.5.27 2015-07-09 Hibajavítások listája.
5.5.28 2015-08-06 Hibajavítások listája.
5.5.29 2015-09-03 Hibajavítások listája.
5.5.30 2015-10-01 Hibajavítások listája.
5.5.31 2016-01-06 Hibajavítások listája.
5.5.32 2016-02-04 Hibajavítások listája.
5.5.33 2016-03-03 Hibajavítások listája.
5.5.34 2016-03-31 Hibajavítások listája.
5.5.35 2016-04-28 Hibajavítások listája.
5.5.36 2016-05-26 Hibajavítások listája.
5.5.37 2016-06-23 Hibajavítások listája.
5.6.0 2014-08-28 újdonságok listája.
5.6.1 2014-10-02 Hibajavítások listája.
5.6.2 2014-10-16 Hibajavítások listája.
5.6.3 2014-11-13 Hibajavítások listája.
5.6.4 2014-12-18 Hibajavítások listája.
5.6.39 2018-12-08 Hibajavítások listája.
7 7.0.0 2015-12-03 Újdonságok listája.
7.0.33 2018-12-06 Hibajavítások listája.
7.1.0 2016-12-01 Újdonságok listája.
7.1.25 2018-12-06 Hibajavítások listája.
7.2.0 2017-11-30 Újdonságok listája.
7.2.25 2018-12-06 Hibajavítások listája.
7.3.0 2018-12-06 Újdonságok listája.
7.4.0 2018-06-26 PHP 7.4 elévülések listája.
8 8.0 2020.11.26 Újdonságok listája
8.1 2021.12.17 Újdonságok listája
8.2 2022.12.08 Újdonságok listája

2011. június 28-án a PHP Group új kiadási ciklusokat jelentett be.[50] Eszerint minden hónapban megjelenik legalább egy új kisebb kiadás. Ezek mindegyikét két évig támogatják, és még egy évig elérhetők hozzájuk biztonsági frissítések. Évente egyszer egy újabb, nagyobb kiadással jelentkeznek, ami új eszközöket tartalmaz. Ezeket az új eszközöket nem vezetik be a többi kiadásba. 2020.11.26-án jelent meg a PHP 8-as kiadás. [51]

Biztonság[szerkesztés]

A programok sebezhetősége abból adódik, hogy a programozó nem tartja be a főbb biztonsági előírásokat. Maga a nyelv és programkönyvtárai csak kis részben felelősek ezért. 2008-ban a PHP-ben 23 ilyen hibát ismertek fel, ami kb. az összes hiba 1 százaléka.[52][53] Egyes nyelvek külön ellenőrzik is a programozók biztonságot veszélyeztető hibáit. A PHP-hoz is készült ilyen eszköz,[54] de egyik kiadásba sem került bele.[55][56] Viszont léteznek már magasabb szintű biztonsági eszközök, mint a Suhosin és a Hardening-Patch, speciálisan a webes környezetbe.[57] A PHPIDS minden PHP alkalmazást képes ellenőrizni, és számos szolgáltatással rendelkezik.[58]

Szintaxis[szerkesztés]

A klasszikus "Helló világ".

<?php
 echo "<p>"; // egy bekezdés
 echo "Helló világ!"; // szöveg
 echo "</p>"; // záró tag
?>

A PHP utasításokat mindig egy meghatározott karaktersorral kell kezdeni és bezárni; ezek választják el a PHP kódot a program többi részétől, beleértve a HTML kódokat is.[59] Sok hibát kizárhatunk, ha programjainkban a "<?php" nyitó és a "?>" záró karaktersorokat használjuk. Ugyanis az érvényes nyitó és záró elemek a php.ini konfigurációs fájlban vannak deklarálva, amik szerverenként eltérhetnek egymástól, így előfordulhat, hogy egy szerveren nem értelmezi az interpreter a php programunkat, hanem közvetlenül a kimenetre küldi a forráskódot.[60]

A <?php és ?> jelölések XHTML-ben és XML-ben is jól formált tagek.[61] Eszerint a PHP nyelvvel kevert leírókódok maguk is jól formált XML kifejezések. A <? ?> jelölés különösen ellenjavallt, ugyanis az XML dokumentumok nyitó és záró tagja is hasonló, így egy include-olt (beágyazott) xml dokumentumot is forráskódnak értelmezne az interpreter. Ezek a következőképpen alakulhatnak:

karaktersorozat megjegyzés
<? ?>
ha a php.ini-ben be van kapcsolva az short_open_tag
<?php ?>
javasolt forma
<script language="PHP"> </script>
csak ha a php.ini-ben az asp_tags bekapcsolt állapotban van
<?=$valtozo?>
Az "echo" rövidített változata, az alábbi kódrészletnek felel meg:
<?php echo $valtozo; ?>
<% %>
csak ha a php.ini-ben az asp_tags bekapcsolt állapotban van

PHP "Helló világ" változókkal:

<?php
$hellovilag ='Helló világ!';
print $hellovilag;
?>

Minden változó azonosítója a $ jellel kezdődik:

$valtozo="béka";
echo $valtozo;

Kivételt képeznek ez alól a konstansok

define("KONSTANS","123456");
echo KONSTANS;

Fontos megemlíteni, hogy PHP-ben a string típus jelölésénél az aposztrófban (' ') és az idézőjelben (" ") lévő karaktersorozat más-más jelentéssel bír. Az idézőjelek közé zárt szöveg esetében az értelmező a szövegben – a here document-ekhez hasonlóan beszúrt – változókat is keres (ezért a kiértékelése, minimálisan ugyan, de lassabb), ugyanakkor aposztróffal jelölt string típusnál ez nem valósul meg.[62]

<?php
$valtozo = 'szöveg';
$valtozo1 = 'példa $valtozo';
$valtozo2 = "példa $valtozo";
echo $valtozo1,'<br />',$valtozo2;
?>

Az eredmény pedig :

példa $valtozo
példa szöveg

A tömb indexelése – hasonlóan más C alapú nyelvekhez – 0-tól kezdődik, tehát a $tomb[1] eleme valójában a tömb 2. eleme.

A legegyszerűbb utasítás a már említett 'echo' nyelvi struktúra, vagy a visszatérési értékkel rendelkező 'print'. Ennek segítségével lehet kihasználni igazán a php-t: közvetlenül lehet írni a készülő HTML dokumentumba, akár formázott szöveget is. Az eredmény:

 <p>Helló világ!</p>

Figyeljük meg, hogy az utasításokat pontosvessző (;) zárja, hasonlóan például a C nyelvhez.[63] Ez a pontosvessző egyes esetekben (például akkor, ha az adott sort nem követi egy másik sor, vagy a kódunk egysoros), elhagyható. Ez viszont nem ajánlatos, mert ha a kódunkat szerkesztjük, és egy vagy több sorral bővítjük, akkor előfordulhat, hogy elfelejtjük kirakni a pontosvesszőt, így hibaüzenetet kapunk. Az alábbi kódok például helyesek, viszont alkalmazásuk nem célszerű.

<?php
echo "Szöveg."
?>
<?php
$valtozo = 'Szöveg';
echo $valtozo

?>

A nyelv sokat merített a Perlből, a C++-ból és a Javából, például az if feltételes utasítást, a for és a while ciklusokat. Az osztályok megalkotása a C++-t, az absztrakt osztályok és az öröklődés megvalósítása a Javát idézi.

Adattípusok[szerkesztés]

A PHP az egész számokat platformfüggő tartományban tárolja. Ez a tartomány 64 vagy 32 bites előjeles ábrázolás, ami megfeleltethető a C long típusának. Eltérően más programnyelvektől bizonyos esetekben az előjel nélküli számok is előjelessé konvertálódnak.[64] Egész változók értékadásánál használható az előjeles decimális, oktális és hexadecimális jelölés is.

A lebegőpontos számok tárolási tartománya szintén platformfüggő, megadhatóak lebegőpontosan és kétféle tudományos jelöléssel is.[65]

A PHP rendelkezik egy saját boolean adattípussal, ami hasonlít a Java és a C++ boolean típusaira. A boolean típusba konvertáláskor a Perl és C++ nyelvekhez hasonlóan a nullától különböző értékek true értékké konvertálódnak, a nulla értékek pedig false értékké.[65]

A null adattípus az érték nélküli változókat reprezentálja. A null típus egyetlen lehetséges értéke a NULL.[65]

A "resource" típusú változók külső erőforrásokra hivatkoznak. Ezeket általában egyes kiterjesztések függvényei adják vissza és általában csak ugyanazon kiterjesztés függvényei tudják kezelni; ilyen típusúak a file, az image és a database erőforrások.[65] A tömbök bármilyen PHP típusú elemeket tárolhatnak, beleértve erőforrásokat, objektumokat, sőt akár más tömböket is.

Az értékek sorrendje megőrződik a listákban és a hash-táblákban is.[65] A PHP a string adattípust is támogatja, stringeket megadni szimpla és dupla idézőjelekkel valamint az úgynevezett heredoc szintaxissal egyaránt lehet.[66]

A szabványos PHP programkönyvtár (Standard PHP Library, SPL) igyekszik megoldani a szabványos adatkezelési feladatokat és hatékony adatelérési interface-eket és osztályokat implementál.[67]

A PHP gyenge típusossága az egyik leggyakoribb hibaforrás, mivel a nyelvre jellemző az ún. Type Juggling,[68] ami lehetővé teszi, hogy a változó típusát a környezete határozza melyben használjuk.

<?php
$foo = "0"; // $foo változó string típust vesz fel
$foo += 2; // a $foo most szám típust veszi fel
$foo = $foo + 1.3; // $foo most lebegőpontos szám típusú
$foo = 5 + "10 Little Piggies"; // $foo szám típusú
$foo = 5 + "10 Small Pigs"; // $foo szám típusú
?>

Ugyanakkor a tömbre való átalakítás jelenleg nem elérhető.

<?php
$a = 'autó'; // $a string típusú
$a[0] = 'f'; // $a még string típusú
echo $a; // futó
?>

Ugyanakkor lehetőségünk van típuskényszerítés alkalmazására:

<?php
$foo = 10; // $foo most szám típusú
$bar = (boolean) $foo; // $bar logikai típusú
?>

Függvények[szerkesztés]

A PHP több száz alapfüggvényt tartalmaz, a bővítésekkel több ezret. A beépített könyvtárakban levő függvények több elnevezési konvenciót követnek, de nem mindig következetesen.[69] Nincsenek párhuzamos programozást támogató függvények, de a nyelv támogatja a párhuzamosságot POSIX rendszereken.[70]

Saját függvények is definiálhatók:

function myFunction() { //deklarálja a függvény nevét, a név myFunction()
    return 'John Doe';  //visszatér a 'John Doe' értékkel
}

echo 'My name is ' . myFunction() . '!'; //kiírja a szöveget, és a myFunction()
                                         //visszatérési értékét
//a kimeneten a 'My name is John Doe!' szöveg jelenik meg (aposztófok nélkül)

A függvények nevében a PHP nem különbözteti meg a kis- és a nagybetűket. Erre figyelni kell, ez egy újabb hibaforrás.

A függvényeket nem kell prototípusozni. Definiálhatók blokkokban is, ekkor futási időben dől el, hogy a függvény létrejön-e. A függvényhívásokban kötelező kitenni a zárójelet, kivéve a paraméter nélküli konstruktorokat, amiket a new operátor hív meg.

Névtelen függvények így készíthetők:

function getAdder($x) {
    return function($y) use ($x) {
        return $x + $y;
    };
}

$adder = getAdder(8);
echo $adder(2);    // kiírja a "10" értéket

Ahol a getAdder() függvény létrehoz egy környezetet az $x változóval, ami veszi az $y addíciós argumentumot, és visszaadja a hívónak. Az ilyen függvények első osztályú objektumok, vagyis tárolhatók változókban, átadhatók paraméterként más függvényeknek, és így tovább.

A goto utasítás is használható (a PHP 5.3 óta):

function lock() {
    $file = fopen('file.txt', 'r+');
    retry:
    if (!flock($file, LOCK_EX & LOCK_NB)) {
        goto retry;
    }
    fwrite($file, 'Success!');
    fclose($file);
    return 0;
}

Ha meghívják a flock() függvényt, akkor a PHP megnyit egy fájlt, és megpróbálja lockolni. A retry: címke jelöli, hogy hova térjen vissza, ha a flock() hívása sikertelen volt, és meghívódik a goto retry;. A goto használata ugyanarra a környezetre és fájlra korlátozódik.

Osztályok[szerkesztés]

Az osztályok nevében nincs különbség a kis- és a nagybetűk között. Az objektumorientáltságot a PHP 3 vezette be, és a PHP 4 bővítette.[3] A PHP 5-ben teljesen átstrukturálták az osztályokat.[71] A korábbi verziókban a nyelv az osztályokat típusokként kezelte;[71] ennek az volt a hátulütője, hogy értékadáskor vagy paraméterátadáskor a teljes objektum átmásolódott. Az új megközelítésben kezelőkkel hivatkozzák az objektumokat, így adódnak át.[72]

Emellett vannak már abstract és final osztályok és metódusok. Az absztrakt függvények csak a prototípusukkal vannak megadva; az absztrakt osztályokban minden metódus absztrakt; a final osztályból nem lehet leszármazni, és a final metódus nem definiálható át. A konstruktorok és a destruktorok a C++-hoz hasonlóan működnek. Az öröklés a Javára emlékeztet, mivel csak egy alaposztályból lehet származni, azonban akárhány interfész implementálható. Külön interfészek valósítják meg a kapcsolatot a futtató rendszerrel. Például az ArrayAccess interfészt implementáló osztályok objektumai használhatók tömb szintaxissal, és az Iterator vagy IteratorAggregate interfészeket implementálókra létezik a foreach nyelvi konstrukció. Mivel nincsenek virtuális táblák, ezért a static változók hivatkozás helyett névvel kapcsolódnak fordítási időben.[72]

Ha egy új objektumot a clone szóval másolnak, akkor az értelmező keresi a __clone() metódust. Ha nincs ilyen, akkor az alapértelmezett __clone()-t hívja, ami átmásolja az objektum attribútumait. Ha definiálva van a __clone() metódus, akkor az lesz a felelős az új példány attributumainak beállításáért.[73]

Példa az objektumok kezelésére:

class Person {
    public $firstName;
    public $lastName;

    public function __construct($firstName, $lastName = '') {  // konstruktor, opcionális paraméterrel
        $this->firstName = $firstName;
        $this->lastName = $lastName;
    }

    public function greet() {    // metódus
        return "Hello, my name is " . $this->firstName . " " . $this->lastName . ".";
    }

    public static function staticGreet($firstName, $lastName) {  // statikus függvény
        return "Hello, my name is " . $firstName . " " . $lastName . ".";
    }
}

$he = new Person('John', 'Smith');
$she = new Person('Sally', 'Davis');
$other = new Person('Joe');

echo $he->greet();  // kiírás: "Hello, my name is John Smith."
echo '<br />';
echo $she->greet(); // kiírás: "Hello, my name is Sally Davis."
echo '<br />';
echo $other->greet();   // kiírás: "Hello, my name is Joe ."
echo '<br />';
echo Person::staticGreet('Jane', 'Doe');    // kiírás: "Hello, my name is Jane Doe."

Láthatóság[szerkesztés]

A PHP 5-ben a láthatóság is szabályozható a private és a protected kulcsszavakkal. Ha csak var van, akkor a public az alapértelmezett. A public-nak deklarált attribútumok és metódusok akárhonnan hozzáférhetők; a protected adattagok csak az osztályból és a leszármazottakból láthatók; a private-nak deklarált adattagok csak magából az osztályból érhetők el. A láthatóság szabályozása osztályszintű, például két különböző, de azonos osztályú objektum hozzáfér egymás összes adattagjához.[74]

Kiterjesztések[szerkesztés]

Már a PHP magja is sok szabad és nyílt forrású könyvtárat tartalmaz. Mivel a PHP internetközpontú, ezért vannak moduljai a FTP szerverek elérésére, adatbázisok használatára; rendelkezik beágyazott SQL programkönyvtárakkal, melyekkel egyaránt használható PostgreSQL, MySQL és SQLite; van benne lehetőség LDAP szerverek kezelésére, és még más hasonló funkciók. Sok függvény ismerős lehet a C-ből, mint például a stdio függvénycsalád.[75]

A PHP licence megengedi a bővítést. Ezek a bővítések C-ből PHP-ra fordíthatók, vagy dinamikusan, futásidőben betölthetők. Ilyen kiterjesztések támogatják a Windows API-t, vezérlik a folyamatokat Unix rendszereken, támogatják a Unicode-ot, a cURL-t, és többféle tömörítési módot. Vannak szokatlanabb lehetőségek is, mint az Internet Relay Chat használata, a dinamikus Adobe Flash- és képgenerálás, a beszédszintézis. A kiterjesztéseket a PHP Extension Community Library (PECL) gondozza.[76]

A Zend külön képesítő vizsgát nyújt a PHP-fejlesztésre.

Kritika[szerkesztés]

A PHP kritikusai rámutatnak a következetlenségekre. Hasonló szerepű függvényeknek egészen más a nevük, és paraméterlistáik sem teljesen azonosak. Az objektumorientáltság ellenére a legtöbb szabványos könyvtár még mindig csak procedurális elemekből áll. A párhuzamosságot nem támogatja, és egyes modulok nem szálbiztosak. Továbbá a nyelvnek nincs saját bájtkód-cache-e, erről külön kell gondoskodni, különben minden híváskor újra és újra le kell fordulnia a kódnak.

Módszertan[szerkesztés]

A gyenge típusosság a nyelv felépítésének része, de hibaforrás lehet. Például, ha számot karakterlánccal hasonlítunk össze, akkor figyelmeztetés nélkül implicit konvertálódnak a változóink, ami nem várt következményekkel járhat. További hibákhoz vezethet a tömbök és az asszociatív tömbök közötti különbségtétel hiánya. Emellett a változók deklarálása nem kötelező; a PHP a változók számára mindig első használatukkor foglalja le a helyet. Emiatt meg vagyunk fosztva egy egyszerű hibaellenőrző módszertől, és az elírások váratlan hibákhoz vezetnek. Ez a probléma megoldható a Perl use strict;-jéhez vagy a Fortran IMPLICIT NONE-jához hasonlóan az E_STRICT direktívával.[77]

Webes problémák[szerkesztés]

A globális változók és a nem biztonságos szerverbeállítások kaput nyitottak olyan szkripteknek, amelyek URL-paramétereket tartalmaznak. A PHP-kézikönyv azt ajánlja, hogy kapcsoljuk ki a globális változókat a PHP konfigurációjában a register_globals=off beállításával. A PHP 4.2 óta ez volt az alapértelmezés; a PHP 5.3 elavultnak jelölte meg, és az 5.4-ből ki is vették a globális változókat.[78] Általában, minden változót először inicializálni kell.[79]

További (nem PHP specifikus) veszélyt jelentenek a webes alkalmazások számára az SQL-adattárak biztonsági hiányosságai és a nem biztonságos adatok biztonságosnak való elfogadása. Ennek kivédésére a különféle protokollokon keresztül kapott adatokat gondosan meg kell vizsgálni és át kell szűrni.[79][80]

Jegyzetek[szerkesztés]

  1. Version 8.3.6, 2024. április 11. (Hozzáférés: 2024. április 13.)
  2. a b Introduction: What can PHP do?. PHP Manual. (Hozzáférés: 2009. március 5.)
  3. a b c d e f g h i j History of PHP and related projects. The PHP Group. (Hozzáférés: 2008. február 25.)
  4. GPL-Incompatible, Free Software Licenses. Various Licenses and Comments about Them. Free Software Foundation. (Hozzáférés: 2012. március 11.)
  5. History of PHP. php.net
  6. PHP Manual: Preface, www.php.net
  7. PHP.net General FAQ
  8. Usage Stats for April 2007. (Hozzáférés: 2008. július 7.)
  9. Lerdorf, Rasmus (1995. június 8.). „Announce: Personal Home Page Tools (PHP Tools)”. comp.infosystems.www.authoring.cgi. (Web link). Hozzáférés: 2006. szeptember 17..
  10. Lerdorf, Rasmus: PHP on Hormones (mp3). The Conversations Network, 2007. április 26. (Hozzáférés: 2009. június 22.)
  11. Trachtenberg, Adam: Why PHP 5 Rocks!. O'Reilly, 2004. július 15. [2016. március 31-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. február 22.)
  12. a b php.net 2007 news archive. The PHP Group, 2007. július 13. (Hozzáférés: 2008. február 22.)
  13. Kerner, Sean Michael: PHP 4 is Dead—Long Live PHP 5. InternetNews, 2008. február 1. (Hozzáférés: 2008. március 16.)
  14. Late Static Binding in PHP. Digital Sandwich, 2006. február 23. [2008. július 27-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. március 25.)
  15. Static Keyword. The PHP Group. (Hozzáférés: 2008. március 25.)
  16. GoPHP5. [2011. július 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. március 28.)
  17. Using Register Globals. PHP. (Hozzáférés: 2008. április 4.)
  18. Prepare for PHP 6. CorePHP, 2005. november 23. [2008. március 1-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. március 24.)
  19. PHP 5.3 migration guide. The PHP project. (Hozzáférés: 2009. július 3.)
  20. Unicode. The PHP Group. (Hozzáférés: 2008. március 25.)
  21. Byfield, Bruce: Upcoming PHP release will offer Unicode support. linux.com, 2007. február 28. (Hozzáférés: 2009. június 23.)
  22. The PHP Group: PHP For Windows snapshots. PHP Windows Development Team. (Hozzáférés: 2009. május 25.)
  23. The PHP License, version 3.01. (Hozzáférés: 2010. május 20.)
  24. GPL-Incompatible, Free Software Licenses. Various Licenses and Comments about Them. Free Software Foundation. (Hozzáférés: 2011. január 3.)
  25. PHP Manual Image Processing and GD;. php.net. (Hozzáférés: 2011. április 9.)
  26. a b JavaServer Pages Technology — JavaServer Pages Comparing Methods for Server-Side Dynamic Content White Paper. Sun Microsystems. (Hozzáférés: 2008. február 25.)
  27. Archivált másolat. [2008. június 11-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. március 29.)[nincs a forrásban]
  28. PHP and MySQL. University of Alabama. [2008. február 28-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. február 25.)
  29. PHP: PHP Usage Stats. SecuritySpace, 2007. április 1. (Hozzáférés: 2008. február 24.)
  30. Usage of server-side programming languages for websites. W3Techs, 2010. október 29. (Hozzáférés: 2010. október 29.)
  31. Manual:Installation requirements#PHP. MediaWiki, 2010. január 25. (Hozzáférés: 2010. február 26.) „PHP is the programming language in which MediaWiki is written [...]”
  32. System requirements of SilverStripe. [2012. március 4-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. március 5.) „SilverStripe requires PHP 5.2+”
  33. About WordPress. (Hozzáférés: 2010. február 26.) „WordPress was [...] built on PHP”
  34. PHP and Drupal. Drupal.org. (Hozzáférés: 2010. június 13.)
  35. Moodle - About. Moodle.org. (Hozzáférés: 2009. december 20.)
  36. PHP and Facebook | Facebook. Blog.facebook.com. (Hozzáférés: 2009. július 29.)
  37. PHP and Digg. O'Reilly. (Hozzáférés: 2010. június 13.)
  38. How do computer languages work?. [2011. július 16-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. november 4.)
  39. (Gilmore 2006, p. 43)
  40. PHP Accelerator 1.2 (page 3, Code Optimisation) (PDF). Nick Lindridge. [2008. május 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. március 28.)
  41. eAccelerator. eaccelerator.net. (Hozzáférés: 2009. szeptember 18.)
  42. PHP Internals discussion. (Hozzáférés: 2011. július 12.)
  43. a b c d e PHP: PHP 4 ChangeLog. The PHP Group, 2008. január 3. (Hozzáférés: 2008. február 22.)
  44. PHP: Using PHP from the command line - Manual:. The PHP Group. (Hozzáférés: 2009. szeptember 11.)
  45. Downloads. PHP. (Hozzáférés: 2009. július 29.)
  46. 4.4.9 Release Announcement. PHP. (Hozzáférés: 2009. július 29.)
  47. a b c PHP: PHP 5 ChangeLog. The PHP Group, 2007. november 8. (Hozzáférés: 2008. február 22.)
  48. PHP manual: PDO. The PHP Group, 2011. november 15. (Hozzáférés: 2011. november 15.)
  49. Built-in web server. (Hozzáférés: 2012. március 26.)
  50. PHP: Release Process, 2011. július 23. (Hozzáférés: 2008. február 22.)
  51. Megjelent a PHP 8-as kiadás. (Hozzáférés: 2022. december 20.)
  52. Security and... Driving? (and Hiring) - Sean Coates: PHP, Web (+Beer). Sean Coates. [2009. június 29-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 29.)
  53. Computerworlduk.com[halott link], Interview: Ivo Jansch, February 26, 2008
  54. PHP Taint Mode RFC
  55. Developer Meeting Notes, Nov. 2005
  56. Taint mode decision, November 2007. [2009. február 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. március 29.)
  57. Hardened-PHP Project, 2008. augusztus 15. [2019. február 24-i dátummal az eredetiből archiválva]. (Hozzáférés: 2019. május 18.)
  58. PHPIDS, 2011. február 20. [2015. április 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2018. november 19.)
  59. Your first PHP-enabled page. The PHP Group. (Hozzáférés: 2008. február 25.)
  60. PHP: Basic syntax. The PHP Group. (Hozzáférés: 2008. február 22.)
  61. Bray, Tim; et al: Processing Instructions. Extensible Markup Language (XML) 1.0 (Fifth Edition). W3C, 2008. november 26. (Hozzáférés: 2009. június 18.)
  62. Variables. The PHP Group. (Hozzáférés: 2008. március 16.)
  63. Instruction separation. The PHP Group. (Hozzáférés: 2008. március 16.)
  64. Integers in PHP, running with scissors, and portability. MySQL Performance Blog, 2007. március 27. (Hozzáférés: 2007. március 28.)
  65. a b c d e Types. The PHP Group. (Hozzáférés: 2008. március 16.)
  66. Strings. The PHP Group. (Hozzáférés: 2008. március 21.)
  67. SPL - StandardPHPLibrary. PHP.net, 2009. március 16. (Hozzáférés: 2009. március 16.)
  68. Type Juggling. (Hozzáférés: 2018. november 22.)
  69. Problems with PHP. (Hozzáférés: 2010. december 20.)
  70. PHP.NET: Process Control. (Hozzáférés: 2009. augusztus 6.)
  71. a b PHP 5 Object References. mjtsai. (Hozzáférés: 2008. március 16.)
  72. a b Classes and Objects (PHP 5). The PHP Group. (Hozzáférés: 2008. március 16.)
  73. Object cloning. The PHP Group. (Hozzáférés: 2008. március 16.)
  74. PHP: Visibility - Manual. Theserverpages.com, 2005. május 19. [2010. szeptember 24-i dátummal az eredetiből archiválva]. (Hozzáférés: 2010. augusztus 26.)
  75. PHP Function List. The PHP Group. (Hozzáférés: 2008. február 25.)
  76. Developing Custom PHP Extensions. devnewz, 2002. szeptember 9. [2008. február 18-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. február 25.)
  77. PHP-Handbuch: Option error_reporting
  78. [1] Archiválva 2012. április 12-i dátummal a Wayback Machine-ben PHP Manual. PHP: Beschreibung der php.ini-Direktiven des Hozzáférés 2009. július 4.
  79. a b [2] Archiválva 2012. április 24-i dátummal a Wayback Machine-ben PHP Manual. PHP: Verwendung von Register Globals Hozzáférés 2009. július 4.
  80. [3] Archiválva 2012. március 10-i dátummal a Wayback Machine-ben PHP Manual. PHP: Vom Nutzer übermittelte Daten Hozzáférés 2009. július 4.

További információk[szerkesztés]