PHP er et objekt-orienteret server-side programmeringssprog anvendt til udvikling af dynamiske webapplikationer og websteder. Sproget blev grundlagt af Rasmus Lerdorf og udgivet første gang den 8. juni 1995. Projektet er open source, hvilket basalt set betyder, at alle har adgang til den underliggende kildekode, der er skrevet i programmeringssproget C. "PHP" er et rekursivt akronym for "PHP: Hypertext Preprocessor", men stod tidligere for "Personal Home Page Tools".
PHP er anvendt til at udvikle prominente services som Facebook, Wikipedia, Yahoo, WordPress, Drupal, m.fl. Det er det mest udbredte sprog til dynamiske webløsninger, fordi det har et stort fællesskab (community) i sit bagland. Det har gjort sproget interessant for nybegyndere såvel som øvede. PHP ligger i direkte konkurrence med Microsofts .Net-framework, Ruby, Python og Perl.
Historie PHP startede som et lille, simpelt CGI-script i Perl, der skulle bruges til at overvåge trafikken på Rasmus Lerdorfs personlige hjemmeside. Det var på dette tidspunkt aldrig intentionen, at sproget skulle nå ud over hans egen private server. Da Perl-scriptet var for langsomt til at løse sin opgave, blev den omskrevet til C.
Andre personer der brugte samme server opdagede Rasmus' CGI-wrapper, og spurgte om de kunne bruge den på deres respektive projekter. Ikke lang tid gik der, før der opstod efterspørgsel på mere funktionalitet. Som følge af efterspørgslen samlede Lerdorf en – efter eget udsagn halvfærdig – distribution med dokumentation, mailing-liste og FAQ. Distributionen blev kaldt Personal Home Page Tools, men ændrede senere navn til Personal Home Page Construction Kit.
Umiddelbart efter fortsatte Rasmus arbejdet og skrev den grundlæggende funktionalitet til at forbinde til, og arbejde med, en SQL-database. Dette værktøj blev kaldt Form Interpreter, eller blot FI.
PHP 3 thumb|Andi Gutmans I den senere om- og sammenskrivning blev det for første gang muligt at indsætte sin dynamiske PHP-kode i HTML-kontekst, frem for i separate filer. PHP 3 var endnu en omskrivning der blev udformet i samarbejde med Andi Gutmans og Zeev Suraski.
De blev lavet som en komplet omskrivning af PHP/FI, da PHP/FI i følge udviklerne var underdimensioneret til at lave et eCommerce-program de arbejdede på til et universitetsprojekt.
For at bygge på PHP/FI's eksisterende brugerbase samarbejdede Andi og Zeev med Rasmus, og offentliggjorde PHP 3.0 som den officielle efterfølger til PHP/FI.
PHP 3.0 blev officielt udgivet i juni 1998, efter omkring 9 måneder i offentlig test.
PHP 4 I vinteren 1998 gik Andi og Zeev i gang med en omskrivning af PHP's kerne. Målet var at forbedre ydeevnen af komplekse applikationer. Den nye motor, døbt Zend Engine, opfyldte målene. PHP 4.0 blev baseret på denne motor, og kombineret med en bred vifte af nye funktioner blev det udgivet i maj 2000.
PHP 5 PHP 5 blev udgivet i juli 2004 efter flere års aktiv udvikling og test. Version 5 er drevet af kernen Zend Engine 2.0. I PHP 5 kom der øget fokus på at forbedre OOP-delen, men der fulgte en lang række rettelser og tilføjelser, samt konventionelle modificeringer.
En anden markant ændring var automatisk hensyn til tidszoner, når man anvendte f.eks. date- og strtotime-funktionerne. Fra og med PHP 5 vil parametre og resultater til/fra disse funktioner være påvirket af serverens tidszone. Det betyder, at UNIX-tidspunktet "0" der i GMT tilsvarer 1. januar 1970 kl. 00:00, på danske servere automatisk blev konverteret til kl. 01:00. På trods af denne implementering af mange blev anset som en effektivisering, opstod der mange problemer under migreringen fra PHP 4 til 5, ganske enkelt fordi mange udviklere ikke var opmærksomme på denne ændring. Altså, ville den kode de var skrevet med manuelt hensyn til tidszoner, pludselig være automatisk, og i langt størstedelen af tilfældene derfor returnere ukorrekte resultater.
I PHP 5.1 blev der tilføjet understøttelse af PDO (PHP Data Object), der er et objekt-orienteret, mere sikkert og mere fleksibelt alternativ til den traditionelle MySQL-implementering. Det er ydermere annonceret at grundlæggende MySQL API vil blive fjernet fra PHP. Det vil dog ske ved en langsom udfasning, da man er velvidende omkring, at det stadig er det mest anvendte API til databaseadgang. Udviklere skal derfor begynde at anvende eksempelvis PDO, MySQLi eller tilsvarende alternativer.
I PHP5.3 blev tilføjet muligheden for at lave anonyme funktioner.
PHP 5.4 PHP 5.4 blev resultatet af det der skulle have været PHP 6. En af de kritiske ændringer i PHP version 5.4 har været beskyttelse mod en hacking-metode kaldt hash inject, hvor data sendt til serveren, er sammensat på en sådan måde, at det vil skabe enorme mængder ekstra beregninger på serveren, når dataene skal sorteres.
Der er også tilføjet et ny typehinting, callable. Det betyder, at man kan påtvinge at det parameter der videregives til en funktion kan kaldes – dvs. det typisk er en funktion.
PHP-teamet har også indført en ny notation for arrays, på formen [1, 2, 3, ...]. Samtidig er det blevet muligt, at gå direkte til en nøgle i et array returneret af en funktion. Eksempler på begge dele demonstreres her: function test() { return ['Værdi et', 'Værdi to']; } echo test(); // Værdi et
Den såkaldte "error supression", @-tegnet, man kan sætte foran funktioner for at de ikke skal udskrive fejlbeskeder, er blevet forbedret i sin hastighed. Oprindeligt var der tale om at udfase denne konstruktion.
Der kom også understøttelse af traits i OOP.
PHP er også blevet udstyret med en indbygget webserver. Denne er dog ikke beregnet til offentligt brug, men udelukkende til at teste sin kildekode.
Den omstridte og berygtede safe mode er blevet fjernet fuldkomment fra PHP, hvilket blev varslet flere år før annonceringen. I samme ombæring er register_globals og register_long_arrays også fjernet. register_globals har i mange år været til stor bekymring for sikkerheden i PHP-applikationer, da funktionen gør det nemt for uvedkommende at sende variabler med potentielt farligt indhold ind og blande sig i koden. Når register_globals var slået fra, eller som nu fjernet, skal programmøren selv importere udefrakommende variabler, og har derfor bedre kontrol med hvilke der kommer ind, og hvorledes de bliver valideret.
PHP 7 I 2014 og 2015 blev der udviklet en ny stor PHP-version, som blev nummereret PHP 7. Nummereringen af denne version involverede en del debat. Mens PHP 6 Unicode-eksperimentet aldrig var blevet frigivet, henviste flere artikler og bogtitler til PHP 6-navnet, hvilket kunne have forårsaget forvirring, hvis en ny version skulle genbruge navnet. Efter en afstemning blev navnet PHP 7 valgt.
PHP 7 introducerede også nye sprogfunktioner, herunder returnertypeerklæringer til funktioner, som supplerer de eksisterende parametertypeerklæringer og understøtter de skalære typer (integer, float, string, and boolean) i parameter og retur type erklæringer.
Overblik PHP benyttes til at skabe dynamisk indhold, herunder webshops, fora, CMS-systemer, intranets, databasebehandling, osv. Da det er et såkaldt general-purpose sprog er det ikke begrænset til at løse en bestemt slags opgaver, og udvikleren er derfor givet kreativ frihed, dels til at definere sin opgave, og dels til fremgangsmåden hvorpå denne skal løses. Disse to parametre gør sig ikke gældende for alle programmeringssprog.
Server PHP afvikles på webserver-software som eksempelvis Apache eller IIS. Almindeligvis når en besøgende ankommer til en hjemmeside, forespørges der på en side, og denne returneres af serveren. Her vil der på statiske webløsninger være tale om HTML og CSS. Når besøgende ankommer til en PHP-baseret server, vil en fortolker være til stede i processen mellem at en besøgende efterspørger på en side, og modtager den efterspurgte side. På dette ekstra trin i processen vil PHP-koden blive fortolket og behandlet, og således returnere et dynamisk resultat.
PHP har tre præ-installerede API'er til arbejde med databaser.
Filendelse Som endelse på filnavne for PHP-filer benyttes ofte .php, .php3, .php4, .php5 eller .phtml. Tallene der står i forlængelse af .php kan bruges af webserveren til at identificere, hvilken version af php-fortolkeren der skal bruges. Til fremvisning af selve PHP-filerne med syntaksfremhævning kan endelsen .phps på filnavnet benyttes.
Afgrænsning For at fortælle webserveren at der er tale om PHP koden, skal man afgrænse koden med nogle tags. Hvis man ikke gør det vil koden bare blive fortolket som almindelig tekst/HTML. Et PHP script starter altid med <?php eller <? og slutter med ?>, dog kan det også behandles ved brug af et HTML tag; <script language="php">. Der bruges dog også <?= ?> til et direkte print i html kode. Det ses ligeledes sjældent, at PHP åbnes med ASP tags som <% og %> og <%= %> til direkte print. Det er gyldig, hvis "asp_tags" er slået til i PHP konfigurationen – men dog yderst sjældent man ser det i praksis. Af hensyn bagudkompatibilitet bruges den såkaldte "shorthand" (<?=?>) kun sjældent i systemer der skal distribueres til forskellige servere. I PHP 6 er muligheden for brug af ASP tags blevet fjernet.
PHP i webmiljøer Når en browser forespørger om en PHP-side, så fortolkes koden først af webserveren vha. et plug-in-program, der enten oversættes sammen med webserveren (oftest Apache under GNU/Linux og Unix – se LAMP) eller som et CGI/ISAPI-program (oftest Internet Information Server eller Apache under Windows), der så genererer websiden, inden den bliver sendt af sted tilbage til browseren, som fortolker HTML-koden og viser hjemmesiden.
Anvendelse PHP benyttes blandt andet af til generering af Wikipedias websider, hvor den samlede PHP-løsning hedder MediaWiki.
PHP kan også bruges til andre formål end blot dynamiske websider, blandt andet kan shell scripts og programmer med grafisk brugerflade (gennem GTK+) også kodes med dette sprog.
PHP kan ses som et open source-alternativ til Microsofts Active Server Pages (ASP) og til CGI/Perl.
Fortolkeren til PHP er for det meste Zends Zend Engine, der er skrevet i C, og er blevet brugt i PHP siden PHP3 blev udgivet. PHP5, som blev udgivet d. 13. juli 2004, bruger Zend Engine II.
Til PHP findes der et udvidelsessæt af komponenter og hyppigt benyttede kodestykker – PEAR (PHP Extension and Application Repository) – meget i stil med CPAN til Perl.
Klassifikation PHP er kategoriseret som dynamisk og svagt, når det drejer sig om datatyper. Det betyder dels, at man kan arbejde med variabler og funktioner der ikke er deklareret fra start af, og ydermere, at der ikke er et striks forhold mellem en variabel-type og den type data variablen indeholder. Dvs. at undervejs i en eksekvering kan den samme variabel godt have inholdt både tekststrenge, tal, objekter og ressourcer. Dette gør sig eksempelvis ikke gældende i sprog som C++ og Object Pascal, hvor man må konvertere på tværs af typer.
PHP er også imperativ programmering.
PHP kontra konkurrenterne PHP er i almindelighed stærkt på sin performance/hastighed, samt at være open source og solidt understøttet af udviklerfællesskabet. Der findes mange fora og hjemmesider der tilbyder hjælp, guides og artikler, såvel som der findes tusindvis af udvidelser, frameworks og API'er.
.Net .Net er et samlet framework fra Microsoft der i web-sammenhæng spænder over C#, C++ og Visual Basic. .Net er ofte foretrukket af virksomheder grundet sin stærkere implementering (af bl.a. MVC) og bagud-kompatibilitet, og fordi netop .Net har været anvendt til business i mange år. De to sprog/frameworks kan et langt stykke hen ad vejen løse de samme opgaver.
Python