PHP



Az összes tudás, amelyet az emberek az évszázadok során felhalmoztak PHP-ről, most már elérhető az interneten, és mi a lehető legkönnyebben hozzáférhető módon összegyűjtöttük és rendszereztük az Ön számára. Szeretnénk, ha gyorsan és hatékonyan hozzáférhetne mindenhez, amit a PHP-ről tudni szeretne; hogy a látogatás élményszerű legyen, és hogy úgy érezze, valóban megtalálta a keresett információt a PHP-ről.

Céljaink elérése érdekében nemcsak arra törekedtünk, hogy a PHP-ről a legfrissebb, legérthetőbb és legigazabb információkat szerezzük be, hanem arra is, hogy az oldal kialakítása, olvashatósága, betöltési sebessége és használhatósága a lehető legkellemesebb legyen, hogy Ön a lényegre, a PHP-ről elérhető összes adat és információ megismerésére koncentrálhasson, és ne kelljen semmi mással foglalkoznia, erről már gondoskodtunk Ön helyett. Reméljük, hogy elértük a célunkat, és hogy megtalálta a kívánt információt a PHP-ről. Üdvözöljük Önt, és arra biztatjuk, hogy továbbra is élvezze a scientiahu.com használatának élményét.

PHP
PHP-logo.svg
Paradigma Multi-paradigma : imperatív , funkcionális , objektum-orientált , procedurális , reflektív
Tervezte Rasmus Lerdorf
Fejleszt A PHP fejleszti csapata, a Zend Technologies
Elször jelent meg 1995. június 8 .  ( 1995-06-08 )
Stabil kiadás
8.011  Szerkessze ezt a Wikidatában / 2021. szeptember 23  ( 2021. szeptember 23. )
Elzetes verzió
8.1.0 Béta 1  Szerkessze ezt a Wikidatában /22 / 2021. július 22 .  ( 2021. július 22. )
Gépelési fegyelem Dinamikus , gyenge

7.0 verzió óta:

Fokozatos
Végrehajtási nyelv C (elssorban; egyes összetevk C ++ )
OS Unix-szer , Windows , macOS , IBM i , OpenVMS
Engedély PHP licenc (a Zend motor nagy része a Zend Engine License alatt )
Fájlnévkiterjesztések .php, .phar, .phtml, .pht,.phps
Weboldal www .php .net Szerkessze ezt a Wikidatában
Fbb megvalósítások
Zend Engine , HHVM , PeachPie , Quercus , Papagáj
Befolyásolta
Perl , HTML , C , C ++ , Java , Tcl , JavaScript , Hack
Befolyásolt
Hack , JSP , ASP

A PHP egy általános célú szkriptnyelv, amely webfejlesztésre irányul . Eredetileg Rasmus Lerdorf dán-kanadai programozó készítette 1994-ben. A PHP referencia implementációt most a The PHP Group készítette. A PHP eredetileg a személyes kezdlapot jelentette , de most a rekurzív inicializmust jelenti. PHP: Hypertext Preprocessor .

A PHP kódot rendszerint egy webszerveren dolgozza fel egy PHP tolmács , amely modulként , démonként vagy Common Gateway Interface (CGI) futtatható fájlként van megvalósítva. A webszerveren az értelmezett és végrehajtott PHP -kód eredménye - amely bármilyen típusú adat lehet, például generált HTML vagy bináris képadatok - egy HTTP -válasz egészét vagy egy részét képezi . Különféle websablon -rendszerek , webes tartalomkezel rendszerek és webes keretrendszerek léteznek, amelyek felhasználhatók a válasz megszervezésére vagy megkönnyítésére. Ezenkívül a PHP számos programozási feladathoz használható a webes kontextuson kívül, például önálló grafikus alkalmazásokhoz és robotdrón -vezérléshez . A PHP kód közvetlenül is végrehajtható a parancssorból .

A standard PHP tolmács, amelyet a Zend Engine hajt , egy ingyenes szoftver, amelyet a PHP licenc alatt adtak ki . A PHP -t széles körben hordozták, és a legtöbb webszerverre telepíthet, különféle operációs rendszereken és platformokon .

A PHP nyelv írásbeli formai specifikáció vagy szabvány nélkül alakult ki 2014 -ig, az eredeti implementáció pedig a de facto szabvány volt, amelyet más megvalósítások is követni kívántak. 2014 óta folyik a munka a hivatalos PHP specifikáció létrehozásán.

A W3Techs jelentése szerint 2021. áprilisától "a PHP-t az összes webhely 79,2% -a használja, amelyek szerveroldali programozási nyelvét ismerjük."

Történelem

Korai történelem

Rasmus Lerdorf , aki az eredeti Common Gateway Interface (CGI) komponenst írta , Andi Gutmans -szal és Zeev Suraski -val együtt , akik átírták a PHP 3 -at alkotó elemzt .

A PHP fejlesztése 1994 -ben kezddött, amikor Rasmus Lerdorf számos Common Gateway Interface (CGI) programot írt C nyelven , amelyeket személyes honlapjának karbantartására használt . Kiterjesztette ket a webes rlapokkal való munkavégzésre és az adatbázisokkal való kommunikációra , és ezt a megvalósítást "Személyes honlap/rlap tolmács" -nak vagy PHP/FI -nek nevezte.

A PHP/FI egyszer, dinamikus webes alkalmazások létrehozására használható . A hibabejelentés felgyorsítása és a kód javítása érdekében Lerdorf eredetileg 1995. június 8 -án bejelentette a PHP/FI kiadását "Personal Home Page Tools (PHP Tools) 1.0 verzió" néven a Usenet vitacsoport comp.infosystems.www.authoring.cgi címen . Ez a kiadás már rendelkezett a PHP alapvet funkcióival. Ez magában foglalta a Perl-szer változókat , az rlapkezelést és a HTML beágyazásának lehetségét . A szintaxis hasonlított a Perl -re , de egyszerbb, korlátozottabb és kevésbé következetes volt.

Példa a korai PHP szintaxisra :

<!--include /text/header.html-->

<!--getenv HTTP_USER_AGENT-->
<!--if substr $exec_result Mozilla-->
  Hey, you are using Netscape!<p>
<!--endif-->

<!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->
  Sorry, that record does not exist<p>
<!--endif exit-->
  Welcome <!--$user-->!<p>
  You have <!--$index:0--> credits left in your account.<p>

<!--include /text/footer.html-->

A korai PHP -t nem új programozási nyelvnek szánták , és organikusan ntt, és Lerdorf utólag megjegyezte: "Nem tudom, hogyan állítsam le, soha nem állt szándékomban programozási nyelvet írni [...] fogalmam sincs, hogyan kell programozási nyelvet írni, csak folyamatosan hozzáadtam a következ logikus lépést. " Egy fejleszti csapat kezdett összeállni, és több hónapos munka és béta tesztelés után 1997 novemberében hivatalosan is megjelentette a PHP/FI 2 -t.

Az a tény, hogy a PHP -t eredetileg nem tervezték, hanem organikusan fejlesztették ki, a funkciók következetlen elnevezéséhez és paramétereik következetlen rendezéséhez vezetett. Bizonyos esetekben a függvényneveket úgy választották meg, hogy illeszkedjenek az alacsonyabb szint könyvtárakhoz, amelyeket a PHP "csomagolt", míg a PHP néhány nagyon korai verziójában a függvénynevek hosszát belsleg használták kivonatfüggvényként , ezért a neveket a javítsa a hash értékek eloszlását .

PHP 3 és 4

Zeev Suraski és Andi Gutmans 1997 -ben átírták az elemzt , és létrehozták a PHP 3 alapját, megváltoztatva a nyelv nevét a rekurzív PHP: Hypertext Preprocessor rövidítésre . Ezután nyilvános tesztelését PHP 3 kezddött, és a hivatalos elindítása jött 1998 júniusában Suraski és Gutmans majd megkezdte az új újraírása PHP magjának, a termel Zend Engine 1999-ben azt is alapított Zend Technologies in Ramat Gan , Izrael .

2000. május 22 -én megjelent a PHP 4, amelyet a Zend Engine 1.0 hajtott meg. 2008 augusztusára ez az ág elérte a 4.4.9 verziót. A PHP 4 jelenleg nincs fejlesztés alatt, és nem terveznek biztonsági frissítéseket sem.

PHP 5

2004. július 1 -jén megjelent a PHP 5, amelyet az új Zend Engine II hajtott meg. A PHP 5 olyan új funkciókat tartalmazott, mint az objektum-orientált programozás továbbfejlesztett támogatása , a PHP Data Objects (PDO) kiterjesztés (amely könny és következetes felületet határoz meg az adatbázisokhoz való hozzáféréshez), valamint számos teljesítményfejlesztés. 2008 -ban a PHP 5 lett az egyetlen fejlesztés alatt álló stabil verzió. A kési statikus kötés hiányzott a PHP korábbi verzióiból, és hozzáadásra került az 5.3 -as verzióhoz.

Sok nagy horderej nyílt forráskódú projekt 2008. február 5-tl megszüntette a PHP 4 új kódban történ támogatását a GoPHP5 kezdeményezés miatt.

Idvel a PHP tolmácsok a legtöbb meglév 32 és 64 bites operációs rendszeren elérhetvé váltak , vagy a PHP forráskódból való építéssel, vagy elre elkészített bináris fájlok használatával. A PHP 5.3 és 5.4 verziói esetében a Microsoft Windows bináris disztribúciói csak a 32 bites IA-32 buildek voltak, amelyekhez 32 bites Windows kompatibilitási mód szükséges, miközben az Internet Information Services (IIS) szolgáltatást 64 bites Windows platformon használja. A PHP 5.5 verziója elérhetvé tette a 64 bites x86-64 -es buildeket a Microsoft Windows számára.

A PHP 5.6 hivatalos biztonsági támogatása 2018. december 31 -én véget ért.

PHP 6 és Unicode

A PHP vegyes véleményeket kapott, mivel hiányzott a natív Unicode támogatás az alapnyelv szintjén. 2005-ben egy Andrei Zmievski által vezetett projektben kezdeményezték a natív Unicode támogatást az egész PHP-ben, az International Components for Unicode (ICU) könyvtár beágyazásával , és a szöveges karakterláncok bels megjelenítését UTF-16- ként . Mivel ez jelents változásokat okozna mind a nyelv belsejében, mind a felhasználói kódban, a tervek szerint ezt a nyelv 6.0 verziójaként fogják kiadni, a többi fontosabb funkcióval együtt.

A szükséges változtatásokat megért fejlesztk hiánya, valamint a webes környezetben ritkán használt UTF-16-ba való konvertálásból származó teljesítményproblémák azonban késedelmet okoztak a projektben. Ennek eredményeként 2009-ben létrehozták a PHP 5.3 kiadást, amely számos, nem Unicode funkciót tartalmaz, amelyek a PHP 6-ból kerültek vissza, különösen a névterek. 2010 márciusában a projektet a jelenlegi formájában hivatalosan felhagyták, és elkészült egy PHP 5.4 kiadás, amely a PHP 6-ból származó legtöbb fennmaradó, nem Unicode funkciót tartalmazza, például a tulajdonságokat és a záró újbóli kötést. A kezdeti remények szerint új tervet fognak kialakítani az Unicode integrációjára, de 2014 -re még egyiket sem fogadták el.

PHP 7

2014 és 2015 folyamán kifejlesztettek egy új nagy PHP verziót, a PHP 7 -et. Ennek a verziónak a számozása némi vitát váltott ki a bels fejlesztk között. Míg a PHP 6 Unicode kísérletet még soha nem tették közzé, számos cikk és könyvcím a PHP 6 nevére hivatkozott, ami zavart okozhatott, ha egy új kiadás újból felhasználja a nevet. Szavazás után a PHP 7 nevet választották.

A PHP 7 alapja egy PHP ág , amelyet eredetileg PHP következ generációnak ( phpng ) neveztek el . Szerzje Dmitrij Sztogov, Xinchen Hui és Nikita Popov, és a PHP teljesítményének optimalizálását tzte ki célul a Zend Engine átalakításával, miközben megrizte a szinte teljes nyelvi kompatibilitást. 2014. július 14 -ig a WordPress -alapú benchmarkok, amelyek a phpng projekt f benchmark -csomagjaként szolgáltak, majdnem 100% -os teljesítménynövekedést mutattak. A phpng változásai megkönnyítik a teljesítmény javítását a jövbeli verziókban, mivel a kompaktabb adatstruktúrák és egyéb módosítások jobbnak tekinthetk a sikeres áttelepítéshez az éppen-idben (JIT) fordítóba. A jelents változások miatt az átdolgozott Zend Engine -t Zend Engine 3 -nak hívták , amely a PHP 5 -ben használt Zend Engine 2 utódja lett.

A phpng jelents bels változásai miatt a PHP kiadási folyamata szerint a PHP új f verziószámát kell kapnia , nem pedig egy kisebb PHP 5 kiadást. A PHP fbb verziói megszakíthatják a kód visszafelé kompatibilitását, ezért a PHP 7 lehetséget adott a PHPng-n kívüli egyéb fejlesztésekre, amelyek visszafelé kompatibilis szüneteket igényelnek. Különösen a következ változtatásokat tartalmazta:

  • Sok végzetes vagy helyreállítható szint örökölt PHP hibamechanizmust modern objektum-orientált kivételekkel váltottak fel .
  • A szintaxisa változó visszahivatkozási átdolgozták belsleg következetesebb és teljes, amely lehetvé teszi a használatát az üzemeltetk ->, [], (), {}, és ::, tetszleges értelmes bal oldali kifejezéseket.
  • A régi PHP 4-es konstrukciós módszerek támogatása megsznt.
  • A foreachnyilatkozat viselkedése kiszámíthatóbbá vált.
  • A PHP-ba beépített néhány osztály konstruktrei, amelyek hiba esetén nullát adtak vissza, a következetesség kedvéért kivételt cseréltek.
  • Számos karbantartott vagy elavult szerveralkalmazás -programozási interfészt (SAPI) és bvítményt távolítottak el a PHP magjából, különösen a régi mysqlbvítményt.
  • A list()karakterláncok támogatásának megszüntetése érdekében az operátor viselkedése megváltozott.
  • Megsznt a támogatás a régi ASP-stílusú elválasztókhoz <%és %>és <script language="php"> ... </script>.
  • Javítottuk azt a felügyeletet, amely lehetvé tette, hogy a kapcsoló utasítás több defaultzáradékot tartalmazzon.
  • Megsznt a hexadecimális számok támogatásának támogatása egyes implicit konverziókban karakterláncokból számtípusokká.
  • A balra és jobbra váltó kezelket úgy változtatták meg, hogy következetesebben viselkedjenek a platformokon.
  • A lebegpontos számok és az egész számok közötti konverziók megváltoztak (pl. A végtelenség nullára való átalakításra változott), és következetesebben valósultak meg a platformokon.

A PHP 7 új nyelvi szolgáltatásokat is tartalmazott. A legfontosabb, hogy visszatérési típusú deklarációkat vezetett be a funkciókhoz, amelyek kiegészítik a meglév paramétertípus -deklarációkat, és támogatja a skaláris típusokat (egész, lebeg, karakterlánc és logikai érték) a paraméter- és visszatérési típusú deklarációkban.

PHP 8

A PHP 8 2020. november 26 -án jelent meg. A PHP 8 egy f verzió, és a korábbi verziókhoz képest frissítéseket tartalmaz. Az új funkciók és figyelemre méltó változások a következk:

Éppen idben összeállítás

A PHP 8 támogatja az éppen idben történ fordítást .

A PHP 8 JIT fordítója lényeges teljesítményjavulást nyújthat bizonyos használati esetekben. Nikita Popov PHP-fejleszt kijelentette, hogy a legtöbb webhely teljesítményének javulása kevésbé lesz jelents, mint a PHP 5-rl PHP 7-re történ frissítés. A JIT-fordító hozzáadása miatti teljesítményjavítások várhatóan lényegesek lesznek a matematikai típusú mveleteknél, mint a gyakori webfejlesztési használati esetek. Ezenkívül a JIT -fordító a jövben bizonyos lehetségeket biztosít bizonyos kódok C -rl PHP -re történ áthelyezésére, egyes használati esetek teljesítményjavulásának köszönheten.

Az egyezési kifejezés hozzáadása

A PHP 8 bevezette ezt a matchkifejezést. Az egyezés kifejezés fogalmilag hasonlít egy switchállításhoz, és egyes használati esetekben kompaktabb. Mivel matchez egy kifejezés, az eredményét be lehet fogni egy változóba, vagy vissza lehet adni egy függvénybl.

Típusváltozások és kiegészítések

A PHP 8 bevezette az unió típusokat, egy új staticvisszatérési típust és egy új mixedtípust.

Az "attribútumokat", amelyeket más programozási nyelveken gyakran "megjegyzéseknek" is neveznek, a PHP 8 -ban adták hozzá, amelyek lehetvé teszik a metaadatok osztályokhoz való hozzáadását.

throwkijelentésbl kifejezéssé változott. Ez lehetvé teszi a kivételek olyan helyekre történ dobását, amelyek korábban nem voltak lehetségesek.

Szintaxis módosítások és kiegészítések

A PHP 8 olyan változtatásokat tartalmaz, amelyek lehetvé teszik az alternatív, tömörebb vagy következetesebb szintaxisokat számos esetben. Például a nullsafe operátor hasonló a null koalesszió operátorhoz , de metódusok hívásakor használatos. A következ kódrészlet nem dob hibát, ha getBirthday()null értéket ad vissza:

$human_readable_date = $user->getBirthday()->diffForHumans();

Constructor tulajdonság támogatása került a szintaktikai cukor , amely lehetvé teszi osztály tulajdonságait kell beállítani automatikusan paramétereket kap egy osztály konstruktor . Ez csökkenti az elírt kódszámot .

Egyéb kisebb változtatások közé tartozik ::classaz objektumokon való használat támogatása , amely a felhasználás alternatívájaként szolgál get_class(); nem rögzített fogások a try-catch blokkokban; változó szintaktikai csípések az ellentmondások feloldására; a megnevezett érvek támogatása; valamint a záró vesszk támogatása a paraméterlistákban, ami következetességet biztosít a záró vesszk támogatásával más környezetekben, például tömbökben.

Szabványos könyvtári változtatások és kiegészítések

  • Gyenge térképeket adunk PHP 8. WeakMaptartja objektumokra mutató hivatkozásokat, de ezek a hivatkozások nem akadályozza az ilyen tárgyak lehessen szemetet gyjtött . Ez teljesítményjavulást eredményezhet azokban az esetekben, amikor az adatok gyorsítótárazásba kerülnek ; ez különösen fontos az ORM -ek esetében .
  • Különféle beállítások az interfészeken, például támogatás hozzáadása az DateTimeobjektumok interfészekbl történ létrehozásához , és egy olyan Stringablefelület hozzáadása, amely használható típus -utalásokhoz.
  • Különféle új funkciók, beleértve az str_contains (), str_starts_with () és str_ends_with (); fdiv (); get_debug_type (); és get_resource_id ()
  • A token_get_all () objektum megvalósítása

További változtatások

  • A PHP C forráskódjába típusjegyzeteket is hozzáadtak, hogy a bels funkciók és módszerek "teljes típusinformációt tükrözzenek".
  • Öröklés privát módszerekkel
  • Absztrakt módszerek a tulajdonságok fejlesztésében

Kiadási elzmények

Változat Kiadási dátum -Ig támogatott Megjegyzések
Régi, már nem karbantartott verzió: 1.0 1995. június 8 Hivatalosan "Személyes kezdlap eszközök (PHP Tools)" néven. Ez a PHP név els használata.
Régi, már nem karbantartott verzió: 2.0 1997. november 1 Hivatalosan "PHP/FI 2.0" néven. Ez az els olyan kiadás, amelyet valójában PHP -ként lehetne jellemezni, mivel önálló nyelv, sok olyan funkcióval, amely a mai napig megmaradt.
Régi, már nem karbantartott verzió: 3.0 1998. június 6 2000. október 20 A fejlesztés egy személyrl több fejlesztre vált. Zeev Suraski és Andi Gutmans átírják ennek a verziónak az alapját.
Régi, már nem karbantartott verzió: 4.0 2000. május 22 2001. június 23 Hozzáadott fejlettebb kétlépcss elemzési/végrehajtási címkeelemz rendszer, az úgynevezett Zend motor.
Régi, már nem karbantartott verzió: 4.1 2001. december 10 2002. március 12 Bevezetett "szuperglobális" ( $_GET, $_POST, $_SESSION, stb)
Régi, már nem karbantartott verzió: 4.2 2002. április 22 2002. szeptember 6 register_globalsAlapértelmezés szerint letiltva . A hálózaton keresztül fogadott adatok már nem kerülnek közvetlenül a globális névtérbe, és ezzel bezárják az esetleges biztonsági réseket az alkalmazásokban.
Régi, már nem karbantartott verzió: 4.3 2002. december 27 2005. március 31 Bemutatta a parancssori felületet (CLI) a CGI kiegészítésére.
Régi, már nem karbantartott verzió: 4.4 2005. július 11 2008. augusztus 7 Javítva egy memória sérülési hibát, amely megszakította a bináris kompatibilitást a PHP 4.3.x verziójával összeállított kiterjesztésekkel.
Régi, már nem karbantartott verzió: 5.0 2004. július 13 2005. szeptember 5 Zend Engine II új objektummodellel.
Régi, már nem karbantartott verzió: 5.1 2005. november 24 2006. augusztus 24 Teljesítményjavítások a fordítóváltozók bevezetésével az újratervezett PHP Engine-ben. Hozzáadott PHP adatobjektumok (PDO), mint konzisztens felület az adatbázisok eléréséhez.
Régi, már nem karbantartott verzió: 5.2 2006. november 2 2011. január 6 Alapértelmezés szerint engedélyezte a szrbvítményt. Natív JSON támogatás.
Régi, már nem karbantartott verzió: 5.3 2009. június 30 2014. augusztus 14 Névtámogatás ; kési statikus kötések , ugráscímke (korlátozott goto ), névtelen funkciók , lezárások , PHP archívumok (phar), szemétgyjtés körkörös hivatkozásokhoz, továbbfejlesztett Windows támogatás, sqlite3, mysqlnd a libmysql helyettesítjeként, mint a MySQL -vel mköd bvítmények alapkönyvtára , fileinfo a mime_magic helyett a jobb MIME támogatásért, az Internationalization kiterjesztésért és az ereg kiterjesztés megszüntetéséért.
Régi, már nem karbantartott verzió: 5.4 2012. március 1 2015. szeptember 3 Jellemz támogatás, rövid tömb szintaxis támogatás. Eltávolított elemek: register_globals, safe_mode, allow_call_time_pass_reference, , és . Beépített webszerver. Számos fejlesztés a meglév szolgáltatásokban, teljesítményben és csökkentett memóriaigényben. session_register()session_unregister()session_is_registered()
Régi, már nem karbantartott verzió: 5.5 2013. június 20 2016. július 10 Támogatás a generátorokhoz , finallyblokkok a kivételek kezeléséhez, az OpCache (a Zend Optimizer+alapján) a hivatalos forgalmazásban.
Régi, már nem karbantartott verzió: 5.6 2014. augusztus 28 2018. december 31 Állandó skaláris kifejezések, variadic függvények , argumentum kicsomagolás, új hatványozó operátor, usea függvények és konstansok utasításának kiterjesztései , új phpdbghibakeres SAPI modulként és egyéb kisebb fejlesztések.
6.x Nem jelent meg N/A A PHP elhagyott, natív Unicode támogatást tartalmazó verziója.
Régi, már nem karbantartott verzió: 7.0 2015. december 3 2019. január 10 Zend Engine 3 (teljesítményfejlesztések és 64 bites egész számok támogatása Windows rendszeren), egységes változó szintaxis, AST -alapú fordítási folyamat, hozzáadva , bites lépések közötti konzisztencia a platformok között, ( null -összeolvadás ) operátor, Unicode kódpont menekülési szintaxis , visszatérési típus deklarációk, skalár típusú (egész, lebeg, karakterlánc és logikai) deklarációk, "rhajó" háromirányú összehasonlító operátor, generátor delegálás, névtelen osztályok , egyszerbb és következetesebben elérhet CSPRNG API, sok fennmaradó bels PHP "hiba" cseréje a modernebb kivételekkel , és rövidített szintaxis több elem névtérbl történ importálásához. Closure::call()<=>
Régi, már nem karbantartott verzió: 7.1 2016. december 1 2019. december 1 void return type , osztály állandó láthatósági módosítók
Régi, már nem karbantartott verzió: 7.2 2017. november 30 2020. november 30 Objektumparaméter és visszatérési típus deklaráció, Libsodium kiterjesztés, absztrakt metódus felülbírálása, paraméter típus kiszélesítése
Régebbi verzió, még mindig karbantartva: 7.3 2018. december 6 2021. december 6 Rugalmas heredoc és Nowdoc szintaxis, támogatása referencia hozzárendelés és tömb dekonstrukció listája (), PCRE2 támogatása, hrtime () függvény
Régebbi verzió, még mindig karbantartva: 7.4 2019. november 28 2022. november 28 Gépelt tulajdonságok 2.0, eltöltés, null-összefogó hozzárendelési operátor, javítja openssl_random_pseudo_bytes, Gyenge referenciák, FFI- idegen függvény interfész , mindig elérhet hash kiterjesztés, jelszó hash nyilvántartás, többbájtos karakterlánc-felosztás, reflexió referenciákhoz, kibontás ext/wddx, új egyéni objektum sorosítás gépezet
Jelenlegi stabil verzió: 8.0 2020. november 26 2023. november 26 Just-in-Time (JIT) összeállítás , negatív indexszel kezdd tömbök, szigorúbb/tisztább nyelvi szemantika (absztrakt vonásmódszerek érvényesítése), karakterlánc-szám-összehasonlítás, tisztább numerikus karakterláncok, TypeError érvénytelen aritmetikai/bitenkénti operátorokon, átminsítés különböz motorhibák, következetes típushibák a bels funkcióknál, végzetes hiba az inkompatibilis metódus aláírásoknál), területi beállításoktól független float to string átalakítás, változó szintaxis csípések, attribútumok, megnevezett argumentumok, match kifejezés, konstruktor tulajdonság promóció, unió típusok, vegyes típus, statikus visszatérési típus, nullsafe operátor, nem rögzített fogások, dobás kifejezés, JSON kiterjesztés mindig rendelkezésre áll.
Jövbeni megjelenés: 8.1 2021. november 25 2024. november Explicit oktális egész szám szerinti szó szerinti jelölés, felsorolások
Legenda:
Régi verzió
Régebbi verzió, még mindig karbantartva
Legújabb verzió
A legújabb elzetes verzió
Jövbeni megjelenés

2011. június 28 -tól kezdden a PHP fejleszti csapata végrehajtott egy ütemtervet a PHP új verzióinak megjelenéséhez. E rendszer szerint havonta legalább egy kiadásnak meg kell történnie. Évente egyszer egy kisebb kiadásnak kell megjelennie, amely új funkciókat tartalmazhat. Minden kisebb kiadást legalább két évig támogatni kell biztonsági és hibajavításokkal, majd legalább egy évig csak biztonsági javításokat kell végrehajtani, minden kisebb kiadásnál összesen hároméves kiadási folyamatot. A hároméves kiadási folyamat során semmilyen új funkciót nem szabad bevezetni egy kisebb kiadásba, kivéve, ha kicsi és önálló.

Kabala

A PHP projekt kabalafigurája az elePHPant , kék elefánt , oldalán PHP logóval, amelyet Vincent Pontier tervezett 1998 -ban. Plüssjáték formájában az elePHPant néha más szín .

Ennek a kabalának sok változata készült az évek során. Csak a Vincent Pontier eredeti tervezésén alapuló elePHPants minsül hivatalosnak a közösség részérl. Ezek gyjthetk, és néhányuk rendkívül ritka.

Szintaxis

A következ "Hello, World!" program PHP kódban van írva, HTML dokumentumba ágyazva :

<!DOCTYPE html>
<html>
    <head>
        <title>PHP "Hello, World!" program</title>
    </head>
    <body>
        <php
            echo '<p>Hello, World!</p>';
        >
    </body>
</html>

Mivel azonban nincs követelmény a PHP kód HTML -be ágyazására, a Hello, World! Legegyszerbb verziója . lehet így írni, és a záró címkét elnyben kell hagyni a tiszta PHP kódot tartalmazó fájlokban >

<php
    echo 'Hello, World!';
>

A PHP tolmács csak a határolóin belül hajtja végre a PHP kódot . A lehatárolóin kívül es dolgokat a PHP nem dolgozza fel, bár a nem PHP szövegek továbbra is a PHP kódban leírt vezérlszerkezetek hatálya alá tartoznak . A leggyakoribb elválasztók a PHP szakaszok <phpmegnyitása és bezárása. A rövidített forma is létezik. Ez a rövid határoló teszi a szkriptfájlokat kevésbé hordozhatóvá, mivel a helyi PHP konfigurációban le lehet tiltani a támogatást, ezért nem ajánlott. Ezzel szemben nincs javaslat az echo short tag ellen . A PHP 5.4.0 eltt ez a rövid szintaxis csak akkor mködik, ha a konfigurációs beállítás engedélyezve van, míg a PHP 5.4.0 és újabb verzióinál mindig elérhet. Mindezek a határolók célja a PHP-kód elkülönítése a nem PHP-tartalomtól, például a JavaScript- kódtól vagy a HTML-jelöléstl. Tehát a legrövidebb "Hello, World!" a PHP -ben írt program : ><<=echoshort_open_tag

<='Hello, World!';

Az elkülönítk els formája, <phpés az XHTML -ben és más XML -dokumentumokban helyesen formázott XML -feldolgozási utasításokat hoz létre. Ez azt jelenti, hogy a PHP-kód és egyéb jelölk keveréke a szerveroldali fájlban maga jól formázott XML. >

A változók dollár szimbólummal vannak ellátva , és a típust nem kell elre megadni. A PHP 5 típusdeklarációt vezetett be, amely lehetvé teszi a függvények számára, hogy paramétereiket egy adott osztály, tömbök, interfészek vagy visszahívási funkciók objektumaivá tegyék . A PHP 7 eltt azonban a típusnyilatkozatok nem használhatók skaláris típusokkal, például egész számmal vagy karakterlánccal.

Az alábbiakban egy példa látható a PHP változók deklarálására és inicializálására.

<php
    $name = 'John';  // variable of string type being declared and Initialized
    $age = 18;       // variable of integer type being declared and Initialized
    $height = 5.3;   // variable of double type being declared and Initialized
    echo $name . ' is ' . $height . 'm tall\n'; // concatenating variables and strings
    echo "$name is $age years old."; // interpolating variables to string
>

A függvény- és osztálynevektl eltéren a változónevek megkülönböztetik a kis- és nagybetket. Mind a ketts idézjelek (""), mind a heredoc karakterláncok lehetvé teszik a változó értékének interpolálását a karakterláncba. PHP kezeli újsorokon mint szóközöket módon egy szabad formájú nyelv és kijelentéseket megsznik pontosvessz. A PHP háromféle megjegyzés szintaxissal rendelkezik : /* */blokkolja és soronként megjegyzi; //vagy #egysoros megjegyzésekhez használják. Az echoutasítás egyike azon lehetségeknek, amelyeket a PHP nyújt a szöveg kimenetéhez.

Kulcsszavak és nyelvi szintaxis tekintetében a PHP hasonló a C stílus szintaxisához. iffeltételeket, forés whilehurkok, függvény visszatérési hasonló szintaxist nyelvek, mint a C, C ++, C #, Java és Perl.

Adattípusok

A PHP lazán gépelt . Platformfügg tartományban tárolja az egész számokat, akár 32, 64, akár 128 bites aláírt egész számként, amely megfelel a C nyelv hosszú típusnak . Az alá nem írt egész számokat bizonyos esetekben aláírt értékekké alakítják át, ami sok más programozási nyelvtl eltér. Az egész változókat hozzá lehet rendelni tizedes (pozitív és negatív), oktális , hexadecimális és bináris jelölésekhez.

A lebegpontos számok a platform-specifikus tartományban is tárolódnak. Lebegpontos jelöléssel vagy kétféle tudományos jelöléssel határozhatók meg . A PHP natív logikai típussal rendelkezik, amely hasonló a natív logikai típusokhoz Java és C ++ nyelven . A Boole-típusú konverziós szabályok használatával a nullától eltér értékeket igaznak, a nullát hamisnak kell értelmezni, mint a Perl és a C ++ esetében.

A null adattípus olyan változót képvisel, amelynek nincs értéke; NULLaz egyetlen megengedett érték ehhez az adattípushoz.

Az "erforrás" típusú változók küls forrásokból származó forrásokra való hivatkozásokat jelentenek. Ezeket általában egy adott kiterjesztés funkciói hozzák létre, és csak az azonos kiterjesztés funkciói dolgozhatják fel; példák a fájl-, kép- és adatbázis -erforrások.

A tömbök bármilyen típusú elemeket tartalmazhatnak, amelyeket a PHP képes kezelni, beleértve az erforrásokat, objektumokat és még más tömböket is. A rend megrzdik az értéklistákban és a kivonatokban , mind a kulcsokkal, mind az értékekkel, és a kett összekeverhet. A PHP támogatja a karakterláncokat is , amelyek használhatók idézjelekkel, idézjelekkel, nowdoc vagy heredoc szintaxissal.

A Standard PHP Library (SPL) szabványos problémák megoldására törekszik, és hatékony adathozzáférési felületeket és osztályokat valósít meg.

Funkciók

A PHP számos funkciót definiál az alapnyelvben, és számos különféle bvítményben is elérhet; ezeket a funkciókat jól dokumentálja az online PHP dokumentáció . A beépített könyvtár azonban sokféle elnevezési konvenciót és az ezzel kapcsolatos következetlenségeket tartalmaz, amint azt a fenti történelemben leírtuk.

Az egyéni funkciókat a fejleszt határozhatja meg:

function myAge(int $birthYear): string
{
    // calculate the age by subtracting the birth year from the current year.
    $yearsOld = date('Y') - $birthYear;

    // return the age in a descriptive string.
    return $yearsOld . ' year' . ($yearsOld != 1  's':'');
}

echo 'I am currently ' . myAge(1995) . ' old.';

2021 -ben a fenti mintaprogram eredménye: Jelenleg 26 éves vagyok.

A függvénymutatók helyett a PHP funkcióira a nevüket tartalmazó karakterlánc hivatkozhat. Ily módon a normál PHP függvények használhatók például visszahívásként vagy a függvénytáblákban . A felhasználó által definiált funkciók bármikor létrehozhatók prototípus nélkül . A függvények kódblokkokon belül definiálhatók, lehetvé téve egy futási idej döntést arról, hogy egy funkciót meg kell-e határozni. Van egy function_existsfüggvény, amely meghatározza, hogy adott névvel rendelkez funkciót már definiáltak -e. Funkció hívások kell használni, zárójelben, kivéve a nulla érv osztály konstruktor függvények nevezett a PHP-üzemeltet new, amely esetben a zárójelben nem kötelez.

A PHP 5.3 -ig a névtelen funkciók és bezárások támogatása nem létezett a PHP -ben. Bár create_function()létezik a PHP 4.0.1 óta, ez csak egy vékony burkolat, eval()amely lehetvé teszi a normál PHP funkciók létrehozását a program végrehajtása során. A PHP 5.3 szintaxist adott hozzá egy névtelen függvény vagy " lezárás " meghatározásához, amely a környez hatókör változóit rögzítheti. A gyorsított nyíl szintaxis hozzáadásra került a PHP 7.4 -ben:

function getAdder($x) {
    return fn($y) => $x + $y;
}

$adder = getAdder(8);
echo $adder(2); // prints "10"

A fenti példában a getAdder()függvény lezárást hoz létre az átadott argumentum használatával $x(a kulcsszó useimportál egy változót a lexikai kontextusból), amely további argumentumot vesz fel $y, és visszaadja a létrehozott lezárást a hívónak. Az ilyen függvény els osztályú objektum, vagyis tárolható egy változóban, paraméterként átadható más funkcióknak stb.

Szokatlanul dinamikusan gépelt nyelv esetén a PHP támogatja a függvényparaméterek típusdeklarációit, amelyeket futásidben hajtanak végre. Ezt a PHP 5.0 óta támogatják osztályok és interfészek, PHP 5.1 óta tömbök, PHP 5.4 óta "lehívható" és PHP 7.0 óta skaláris (egész, lebeg, karakterlánc és logikai) típusok. A PHP 7.0 típus deklarációkat is tartalmaz a függvény visszatérési típusaihoz, kifejezve úgy, hogy a típus nevét a paraméterek listája után, kettsponttal megelzi. Például getAddera korábbi példában szerepl függvényt olyan típusokkal lehet megjegyezni, mint a PHP 7:

function getAdder(int $x): Closure
{
    return fn(int $y): int => $x + $y;
}

$adder = getAdder(8);
echo $adder(2); // prints "10"
echo $adder(null); // throws an exception because an incorrect type was passed
$adder = getAdder([]); // would also throw an exception

A skalár típusú deklarációk alapértelmezés szerint gyenge gépelési elveket követnek. Például, ha egy paraméter típusa int, a PHP nem csak egész számokat, hanem konvertálható numerikus karakterláncokat, úsztatókat vagy logikai értékeket is megengedne ennek a függvénynek, és átalakítaná azokat. A PHP 7 azonban "szigorú gépelési" móddal rendelkezik, amely használatakor nem engedélyezi az ilyen konverziókat a függvényhívásokhoz és a fájlon belüli visszaadásokhoz.

PHP objektumok

Az alapvet objektum-orientált programozási funkciókat hozzáadtuk a PHP 3-hoz, és továbbfejlesztettük a PHP 4-ben. Ez lehetvé tette a PHP számára, hogy további absztrakciót nyerjen, megkönnyítve a kreatív feladatokat a nyelvet használó programozók számára. Az objektumkezelést teljesen átírták a PHP 5 -re, bvítve a funkciókészletet és javítva a teljesítményt. A korábbi verziók PHP, tárgyak kezelték, mint érték típusok . Ennek a módszernek az volt a hátránya, hogy a kódnak ersen ki kellett használnia a PHP "referencia" változóit, ha módosítani akarta az átadott objektumot, ahelyett, hogy másolatot készítene belle. Az új megközelítésben az objektumokra a fogantyú hivatkozik , és nem az érték.

A PHP 5 privát és védett tagváltozókat és módszereket vezetett be, valamint elvont osztályokat , végs osztályokat , absztrakt módszereket és végs módszereket . Ezenkívül bevezetett egy szabványos módszert a konstruktorok és destruktorok deklarálására , hasonlóan más objektum-orientált nyelvekhez, mint például a C ++ , és egy szabványos kivételkezelési modellt. Továbbá a PHP 5 interfészeket adott hozzá, és lehetvé tette több interfész megvalósítását. Vannak speciális interfészek, amelyek lehetvé teszik az objektumok kölcsönhatását a futásidej rendszerrel. Az ArrayAccess megvalósító objektumok használhatók tömb szintaxissal, az Iterator vagy IteratorAggregate megvalósító objektumok pedig a foreach nyelvi konstrukcióval . A motorban nincs virtuális tábla , ezért a statikus változókat a fordítás idején referencia helyett névvel kötik össze.

Ha a fejleszt létrehoz egy másolatot egy objektumról a fenntartott szó használatával clone, a Zend motor ellenrzi, hogy a __clone()módszer definiálva van -e . Ha nem, akkor meghív egy alapértelmezettet, __clone()amely másolja az objektum tulajdonságait. Ha egy __clone()metódust definiálunk, akkor lesz felels a szükséges tulajdonságok beállításáért a létrehozott objektumban. A kényelem kedvéért a motor olyan funkciót biztosít, amely importálja a forrásobjektum tulajdonságait, így a programozó a forrásobjektum egy-egy érték másolatával kezdheti, és csak felülírhatja a módosítandó tulajdonságokat.

A láthatóság PHP tulajdonságok és módszerek meghatározása a kulcsszavak public , private, és a protected. Az alapértelmezés nyilvános, ha csak var -t használ; varszinonimája a public. A bejelentett tételek publicbárhol elérhetk. protectedkorlátozza az örökölt osztályokhoz való hozzáférést (és az elemet meghatározó osztályhoz). privatea láthatóságot csak az elemet meghatározó osztályra korlátozza. Az azonos típusú objektumok hozzáférhetnek egymás privát és védett tagjaihoz, még akkor is, ha nem ugyanaz a példány.

Példa

Az alábbi példa az objektum-orientált programozás alapvet példája a PHP 8-ban:

<php

abstract class User
{
    protected string $name;

    public function __construct(string $name)
    {
        // make first letter uppercase and the rest lowercase
        $this->name = ucfirst(strtolower($name));
    }

    public function greet(): string
    {
        return "Hello, my name is " . $this->name;
    }

    abstract public function job(): string;
}

class Student extends User
{
    public function __construct(string $name, private string $course)
    {
        parent::__construct($name);
    }

    public function job(): string
    {
        return "I learn " . $this->course;
    }
}

class Teacher extends User
{
    public function __construct(string $name, private array $teachingCourses)
    {
        parent::__construct($name);
    }

    public function job(): string
    {
        return "I teach " . implode(", ", $this->teachingCourses);
    }
}

$students = [
    new Student("Alice", "Computer Science"),
    new Student("BOB", "Computer Science"),
    new Student("Charlie", "Business Studies"),
];

$teachers = [
    new Teacher("Dan", ["Computer Science", "Information Security"]),
    new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
    new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];

foreach ([$students, $teachers] as $users) {
    echo $users[0]::class . "s:\n";

    array_walk($users, function (User $user) {
        echo "{$user->greet()}, {$user->job()}\n";
    });
}

// Output of program:
// Students:
// Hello, my name is Alice, I learn Computer Science
// Hello, my name is Bob, I learn Computer Science
// Hello, my name is Charlie, I learn Business Studies
// Teachers:
// Hello, my name is Dan, I teach Computer Science, Information Security
// Hello, my name is Erin, I teach Computer Science, 3D Graphics Programming
// Hello, my name is Frankie, I teach Online Marketing, Business Studies, E-commerce

Megvalósítások

Az egyetlen teljes PHP implementáció az eredeti, egyszeren PHP néven ismert. Ez a legszélesebb körben használt és a Zend motor hajtja . Hogy megkülönböztessük a többi megvalósítástól, néha nem hivatalosan "Zend PHP" -nek hívják. A Zend Engine menet közben lefordítja a PHP forráskódját egy bels formátumba, amelyet végre tud hajtani, így tolmácsként mködik . Ez a PHP "referencia implementációja" is, mivel a PHP -nek nincs formális specifikációja, és így a Zend PHP szemantikája határozza meg a PHP szemantikáját. A PHP összetett és árnyalt szemantikája miatt, amelyet a Zend mködése határoz meg, a verseng megvalósítások nehezen tudnak teljes kompatibilitást nyújtani.

A PHP szkriptenkénti egyetlen kérés-végrehajtási modellje, valamint az a tény, hogy a Zend Engine egy tolmács, hatékonyságtalansághoz vezet; ennek eredményeként különféle termékeket fejlesztettek ki a PHP teljesítményének javítására. Annak érdekében, hogy felgyorsítsuk a végrehajtási idt, és ne kelljen minden alkalommal lefordítanunk a PHP forráskódot, amikor a weboldalt megnyitjuk, a PHP szkriptek a PHP motor bels formátumában is telepíthetk egy opcode gyorsítótár használatával, amely a lefordított formátum gyorsítótárazásával mködik . PHP -szkript (opcodes) a megosztott memóriában, hogy elkerülje a kód elemzésének és fordításának többletköltségét a szkript minden futtatásakor. Az opcode gyorsítótár, a Zend Opcache az 5.5 -ös verzió óta van beépítve a PHP -be . Egy másik példa a széles körben használt opkód gyorsítótárra az Alternatív PHP gyorsítótár (APC), amely PECL kiterjesztésként érhet el .

Míg a Zend PHP továbbra is a legnépszerbb megvalósítás, számos más megvalósítást fejlesztettek ki. Ezek egy része fordító, vagy támogatja a JIT -fordítást , és ezért teljesítményelnyöket kínálnak a Zend PHP -vel szemben a teljes PHP -kompatibilitás hiányában. Az alternatív megvalósítások a következk:

  • HHVM (HipHop Virtual Machine) -a Facebookon kifejlesztett és nyílt forráskódú verzió , amely a PHP kódot magas szint bájtkódmá alakítja (közismert nevén köztes nyelv ), amelyet futás közben dinamikusan lefordít x86-64 gépi kódra just-in-time (JIT) fordító, ami akár 6-szoros teljesítményjavulást eredményez. A 7.2 verzió óta azonban a Zend felülmúlta a HHVM -et, és a HHVM 3.24 az utolsó verzió, amely hivatalosan támogatja a PHP -t.
  • Parrot  - virtuális gép, amelyet dinamikus nyelvek hatékony futtatására terveztek; A Pipp átalakítja a PHP forráskódot a Parrot köztes ábrázolásává , amelyet aztán lefordít a Parrot bájtkódjába, és végrehajtja a virtuális gép.
  • PeachPie- a második generációs fordító. NET Common Intermediate Language (CIL) bájtkód, a Roslyn platformra épül; a Phalanger utódja, megosztva több építészeti elemet
  • Phalanger  - lefordítja a PHP -t a Common Intermediate Language (CIL) bájtkódba; a PeachPie eldje
  • Quercus  - a PHP -t Java bájtkódba fordítja
  • HipHop  - a Facebookon kifejlesztett és nyílt forráskódban elérhet, átalakítja a PHP -szkripteket C ++ kódba, majd lefordítja a kapott kódot, 50%-ra csökkentve a szerver terhelését. 2013 elején a Facebook több okból is elutasította a HHVM javára, beleértve a telepítési nehézségeket és a teljes PHP nyelv támogatásának hiányát, beleértve a create_function()és eval()konstrukciókat.

Engedélyezés

A PHP a PHP licenc alapján kiadott ingyenes szoftver , amely elírja, hogy:

Az ebbl a szoftverbl származó termékek nem nevezhetk "PHP" -nek, és a "PHP" sem jeleníthet meg a nevükben a [email protected] elzetes írásbeli engedélye nélkül. Azt jelezheti, hogy szoftvere a PHP -vel együtt mködik, ha azt mondja, hogy " Foo for PHP", ahelyett, hogy "PHP Foo" -nak vagy "phpfoo" -nak nevezné.

A PHP használatának ez a korlátozása a PHP licencet összeegyeztethetetlenné teszi az általános nyilvános licenccel (GPL), míg a Zend licenc az eredeti BSD licenchez hasonló hirdetési záradék miatt nem kompatibilis .

Fejldés és közösség

A PHP különböz ingyenes és nyílt forráskódú könyvtárakat tartalmaz a forráselosztásban, vagy felhasználja ket a kapott PHP bináris buildekben. A PHP alapveten Internet -alapú rendszer, beépített modulokkal a FTP ( File Transfer Protocol ) szerverek és számos adatbázis -kiszolgáló eléréséhez , beleértve a PostgreSQL , a MySQL , a Microsoft SQL Server és az SQLite (amely egy beágyazott adatbázis), LDAP kiszolgálók és mások . Számos, a C programozók számára ismers funkció, például az stdio családé, elérhet a normál PHP buildekben.

A PHP lehetvé teszi a fejlesztk számára, hogy bvítményeket írjanak C -ben , hogy funkcionalitást adhassanak a PHP nyelvhez. A PHP kiterjesztések statikusan lefordíthatók PHP -be, vagy futás közben dinamikusan betölthetk. Számos bvítmények írtak támogatást adni a Windows API , folyamat-menedzsment a Unix-szer operációs rendszerek , több byte húrok ( Unicode ), USE , és több népszer tömörítési formátum . A kiterjesztéseken keresztül elérhet egyéb PHP -szolgáltatások közé tartozik az integráció az IRC -vel , a képek és az Adobe Flash tartalom dinamikus generálása , a PHP Data Objects (PDO), mint absztrakciós réteg, amelyet az adatbázisokhoz való hozzáféréshez használnak, st a beszédszintézis . A nyelv néhány alapvet funkciója, például a karakterláncokkal és tömbökkel kapcsolatos, kiterjesztésekként is megvalósul. A PHP Extension Community Library (PECL) projekt a PHP nyelv bvítményeinek tárháza.

Néhány más projekt, például a Zephir , lehetvé teszi a PHP-bvítmények magas szint nyelven történ létrehozását és natív PHP-bvítményekbe való összeállítását. Ez a megközelítés ahelyett, hogy a PHP kiterjesztéseket közvetlenül C -be írná, leegyszersíti a bvítmények fejlesztését, és csökkenti a programozáshoz és teszteléshez szükséges idt.

2018 decemberére a PHP csoport tíz fbl állt: Thies C. Arntzen , Stig Bakken , Shane Caraveo , Andi Gutmans , Rasmus Lerdorf , Sam Ruby , Sascha Schumann , Zeev Suraski , Jim Winstead és Andrei Zmievski .

Zend Technologies egy PHP Certification alapuló PHP 7 vizsga (és korábban a PHP 5.5) a programozók számára, hogy legyen hiteles PHP fejlesztk.

Telepítés és konfigurálás

Két elsdleges módja van a PHP támogatásának webkiszolgálóhoz való hozzáadásához - natív webszerver modulként vagy CGI futtatható fájlként. A PHP közvetlen modul -interfésszel rendelkezik, amelyet Server Application Programming Interface (SAPI) néven hívnak , amelyet számos webszerver támogat, köztük az Apache HTTP Server , a Microsoft IIS , a Netscape (mára megsznt) és az iPlanet . Néhány más webszerver, például az OmniHTTPd, támogatja az Internet Server Application Programming Interface (ISAPI) interfészt , amely a Microsoft webszerver moduljának interfésze. Ha a PHP nem támogatja a webszervert, akkor mindig használható Common Gateway Interface (CGI) vagy FastCGI processzorként; ebben az esetben a webszerver úgy van konfigurálva, hogy a PHP CGI futtatható fájlját használja a PHP fájlokba irányuló összes kérés feldolgozásához.

A PHP-FPM (FastCGI Process Manager) egy alternatív FastCGI implementáció a PHP-hez, amely az 5.3.3-as verzió óta a hivatalos PHP-terjesztéssel együtt jár. A régebbi FastCGI implementációhoz képest néhány további funkciót tartalmaz, amelyek fleg a nagy terhelés webszerverek számára hasznosak.

Ha a PHP-t parancssori szkriptekhez használja, akkor PHP parancssori felületre (CLI) van szükség. A PHP támogatja a CLI szerver alkalmazásprogramozási felületet (SAPI) a PHP 4.3.0 óta. Ennek az SAPI -nak a f célja a shell alkalmazások fejlesztése PHP segítségével. Elég sok különbség van a CLI SAPI és más SAPI -k között, bár sok hasonló viselkedést mutatnak.

A PHP -nek van egy SAPI nev közvetlen modul interfésze a különböz webszerverekhez; a PHP 5 és az Apache 2.0 esetében Windows rendszeren a php5apache2.dll nev DLL -fájl formájában kerül forgalomba , amely egy olyan modul, amely egyéb funkciók mellett interfészt biztosít a PHP és a webszerver között, olyan formában, a szerver megérti. Ez az rlap az úgynevezett SAPI.

Különféle SAPI -k léteznek a különböz webszerver -bvítményekhez. Például a fent felsoroltakon kívül a PHP nyelvhez tartozó egyéb SAPI-k közé tartozik a Common Gateway Interface (CGI) és a parancssori felület (CLI).

A PHP asztali grafikus felhasználói felület (GUI) alkalmazások írására is használható a PHP-GTK kiterjesztés használatával. A PHP-GTK nem szerepel a hivatalos PHP disztribúcióban, és kiterjesztésként csak a PHP 5.1.0 és újabb verzióival használható. A PHP-GTK telepítésének leggyakoribb módja a forráskódból történ fordítás.

Amikor a PHP-t felhkörnyezetben telepítik és használják , szoftverfejleszt készletek (SDK-k) állnak rendelkezésre a felh-specifikus szolgáltatások használatához. Például:

Számos konfigurációs lehetség támogatott, amelyek egyaránt befolyásolják a PHP alapvet funkcióit és bvítményeit. A konfigurációs fájlt php.inikülönböz helyeken keresik, a PHP használatának módjától függen. A konfigurációs fájl több részre van felosztva, míg néhány beállítási lehetség a webszerver konfigurációjában is megadható.

Használat

A PHP egy általános célú szkriptnyelv, amely különösen alkalmas szerveroldali webfejlesztésre , ilyenkor a PHP általában webszerveren fut . A kért fájlban lév minden PHP -kódot a PHP futtatókörnyezet hajt végre , általában dinamikus weboldal -tartalom vagy dinamikus képek létrehozásához, amelyeket webhelyeken vagy máshol használnak. Használható parancssori szkriptekhez és ügyféloldali grafikus felhasználói felület (GUI) alkalmazásokhoz is. A PHP a legtöbb webszerveren, számos operációs rendszeren és platformon telepíthet , és számos relációs adatbázis -kezel rendszerrel (RDBMS) használható. A legtöbb web hosting szolgáltató támogatja a PHP -t ügyfelei számára. Ingyenesen elérhet, és a PHP Csoport biztosítja a teljes forráskódot a felhasználók számára, hogy saját használatra készítsék, testreszabják és bvítsék.

Az eredetileg tervezett, hogy dinamikus weboldalakat , PHP most fként a kiszolgáló-oldali script , és hasonló más szerver oldali programozási nyelv, amely a dinamikus tartalmat egy web szerver egy kliens , mint például a Microsoft s ASP.NET , Sun Microsystems " Java Server Pages , és mod_perl. A PHP számos szoftverkeret kifejlesztését is vonzotta , amelyek építelemeket és tervezési struktúrát biztosítanak a gyors alkalmazásfejlesztés (RAD) elsegítésére. Néhány ezek közé PRADO , CakePHP , Symfony , CodeIgniter , Laravel , Yii Framework , Phalcon és Laminas , szolgáltatásokat nyújtanak hasonló más web keretek .

A LAMP architektúra népszervé vált a webiparban a webes alkalmazások telepítésének egyik módjaként. A PHP -t általában P -ként használják ebben a csomagban a Linux , az Apache és a MySQL mellett , bár a P utalhat a Pythonra , a Perl -re vagy a három keverékére is. Hasonló csomagok, a WAMP és a MAMP , Windows és macOS rendszerekhez is elérhetk , az els bet a megfelel operációs rendszerre vonatkozik. Bár a PHP és az Apache is a macOS alaptelepítésének része, ezeknek a csomagoknak a felhasználói egy egyszerbb telepítési mechanizmust keresnek, amely könnyebben naprakészen tartható.

A speciális és fejlettebb használati forgatókönyvekhez a PHP jól meghatározott és dokumentált módot kínál az egyéni bvítmények C vagy C ++ nyelven történ írására . Amellett, hogy kibvíti magát a nyelvet további könyvtárak formájában , a bvítmények módot nyújtanak a végrehajtási sebesség javítására ott, ahol ez kritikus, és van hová fejldni egy valódi fordított nyelv használatával . A PHP jól definiált lehetségeket is kínál más szoftverprojektekbe való beágyazáshoz. Így a PHP könnyen használható bels szkriptnyelvként egy másik projekthez, és szoros kapcsolatot biztosít a projekt specifikus bels adatstruktúráival .

A PHP vegyes véleményeket kapott, mivel nem támogatta a többszálasítást az alapvet nyelvi szinten, bár a szálak használatát a "pthreads" PECL kiterjesztés teszi lehetvé.

Elkészült a parancssori felület, a php-cli és két ActiveX Windows Script Host parancsfájlmotor PHP-hez.

Népszerségi és használati statisztikák

A PHP -t olyan webes tartalomkezel rendszerekhez használják, mint a MediaWiki , WordPress , Joomla , Drupal , Moodle , eZ Publish , eZ Platform és SilverStripe .

A PHP -t használó webhelyek közé tartozik a Facebook , a Digg , a Dailymotion és a Tumblr .

2013 januárjában a PHP -t több mint 240 millió webhelyen használták (a mintában szereplk 39% -a), és 2,1 millió webszerverre telepítették .

2021 márciusától a PHP-t használták szerveroldali programozási nyelvként a weboldalak 79,1% -án, szemben a korábbi 83,5% -kal, ahol a nyelv meghatározható volt, és a PHP 7 a nyelv leggyakrabban használt verziója az összes 50,3% -ával az internetes webhelyek ezt a verziót használják.

Biztonság

2019 -ben a Nemzeti Sebezhetségi Adatbázis által felsorolt sebezhetségek 11% -a PHP -hez kapcsolódott; történelmileg az adatbázisban 1996 óta felsorolt biztonsági rések mintegy 30% -a PHP -hez kapcsolódik. Magának a nyelvnek vagy alapvet könyvtárainak technikai biztonsági hibái nem gyakoriak (2009 -ben 22, ez az összes 1% -a, bár a PHP a felsorolt programok körülbelül 20% -ára vonatkozik). Felismerve, hogy a programozók hibákat követnek el, egyes nyelvek magukban foglalják a szennyezdés -ellenrzést, hogy automatikusan felismerjék a bemeneti ellenrzés hiányát, ami sok problémát okoz. Egy ilyen funkciót fejlesztenek a PHP számára, de a kiadásba való felvételét korábban többször is elutasították.

Vannak olyan fejlett védelmi javítások, mint a Suhosin és a Hardening -Patch, amelyeket kifejezetten web hosting környezetekhez terveztek.

Korábban a PHP régi verziói rendelkeztek bizonyos konfigurációs paraméterekkel és alapértelmezett értékekkel olyan futási idej beállításokhoz, amelyek miatt egyes PHP -alkalmazások hajlamosak voltak a biztonsági problémákra. Ezek magic_quotes_gpcés a register_globalskonfigurációs irányelvek voltak a legismertebbek; az utóbbi minden URL -paramétert PHP -változóvá tett, és megnyitotta az utat a súlyos biztonsági rések eltt, lehetvé téve a támadó számára, hogy beállítsa minden inicializálatlan globális változó értékét, és zavarja a PHP -parancsfájl végrehajtását. A " varázslatos idézetek " és a "globális regisztráció" beállítások támogatása megsznt a PHP 5.3.0 óta, és megsznt a PHP 5.4.0 -ból.

Egy másik példa a futásidej beállítások esetleges sérülékenységére az, hogy nem sikerült letiltani a PHP végrehajtását (például a enginekonfigurációs irányelv használatával) abban a könyvtárban, ahol a feltöltött fájlokat tárolják; engedélyezése rosszindulatú kód végrehajtását eredményezheti a feltöltött fájlokban. A legjobb gyakorlat az, ha vagy megkeresi a képkönyvtárat a webszerver számára elérhet dokumentumgyökérön kívül, és közvetít szkript segítségével jeleníti meg, vagy letiltja a PHP végrehajtását a feltöltött fájlokat tároló könyvtárban.

Ezenkívül a PHP -bvítmények dinamikus betöltésének engedélyezése ( enable_dlkonfigurációs irányelvvel) megosztott webes tárhelyi környezetben biztonsági problémákhoz vezethet.

Az olyan implicit típusú konverziók, amelyek azt eredményezik, hogy a különböz értékeket egyenlként kezelik, néha a programozó szándékával ellentétben, biztonsági problémákhoz vezethetnek. Például az összehasonlítás eredménye '0e1234' == '0'az true, hogy a számokként értelmezhet karakterláncok számokká alakulnak át; ebben az esetben az els összehasonlított értéket tudományos jelölésként kell kezelni, amelynek értéke (0 × 10 1234 ), ami nulla. Az ilyen hibák hitelesítési sebezhetségeket eredményeztek az Simple Machines Forum , a Typo3 és a phpBB fájlokban, amikor összehasonlították az MD5 jelszó -kivonatokat . Az ajánlott módszer a hash_equals () ( támadásbiztonsági idzítés ), strcmpvagy az identitás -operátor () használata ===, mint '0e1234' === '0'eredmény false.

A 2013 elemzését mint 170.000 weboldal defacements által kiadott Zone-H , a leggyakrabban (53%) alkalmazott technika volt kiaknázása fájl felvétele sérülékenység , többnyire bizonytalan használata a PHP nyelvi konstrukciók include, requireés allow_url_fopen.

2021. áprilisától a W3Techs jelentése szerint a PHP -t használó webhelyek 64% -a 7.2 -es vagy régebbi verziót használ (amelyet a The PHP Development Team már nem támogat ), az összes PHP -webhely 35% -a pedig 5.6 vagy régebbi verziót használ.

Az 5 -ös verziót továbbra is az összes webhely 24,5% -a használja (2021. szeptember). Ersen ajánlott áttérni a PHP 7 -es vagy 8 -as verziójára, és a random_int () parancsot használni a rand () vagy az mt_rand () helyett. Két támadást lehet végrehajtani PHP entrópiaforrásokon: "Seed Attack" és "State recovery attack". A jelenlegi GPU technológiákkal a támadó másodpercenként akár 2^30 MD5 számítást is elvégezhet 250 dolláros GPU -val, míg további 500 dollárral akár 2^32 számítást is elérhet. A " Születésnapi támadás " kombinációjával ez súlyos biztonsági résekhez vezethet.

Lásd még

Hivatkozások

További irodalom

Küls linkek

Opiniones de nuestros usuarios

Leila Pusztai

Azt hittem, hogy már mindent tudok a PHP, de ebben a cikkben rájöttem, hogy néhány általam jónak hitt részlet nem is olyan jó. Köszönöm az információt

Vanda Antal

A PHP nyújtott információk igazak és nagyon hasznosak. Jól van

Izabella Ferenczi

A PHP szóló bejegyzés nagyon hasznos volt számomra., Köszönöm

Zoltan Boda

Mindig jó tanulni. Köszönöm a cikket a PHP