PHP programmeringsspråk | |
---|---|
Forfatter | PHP gruppe |
Opprinnelsesdato | 8. juni 1995 |
Siste versjon | 8.1.10 (1. september 2022) |
Bruk | Webapplikasjoner på serversiden |
Paradigmer | Imperativ , funksjonell , objektorientert , prosedyremessig , refleksjon |
Skriving | Svak |
Vanlige utvidelser | php |
Påvirket av | C ++ , Perl , C , Java , Tcl , HTML og JavaScript |
Referanseimplementering | |
Gjennomføring | Tolk |
Operativsystem | Multiplattform |
Tillatelse | PHP-lisens |
Nettsted | www.php.net |
PHP ( rekursivt akronym for "PHP: Hypertext Preprocessor", hypertekstforbehandler ; opprinnelig akronym for "Personal Home Page" [1] ) er et tolket skriptspråk , opprinnelig laget for å programmere dynamiske nettsider . PHP-tolken er gratis programvare distribuert under PHP-lisensen [2] .
For øyeblikket brukes den hovedsakelig til å utvikle webapplikasjoner på serversiden , men den kan også brukes til å skrive kommandolinjeskript eller frittstående applikasjoner med et grafisk grensesnitt . Et eksempel på programvare skrevet i PHP er MediaWiki , som Wikimedia Foundation wiki- prosjekter som Wikipedia er basert på .
Fremfor alt takket være spredningen av Wordpress [3] ( CMS skrevet i PHP), ifølge statistikk er det det mest brukte serversidespråket i verden [4] [5] [6] .
PHP ble født i 1994 av danske Rasmus Lerdorf , og var opprinnelig en samling CGI- skript som tillot enkel administrasjon av personlige sider. I følge den opprinnelige kunngjøringen av PHP 1.0 av forfatteren på nyhetsgruppen comp.infosystems.www.authoring.cgi, var den opprinnelige betydningen av akronymet P ersonal H ome Page . [7]
Den originale pakken ble senere utvidet og omskrevet av Lerdorf selv i C , og la til funksjoner som støtte for mSQL- databasen , og begynte å bli kalt PHP/FI, der FI står for F orm I nterpreter ( formtolker ), og ga muligheten til å integrere PHP-kode i HTML -kode for å forenkle opprettelsen av dynamiske sider. I 1997 ble det anslått at rundt 50 000 nettsteder var PHP-baserte. [8]
Språket begynte å nyte en viss popularitet blant nettprosjekter med åpen kildekode og ble dermed lagt merke til av Zeev Suraski og Andi Gutmans , to unge programmerere. De to samarbeidet i 1998 med Lerdorf om utviklingen av den tredje versjonen av PHP, hvis akronym fikk sin nåværende betydning, og skrev om motoren som ble døpt Zend fra en sammentrekning av navnene deres. Nøkkeltrekkene til PHP 3.0-versjonen, frukten av arbeidet deres, var den ekstraordinære utvidbarheten, tilkoblingen til databasen og den første støtten for objektparadigmet [9] . Ved slutten av 1998 var PHP 3.0 installert på omtrent 10 % av nettserverne på Internett.
PHP ble på dette tidspunktet modent nok til å konkurrere med serversidespråk som ASP , utviklet av Microsoft , og begynte å bli brukt i stor skala. Versjon 4 av PHP ble lansert i 2000 og inneholdt betydelige forbedringer [10] .
Populariteten til PHP-språket vokser stadig takket være dets fleksibilitet: i juni 2001 overskred det én million nettsteder som bruker det. Fra oktober 2002 brukte mer enn 45 % av Apache - serverne PHP [11] .
I 2004 var det et av hovedspråkene Facebook ble opprettet med .
I januar 2005 ble han tildelt tittelen "Programming Language of 2004" av TIOBE Programming Community Index [12] , en rangering som evaluerer populariteten til programmeringsspråk på grunnlag av informasjon samlet inn av søkemotorer .
I 2005 overskred LAMP - konfigurasjonen ( Linux , Apache , MySQL , PHP) 50 % av det totale antallet servere på verdensnettverket.
I 2008 ble PHP 5 den eneste stabile versjonen under utvikling. Fra og med PHP 5.3.0 implementerer språket en funksjon kalt "sen statisk binding" som kan brukes til å referere til den kalte klassen i en statisk arvekontekst. [13] [14]
Fra 5. februar 2008, på grunn av GoPHP5- initiativet støttet av en rekke PHP-utviklere, slutter mange av de høyprofilerte åpen kildekode-prosjektene å støtte PHP 4 i den nye koden og fremmer overgangen fra PHP 4 til PHP 5. [ 15]
PHP-versjon 5 nådde utgivelse 5.6 før den ble droppet fra et utviklings- og støttesynspunkt i januar 2019.
Versjon 7 ble utgitt 3. desember 2015 og er for tiden fortsatt under utvikling og støttes aktivt [16] .
Versjon 8 ble utgitt 27. november 2020. [17]
PHP tar på mange måter opp syntaksen til C , det samme gjør mange moderne språk, og Perl . Det er et svakt skrevet språk og fra versjon 5 forbedrer det støtten for det objektorienterte programmeringsparadigmet . Visse konstruksjoner avledet fra C , slik som operatorene mellom biter og styring av strenger som arrays , tillater i noen tilfeller å fungere på et lavt nivå; Imidlertid er det grunnleggende et språk på høyt nivå , en funksjon forsterket av eksistensen av dets mer enn 3000 kjerne - API -funksjoner.
PHP er i stand til å kommunisere med utallige DBMS inkludert MySQL , PostgreSQL , MariaDB , Oracle , Firebird , IBM DB2 , Microsoft SQL Server og til og med NoSql-databaser som MongoDB. Den støtter en rekke teknologier som XML , SOAP , IMAP , FTP , CORBA . Den integreres også med andre språk/plattformer som Java og .NET , og det er en wrapper for alle populære biblioteker som CURL, GD , Gettext , GMP, Ming, OpenSSL og mer.
Det gir et spesifikt API for samhandling med Apache , selv om det naturligvis fungerer med en rekke andre webservere . Den er godt integrert uten bruk av eksterne komponenter med MySQL / MariaDB DBMS som den har mer enn ett API (mysql, mysqli, PDO). Fra og med versjon 5 integrerer PHP en liten innebygd database, SQLite . [18] Av disse grunnene er det en enorm mengde PHP- skript og biblioteker fritt tilgjengelig på Internett .
Den har et arkiv kalt PEAR som gir et gjenbrukbart bibliotekrammeverk for utvikling av PHP- og PECL- applikasjoner som samler alle kjente utvidelser skrevet i C.
PHP har ennå ikke innebygd støtte for Unicode eller multibyte-strenger; Unicode-støtte er under utvikling for en fremtidig versjon av PHP og vil tillate bruk av ikke-ASCII-tegn i strenger og navn på funksjoner, klasser og metoder.
Prosentandelen av usikker programvare skrevet i PHP, av totalen av alle sikkerhetshull i programvare oppført av Common Vulnerabilities and Exposures , utgjorde: 12 % i 2003, 20 % i 2004, 28 % i 2005, 43 % i 2006, 36 % i 2007, 34,8 % i 2008, 29,9 % i 2009 og 27,2 % i 2010 [19] . Nesten alle disse kjente sårbarhetene stammer fra manglende overholdelse av beste praksis fra programmerere og fra relatert misbruk av spesielle funksjoner som tilbys av PHP, som ved visse bruksområder gir opphav til alvorlige sårbarheter. Et velkjent eksempel er problemene knyttet til misbruk av Register globals og Magic quotes , funksjoner som hvis de brukes feil kan degenerere til ekte bakdører i PHP-programmet ditt. For å unngå problemer av denne typen, har mange av disse funksjonene gradvis blitt avviklet eller til og med fjernet, slik som de to nevnte, i rekken av versjoner av PHP [20] [21] .
Mesteparten av programvaren med sikkerhetsproblemer (2006) kan midlertidig assosieres med gamle versjoner av PHP der standardkonfigurasjonene ga rom for en relativ enkelhet i å skrive programvare med potensielt alvorlige sikkerhetsproblemer.
Det er alltid en god idé å gå gjennom PHP-konfigurasjonen, vanligvis i php.ini-filen, for å sjekke hvilke funksjoner som er aktivert. Vanligvis er 3 typer konfigurasjoner dokumentert i selve filen: Standard PHP- konfigurasjon , konfigurasjon i et utviklingsmiljø som tillater for eksempel å se feil på skjermen og konfigurasjon i et produksjonsmiljø hvor feil typisk skrives i en loggfil.
Den offisielle nettsiden inneholder det historiske arkivet over utgåtte versjoner , oppdatert i mai 2019 [22] .
HackerangrepPHP kan bli utsatt for forskjellige hackerangrep [23] :
Variabelnavn i PHP starter alltid med et dollartegn ( $), og det neste tegnet må for eksempel ikke være et tall, $1eller $2er ikke gyldige variabelnavn.
Variabelnavn skiller mellom store og små bokstaver , det vil si at $ancorade $ANCORAer to forskjellige variabler.
En variabel kan inneholde alle tegnene A-Z, a-zog 0-9. _Når de er definert, blir de instansiert uten å eksplisitt definere deres "type":
$ hello = "Hei verden!" ;For å vise innholdet i $ciaokan du bruke setningen echo:
echo $ hei ;som viser " Ciao mondo!". Hvis variabelen $ciaoikke fantes, ville den vanligvis echogenerere en ikke-fatal feil ( Notice).
StringsI PHP er en streng med alfanumeriske tegn representert på to måter: ved å omslutte den i doble anførselstegn ( ") eller enkle ( '). Når du bruker doble anførselstegn, tolkes eventuelle spesialtegn (for eksempel tabulatoren eller nylinjetegnet, ) og innholdet i variablene returneres, det vil si: "col1\tcol2""riga1\nriga2"
echo "Hei er: $ hello " ;Trykk "Ciao vale: Ciao mondo!":. Med enkle anførselstegn lagres strengen og brukes som den er.
Eksempel på å komponere setningen "Wikipedia er fantastisk" på to måter: ved å bruke enkle og doble anførselstegn:
$ one = 'Wikipedia' ; $ to = 'er' ; $ tre = 'fantastisk' ; ekko $ en . '' . to dollar . '' . $ tre ; echo " $ en $ to $ tre " ; Array (og foreach)PHP behandler arrays som assosiative kart , det vil si som en liste over nøkler som er unikt assosiert med en bestemt verdi. Arrays i PHP kan derfor brukes som en felles matrise, for eksempel en liste (vektor), stack, kø eller annet. Videre kan et hvilket som helst element i arrayet i sin tur inneholde andre arrays, til og med flerdimensjonale [24] og alle elementene i arrayen eller sub-arrays kan være av forskjellige typer variabler, og gir dermed muligheten til å lage komplekse datastrukturer.
Arrays er dynamiske, faktisk kan de fjernes via unset();[25] .
Siden arrays i PHP er assosiative, kan de brukes via en konstruksjon kalt foreach[26] som gjør innholdstilgang levedyktig ved å få alle de individuelle nøkkelassosiasjonene → verdien av arrayen.
Eksempelkode på en assosiativ matrise der hvert bynavn tilsvarer antall innbyggere. Eksemplet viser hver by med antall innbyggere og deretter summen av alle innbyggere.
<? php $ residents = array ( 'Torino' => 908551 , 'Milan' => 1315791 , 'Roma' => 2753000 ); $ sum = 0 ; foreach ( $ innbyggere som $ city => $ nResidents ) { echo "City $ city har $ nResident innbyggere" ; $ sum + = $ nResident ; } echo "Det er $ sum innbyggere i alt!" ; ?>Utgangen av koden er:La città Torino ha 908551 abitanti. La città Milano ha 1315791 abitanti. La città Roma ha 2753000 abitanti. In tutto ci sono 4977342 abitanti
For ytterligere informasjon se den offisielle nettdokumentasjonen [24] .
Funksjoner i PHP kan ha et blandet sett med valgfrie parametere med standardverdier og nødvendige parametere. [27]
Eksempel på en funksjon med en nødvendig parameter og en valgfri en med en standardverdi.
<? php / ** * Program som utfører * summen av minimum 2 tall * og maksimum 3 * / funksjon sum ( $ n1 = 0 , $ n2 = 0 , $ n3 = 0 ) { return $ n1 + $ n2 + $ n3 ; } ekko sum ( 1 , 5 ); // OUTPUT: 6 ekkosum ( 1 , 24 ) ; // OUTPUT: 25 ekkosum ( 3 , 4 , 2 ) ; // OUTPUT: 9 ekkosum ( n1 : 5 , n3 : 5 ) ; // OUTPUT: 10 -> kan brukes fra versjon 8 ?>Enhver variabel av hvilken som helst type opprettet i funksjonen er lokal . For å spesifisere globale variabler inne i funksjonen, bruk global $variabile[28]
Eksempel:
<? php funksjon eksperiment () { global $ a ; $ a = "tre" ; $ b = "fire" ; echo "Under: $ a $ b " ; } $ a = "en" ; $ b = "to" ; echo "Før: $ a $ b " ; eksperiment (); echo "Etter: $ a $ b " ; ?>Resultatet blir Prima uno due Durante tre quattro Dopo tre due:.
Du kan inkludere en PHP-side i en annen for å kjøre kode for å unngå overflødig kode og for å få tilgang til variabler, funksjoner og klasser definert på den inkluderte siden.
For å gjøre dette brukes en av følgende instruksjoner: include[29] , include_once[30] , require[31] og require_once[32] . Eksempel:
<? php inkluderer 'header.php' ; ekko "Hei verden!" ; inkluderer 'footer.php' ; ?>Typer inkludering:
PHP tillater overføring av informasjon fra en side til en annen gjennom de forskjellige funksjonene som støttes av HTTP . Nærmere bestemt, GET -forespørsler (informasjon parametrisert i spørringsstrengen til nettadressen ), POST (informasjon som vanligvis stammer fra en tidligere innsending av et skjema ) og informasjonskapsler (informasjon inneholdt i små tekststrenger som er fysisk lagret i det lokale minnet til en nettleser), sammen med øktstøtte (funksjonalitet basert på bruk av informasjonskapsler ). Denne informasjonen kan brukes i PHP gjennom fire assosiative arrays kalt internt : $_GET,,, $_POST. Disse typene arrays kalles superglobaler [ 33] , det vil si at de er synlige på alle områder av programmet. $_COOKIE$_SESSION
I dette eksemplet på håndtering av en GET-parameter, med forespørselen http://example.org/esempio.php?pippo=Ciao, vil serveren laste innholdet av example.php (nedenfor) og vise "Hallo" i nettleseren.
<? php / * * Sjekk om "foo"-parameteren er mottatt via GET-metoden. * Hvis det oppdages, viser jeg det; hvis det ikke oppdages, advarer jeg brukeren. * / if ( isset ( $ _GET [ 'foo' ] ) ) { $ a = $ _GET [ 'foo' ]; // Lagre "foo"-parameteren i $ a-variabelen $ a = htmlentities ( $ a ); // Dette "defuserer" alt HTML-innhold i $ a ekko $ a ; // Vis på skjermen } else { echo "No foo name parameters found. Du må sende det!" ; } ?>Følgende eksempel skriver ut teksten til sangen 99 Bottles of Beer .
<? php / * * Dette er en kommentar. Andre måter å kommentere på er symbolene // og # * Denne typen kommentarer trenger ikke stjerner (*) på begynnelsen * av hver linje, men det gjøres etter konvensjon. Symbolene // og # * kommenterer kun teksten etter dem og opp til slutten av linjen; * det er ikke nødvendig å avslutte kommentaren med noen spesialtegn. * / / * * Først definerer vi en funksjon kalt "flertall". * Returnerer en "s" hvis argumentet som sendes ikke er 1. * / funksjon flertall ( $ tall ) { // Den ternære operatoren (! =? :) er en betinget struktur // lik if-else: (betingelse ? sant : falsk) returnere ( $tall ! = 1 ) ? 's' : '' ; } // Vi definerer en variabel kalt $ a_capo som inneholder en HTML-retur, // et returtegn og en ny linje: $ a_capo = "<br /> \ r \ n " ; for ( $ i = 99 ; $ i > 0 ; $ i - ) { echo " $ i bottle " . flertall ( $i ) . "av øl på veggen, $ a_capo " ; // Vi trenger ikke å gjenta ekkokommandoen for hver linje: echo " $ i bottle" . flertall ( $i ) . "av øl. $ a_capo Ta en ned, gi den rundt, $ a_capo " . ((( $ I - 1 ) ! = 0 ) ? $ I - 1 : 'ikke mer' ) . 'Bottle' . Flertall ( $ i - 1 ) . " Av øl på veggen. $ a_capo $ a_capo " ; / * * PHP lar deg lage strenger på flere linjer, så lenge * den finner et semikolon (;) som avslutter setningen. * Et punktum (.) setter sammen flere strenger. * Variabler, som begynner med tegnet "$", de tolkes også * innenfor doble anførselstegn ("), men ikke innenfor enkle anførselstegn ('). * Funksjoner, som flertall (), tolkes ikke i anførselstegn. * / } echo "Gå til butikken, $ a_capo kjøp litt mer, $ a_capo 99 flasker øl på veggen!" ; ?>PHP tillater databehandling fra MySQL-databaser. Dataene vil bli forespurt, satt inn og endret gjennom passende forespørsler ved å bruke noen utvidelser , inkludert MySQLi og PDO. [34]
MySQLi -utvidelsen , hvor "i" står for "forbedret", har blitt gjort tilgjengelig for PHP for å dra nytte av noen nye funksjoner som er gjort tilgjengelige av versjonene av MySQL versjon 4.1.3 og nyere, og er tilgjengelig for PHP 5 og nyere utgivelser .
Eksempel på tilkobling til database og forespørsel om data:
<? php // Tilkobling til MySQL med MySQLi-utvidelsen $ mysqli = new mysqli ( 'localhost' , ' database_user_name ' , 'database_password' , 'database_name' ); / * * Dette er den offisielle måten å sjekke om en MySQL-tilkobling har sviktet, * MEN $ connect_error støttes ikke før PHP 5.2.9 og 5.3.0. * / if ( $ mysqli -> connect_error ) { die ( "Tilkobling mislyktes, årsaker:" . $ mysqli -> connect_error ); } // La oss prøve en spørring forutsatt at vi behandler data fra en lignende adressebok: $ SQLQuery = $ mysqli -> spørring ( "SELECT address, phone FROM users WHERE name = 'Francesca'" ); // Fra denne spørringen vil vi få adressen og telefonnummeret til personen som heter Francesca, // forutsatt at det finnes i brukertabellen til den aktuelle databasen. // La oss nå "transformere" dataene mottatt fra spørringen til en assosiativ matrise som kan brukes senere $ row = $ SQLQuery -> fetch_assoc (); // Vi viser for eksempel telefonnummeret fra array - ekkoet "Francescas telefonnummer er:" . $ rad [ 'telefon' ]; // Lukk tilkoblingen til databasen $ mysqli -> close (); ?>For mer informasjon se den offisielle MySQLi online manualen. [35]
PHP-konfigurasjonsfilen, kalt php3.ini i PHP 3, og deretter ganske enkelt php.ini i senere versjoner, leses når språktolken startes og gir innstillingene til de ulike modulene som tolken er kompilert med. I den modulære serverversjonen av PHP skjer dette bare én gang, når webserveren startes . For CGI- og CLI - versjonene blir den imidlertid påkalt ved hver forespørsel.
Du kan bruke funksjonen til å se alle konfigurasjonsalternativene phpinfo().
Versjon | Utgivelsesdato | Støttes til |
---|---|---|
1.0 | 8. juni 1995 | |
2.0 | 1. november 1997 | |
3.0 | 6. juni 1998 | 20. oktober 2000 |
4.0 | 22. mai 2000 | 23. juni 2001 |
4.1 | 10. desember 2001 | 12. mars 2002 |
4.2 | 22. april 2002 | 6. september 2002 |
4.3 | 27. desember 2002 | 31. mars 2005 |
4.4 | 11. juli 2005 | 7. august 2008 |
5.0 | 13. juli 2004 | 5. september 2005 |
5.1 | 24. november 2005 | 24. august 2006 |
5.2 | 2. november 2006 | 6. januar 2011 |
5.3 | 30. juni 2009 | 14. august 2014 |
5.4 | 1. mars 2012 | 3. september 2015 |
5.5 | 20. juni 2013 | 10. juli 2016 |
5.6 | 28. august 2014 | 31. desember 2018 |
6.x | Ikke utgitt | N/A |
7.0 | 3. desember 2015 | 3. desember 2018 |
7.1 | 1. desember 2016 | 1. desember 2019 |
7.2 | 30. november 2017 | 30. november 2020 |
7.3 | 6. desember 2018 | 6. desember 2021 |
7.4 | 28. november 2019 | 28. november 2022 |
8.0 | 26. november 2020 | 26. november 2023 |
8.1 | 25. november 2021 | ?? november 2024 |
PHP er en direkte konkurrent til ASP.NET . Valget av de to språkene har fordeler og ulemper i henhold til dine behov [36] [37] [38] :
PRO | MOT | ||
PHP | ASP.NET | PHP | ASP.NET |
Det er åpen kildekode, så det er gratis og blir stadig forbedret av et stort antall mennesker i stedet for et enkelt selskap | Støtter alle programmeringsspråk og fungerer godt med apper eller C # | Den er ikke egnet for å bygge skrivebordsapplikasjoner | Mindre lett å lære og forstå enn PHP |
Det er flere online støttegrupper for å øke hastigheten på læringsprosessen enn ASP.NET | Varsle utviklere hvis de har gjort feil i kodingen før kompilering | PHP-feilhåndtering anses som dårlig sammenlignet med ASP.NET, så det kan ta lengre tid å avdekke et problem | Mindre støttesamfunn |
Lettere å lære og forstå enn ASP.NET | Den kommer med mange verktøy og funksjoner for å støtte programmerere. | Det gir mulighet for tilpasning som forårsaker feil og dårlig koding sammenlignet med ASP.NET | Det fungerer bare på en Microsoft-server |
Det fungerer også på Linux- servere | Oppretting av skrivebordsapplikasjoner. | Ved å være åpen kildekode er koden innenfor alles rekkevidde og er derfor mer utsatt for angrep | Dyrere på grunn av Microsoft -lisensen |
Ikke-uttømmende liste over IDE -er og enkle tekstredigerere med syntaksutheving .