| PHP | ||||
|---|---|---|---|---|
| Paradigma | Imperatief, Objectgeoriënteerd (vanaf PHP 3) | |||
| Verschenen | 8 juni 1995 | |||
| Ontwerper | Rasmus Lerdorf | |||
| Ontwikkelaar | The PHP Group | |||
| Huidige versie | 8.5.12 | |||
| Typesysteem | dynamisch, zwak | |||
| Dialecten | Hack | |||
| Beïnvloed door | C, Perl, Python | |||
| Besturingssysteem | Multiplatform | |||
| Licentie | PHP-licentie 3.01 | |||
| Bestandsextensies | php, phar, phtml, php4, php3, php5, phps, php7, pht | |||
| Website | https://www.php.net/ | |||
| ||||
PHP (PHP: Hypertext Preprocessor, vroeger Personal Home Page) is een scripttaal, die bedoeld is om op webservers dynamische webpagina's te creëren. PHP is in 1994 ontworpen door Rasmus Lerdorf, een senior softwareontwikkelaar bij IBM. Lerdorf gebruikte Perl als inspiratie.
Aanvankelijk stonden de letters PHP voor Personal Home Page, maar sinds PHP 3.0 is de betekenis een recursief acroniem geworden: PHP: Hypertext Preprocessor. Deze naam geeft aan waar de taal meestal voor gebruikt wordt: informatie verwerken tot hypertext.
PHP is een scripttaal en is vergelijkbaar met Perl, Python en Ruby. Qua syntaxis lijkt PHP het meest op C, maar net als bij veel andere scripttalen moeten variabelen voorafgegaan worden door een dollarteken $. Dit is overgenomen uit de scripttaal Perl, waarvan PHP mede is afgeleid. In tegenstelling tot C is het in PHP wel mogelijk om naast procedureel programmeren ook objectgeoriënteerd te programmeren, net als in bijvoorbeeld Java, C++ en C#. In de eerste versies van PHP was het objectgeoriënteerd programmeren nog heel beperkt. Pas sinds versie 5 zijn de meest essentiële functies hiervoor allemaal beschikbaar.
PHP is een zogenaamde server-side scripting-taal, die hoofdzakelijk wordt gebruikt om op de webserver dynamische webpagina's te creëren. De gebruikte PHP-code is voor de gebruiker onzichtbaar. Alleen het resultaat is zichtbaar en ziet eruit als een gewone HTML-pagina. Doordat PHP als opensourcesoftware is uitgebracht, is het in relatief korte tijd zeer populair geworden. Er is een brede ondersteuning vanuit de community op het internet. Naast server-side scripting kan PHP ook gebruikt worden via de opdrachtregel of in grafische applicaties, bijvoorbeeld met PHP-GTK (PHP met GTK+).
PHP wordt vaak in combinatie met een relationele database gebruikt, meestal MySQL of PostgreSQL, maar ook MongoDB of mSQL. Er zijn veel verschillende toepassingsmogelijkheden voor PHP, zoals het verwerken van data, het aanspreken van databases, bestandsbewerking en het genereren van afbeeldingen en XML. Een deel hiervan zit ingebakken in de taal, een deel hiervan is via extensies en modules beschikbaar (onder andere via PEAR).
PHP werd in 1994 ontwikkeld door Rasmus Lerdorf. De eerste publieke versie werd Personal Home Page/Forms Interpreter genoemd en uitgegeven in 1995. Later dat jaar volgde versie 2. In 1997 herschreven Zeev Suraski en Andi Gutmans, twee Israëlische ontwikkelaars aan de Technion IIT, de PHP-parser. Het ontwikkelteam bracht PHP/FI 2 officieel in november 1997 uit, na maanden van beta-tests. Hierna begon de publieke test van PHP 3 en in juni 1998 werd PHP 3 officieel uitgebracht. Hierbij werd ook de naam veranderd naar PHP: Hypertext Preprocessor.
Suraski en Gutmans begonnen daarna met het herschrijven van de PHP-parser, met de Zend Engine als resultaat. In 1999 werd hiervoor Zend Technologies opgericht in Ramat Gan, Israël. De naam Zend is een samenvoegsel van hun beide voornamen, Zeev en Andi.
Op 22 mei 2000 werd PHP 4 uitgebracht, dat werd aangedreven door Zend Engine 1. Op 13 juli 2004 werd deze opgevolgd door PHP 5, aangedreven door de nieuwe Zend Engine 2. Ondanks dat PHP 5 al sinds 2004 beschikbaar was, gebruikten veel webservers pas sinds begin 2007 PHP 5, omdat eerdere versies niet stabiel genoeg waren. De meest recente stabiele versie is 5.6.29, die werd uitgebracht op 8 december 2016. Dit is tevens de laatste release van PHP 5 onder actieve ondersteuning. Vanaf 2017 tot en met 2018 werden voor PHP 5.6 alleen nog beveiligingsaanpassingen uitgebracht.
De belangrijkste kenmerken van PHP 5 waren het verbeterde objectgeoriënteerd programmeren, de hogere snelheid, de mogelijkheid om SQLite aan te spreken en de vernieuwde Extensible Markup Language (XML)-bibliotheek. Tot en met de laatste versie 5.6 zijn er nog vele functionaliteiten toegevoegd.
Een versie 6 is nooit verschenen. Er is wel een aanzet voor geweest en een belangrijk onderdeel zou ondersteuning voor Unicode moeten worden. Er was de nodige kritiek op de implementatie en er was ook een tekort aan ontwikkelaars die de benodigde grote aanpassingen konden uitvoeren. Uiteindelijk is de ontwikkeling in maart 2010 gestrand. Verschillende onderdelen die in versie 6 zouden komen, zijn naar versies 5.3 overgezet. Andere aanpassingen zoals traits en closure re-binding zijn in PHP 5.4 terechtgekomen. Om verwarring te voorkomen over de oorspronkelijk beoogde versie 6 (bijvoorbeeld boeken die al geschreven werden) en de werkelijke opvolger van de PHP 5-tak, werd besloten om door te nummeren bij 7.
Op 3 december 2015 kwam PHP 7.0.0 beschikbaar, aangedreven door Zend Engine 3, met sterk verbeterde snelheid en nieuwe functionaliteiten waaronder typehinting op scalaire types en returntypes. Op 1 december 2016 verscheen PHP 7.1.0. Nieuw in deze versie zijn onder andere: nullable-types; void-returntype voor functies en itereerbaar pseudotype.
Op 26 november 2020 is PHP 8 verschenen met sterk verbeterde functionaliteiten. Deze versie wordt aangedreven door Zend Engine 4.
PHP wordt veel gebruikt om op webservers dynamische webpagina's te creëren. De code van de pagina wordt op de webserver uitgevoerd en het resultaat wordt naar de computer van de bezoeker gestuurd en in de webbrowser getoond. Dit in tegenstelling tot client-side-scripting (zoals JavaScript), waarbij de webbrowser eerst de code van de webserver downloadt en vervolgens zelf (op de computer van de bezoeker) uitvoert. Wanneer een browser een PHP-document oproept, wordt op de server eerst de in het document opgenomen PHP-code uitgevoerd. Dit gebeurt door de PHP-interpreter (de PHP-engine). Het resultaat (meestal HTML) wordt door de webserver naar de browser gestuurd. PHP kan echter ook andere documenttypen, zoals afbeeldingen of XML, genereren.
PHP-documenten hebben op de server meestal de extensie .php, maar ook de oudere extensies worden nog sporadisch gebruikt. Deze bestandsnaam op de server wordt meestal verborgen voor de bezoeker, door gebruik te maken van URL-rewriting (het herschrijven van de URL).
PHP wordt vaak gebruikt in combinatie met het besturingssysteem Linux, de Apache-webserver en de MySQL-databasesoftware. Een dergelijke combinatie wordt afgekort tot LAMP. Het komt ook weleens voor dat men Windows gebruikt in plaats van Linux. WAMP is hierbij de afkorting voor systemen die Windows gebruiken en er wordt weleens de afkorting MAMP gebruikt voor de Apple Macintosh. Ook zijn er kant-en-klare programma's die een volledige WAMP-omgeving installeren. Voorbeelden hiervan zijn WAMP en XAMPP.
PHP wordt voor allerlei webapplicaties gebruikt, zoals bulletinboards/forums, contentmanagementsystemen, blogs en wiki's. Uit een analyse van W3Techs in mei 2022 blijkt dat op 77,4% van alle webservers waarvan de programmeertaal bekend is, PHP wordt gebruikt. Het aandeel neemt al jaren af, maar anno 2026 gebruikte nog altijd zeventig procent van de websites PHP of een variant (fork of uitbreiding) daarvan. Na een veiligheidslek in oktober 2026 werden duizenden veelgebruikte sites en apps offline gehaald, waaronder overheidssites en internationale nieuwsplatforms; zie ook het kopje Veiligheid.
In PHP-documenten kan op meerdere manieren tekst aan de gebruiker worden gepresenteerd. In server-side documenten kan PHP vrij tussen de HTML-tags worden aangeroepen. In onderstaand voorbeeld wordt alle tekst buiten de PHP-tags automatisch naar de browser gestuurd. Alles binnen de PHP-tags wordt door de PHP-interpreter uitgevoerd. Op deze wijze kunnen dynamische HTML-documenten worden gecreëerd.
<!DOCTYPE html>
<html>
<meta charset=utf-8>
<title>PHP Test</title>
<?php
// Dit is een regel met commentaar
/* Dit zijn twee regels
met commentaar */
echo 'Hello World';
?>
</html>
Variabelen beginnen met een dollarteken. Strings kunnen met enkele of met dubbele aanhalingstekens geschreven worden. Bij dubbele aanhalingstekens worden de variabelen in de string vervangen door hun waarden; dit wordt variable interpolation genoemd.
Hieronder een voorbeeld dat variable interpolation gebruikt om de URL van dit artikel aan de gebruiker te melden:
<?php
$url = "http://nl.wikipedia.org/wiki/PHP";
echo "U bevindt zich momenteel op $url. Welkom!";
// Of
echo "U bevindt zich momenteel op ".$url.". Welkom!";
?>
Voor interactie met een database gebruikt PHP een verbinding met een databasemanagementsysteem, bijvoorbeeld MySQL. Hiervoor kan onder andere de mysqli-library van PHP worden gebruikt:
<?php
$db_hostnaam = "localhost"; // De locatie waar de MySQL-service draait
$db_gebruiker = "gebruikersnaam"; // De gebruikersnaam waarmee naar de database kan worden verbonden
$db_wachtwoord = "wachtwoord"; // Het wachtwoord waarmee naar de database kan worden verbonden
$db_naam = "database"; // De naam van de database zelf, deze moet via de DBMS worden aangemaakt
$mysqli = new mysqli($db_hostnaam, $db_gebruiker, $db_wachtwoord, $db_naam);
?>
Vervolgens kunnen er na de verbinding, door middel van de SQL-taal, gegevens worden opgevraagd. Hieronder een voorbeeld om een nieuwsartikel op te halen:
<?php
$query = "SELECT * FROM nieuwsartikelen";
$result = $mysqli->query($query);
$row = $result->fetch_assoc();
echo htmlentities($row["titel"]);
echo htmlentities($row["bericht"]);
?>
De totaalsom van in PHP geschreven applicaties bleek over de jaren 1996-2003 goed te zijn voor ongeveer 29% van alle beveiligingskwetsbaarheden (van bijvoorbeeld cross-site scripting tot denial of service) die gemeld en geregistreerd waren met een CVE-verwijzing in de National Vulnerability Database, een door de Amerikaanse overheid opgezette website waar beveiligingsproblemen aan software worden aangemeld. Enkele specifieke taaleigenschappen en (standaard ingestelde) configuratieparameters (zoals magic quotes en register_globals) bleken PHP in het verleden onveilig te maken. Ondersteuning voor magic_quotes_gpc en register_globals is sinds versie 5.3.0 gemarkeerd als uitgefaseerd en sinds versie 5.4.0 volledig uit PHP verwijderd.
Daarnaast worden ook in PHP zelf met enige regelmaat beveiligingskwetsbaarheden aangetroffen en opgelost, ongeveer 658 stuks (geteld tot 15 april 2022).
Ten minste een van die beveiligingskwetsbaarheden werd in 2012 door Nederlanders ontdekt, bij de National Vulnerability Database bekend als CVE-2012-1823. De kwetsbaarheid was dat de broncode van PHP-pagina's op sommige serverconfiguraties op te vragen was door simpelweg een parameter aan de URL van een pagina toe te voegen. Versies 5.3.12 en 5.4.2 werden speciaal uitgebracht om een oplossing voor deze kwetsbaarheid te bieden.
In oktober 2026 meldden de PHP Foundation en het Europees Agentschap voor netwerk- en informatiebeveiliging (Enisa) twee kritieke kwetsbaarheden (CVE-2026-109618 en CVE-2026-109619) in PHP, beide met een CVE-score van 9,2 op een schaal tot 10, met een aankondiging van een patch voor de volgende dag. Hackers gebruikten de aankondiging echter om het veiligheidslek te vinden en te exploiteren, zodat verschillende toezichthouders adviseerden om sites offline te halen. Op 21 oktober werden duizenden websites preventief offline gehaald totdat de patch enkele uren later uitkwam. Het incident werd PHP2Shell genoemd.
Al sinds 2024 waren er vermoedens van een dergelijke kwetsbaarheid. Voor mensen was het lastig om de kwetsbaarheid uit te buiten, maar AI verlaagde de drempel en in de loop van 2026 maakten beveiligingsorganisaties en andere instellingen duidelijk dat er een ernstig probleem was. Het kleine ontwikkelingsteam miste echter menskracht en kon het niet eens worden over oplossingen. Toen het lek te vroeg door betrokken organisaties naar buiten werd gebracht, bleken noodmaatregelen nodig. Hackers werkten aan exploits. Grote organisaties hebben maatregelen getroffen, maar experts vrezen dat particulieren en kleine organisaties de patches niet tijdig installeren en dat hackers hun servers kunnen overnemen.
Veel broncode-editors bieden ondersteuning voor PHP, zoals syntaxiskleuring en automatische aanvulling. Enkele hiervan zijn:
Daarnaast zijn er voor PHP 5 verschillende frameworks beschikbaar die bepaalde taken van de programmeur overnemen. Enkele hiervan zijn:
Met behulp van PHPDoc kan documentatie vanuit de broncode gegenereerd worden; dit is vergelijkbaar met Javadoc voor Java. Ook voor unittesten zijn standaardoplossingen beschikbaar, zoals PHPUnit.
Externe links
Bronnen, noten en/of referenties