„PHP“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[ungesichtete Version][ungesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Dutch damager (Diskussion | Beiträge)
+Quellen, Wikilinks, Layout, NPOV, Stil, Typo, Mängel-Abschnitt nochmal verständlicher ausgeführt. So, jetzt geh ich Wäsche aufhängen.
Zeile 16: Zeile 16:
}}
}}


'''PHP''' ([[rekursives Akronym|rekursives]] [[Backronym]] für „PHP: [[Hypertext|'''H'''ypertext]] [[Präprozessor|'''P'''reprocessor]]“, ursprünglich „'''P'''ersonal [[Homepage|'''H'''ome '''P'''age]] Tools“) ist eine [[Skriptsprache]] mit einer an [[C (Programmiersprache)|C]] bzw. [[C-Sharp|C#]] oder [[C++]] angelehnten [[Syntax]], die hauptsächlich zur Erstellung von dynamischen [[Webseite]]n oder [[Webanwendung]]en verwendet wird<ref>Rasmus Lerdorf: "PHP's design goal from the very beginning is very simple. To solve the common web problem. That's it." [http://www.advogato.org/article/470.html#3]</ref>. PHP ist [[Open Source|Open-Source]]-Software.
'''PHP''' ([[rekursives Akronym|rekursives]] [[Backronym]] für „PHP: [[Hypertext|'''H'''ypertext]] [[Präprozessor|'''P'''reprocessor]]“, ursprünglich „'''P'''ersonal [[Homepage|'''H'''ome '''P'''age]] Tools“) ist eine [[Skriptsprache]] mit einer an [[C (Programmiersprache)|C]] bzw. [[C-Sharp|C#]] oder [[C++]] angelehnten [[Syntax]], die hauptsächlich zur Erstellung von dynamischen [[Webseite]]n oder [[Webanwendung]]en verwendet wird <ref>[http://www.advogato.org/article/470.html#3 Rasmus Lerdorf: "PHP's design goal from the very beginning is very simple. To solve the common web problem. That's it."]</ref>. PHP ist [[Open Source|Open-Source]]-Software.


PHP zeichnet sich besonders durch die leichte Erlernbarkeit, die breite [[Datenbanksystem|Datenbank]]unterstützung und [[Netzwerkprotokoll|Internet-Protokolleinbindung]] sowie die Verfügbarkeit zahlreicher, zusätzlicher [[Funktionsbibliothek]]en aus. Es existieren beispielsweise [[Programmbibliothek]]en, um Bilder und Grafiken zur Einbindung in Webseiten dynamisch zu generieren.
PHP zeichnet sich besonders durch die leichte Erlernbarkeit, die breite [[Datenbanksystem|Datenbank]]unterstützung und [[Netzwerkprotokoll|Internet-Protokolleinbindung]] sowie die Verfügbarkeit zahlreicher, zusätzlicher [[Funktionsbibliothek]]en aus. Es existieren beispielsweise [[Programmbibliothek]]en, um Bilder und Grafiken zur Einbindung in Webseiten dynamisch zu generieren.


== Geschichte ==
== Geschichte ==
PHP wurde 1995 von [[Rasmus Lerdorf]] entwickelt. Der Begriff stand damals noch für ''Personal Home Page Tools'' und war ursprünglich eine Sammlung von [[Perl]]-Skripten, die [[Rasmus Lerdorf]] zur Protokollierung der Zugriffe auf seinen Online-Lebenslauf geschrieben hatte <ref name='initial'>[http://groups.google.ch/group/comp.infosystems.www.authoring.cgi/msg/cc7d43454d64d133?oe=UTF-8&output=gplain Ankündigung von Rasmus Lerdorf zu PHP 1.0 in der Newsgroup comp.infosystems.www.authoring.cgi]</ref>. Bald schuf Lerdorf jedoch eine größere Umsetzung in [[C (Programmiersprache)|C]]. In dieser Programmiersprache wird PHP heute noch entwickelt. Das schließlich veröffentlichte PHP/FI (FI stand für ''Form Interpreter'') war Perl sehr ähnlich, wenn auch viel eingeschränkter, einfacher, und ziemlich inkonsistent.

PHP wurde 1995 von [[Rasmus Lerdorf]] entwickelt. Der Begriff stand damals noch für '''P'''ersonal '''H'''ome '''P'''age Tools und war ursprünglich eine Sammlung von [[Perl]]-Skripten, die [[Rasmus Lerdorf]] zur Protokollierung der Zugriffe auf seinen Online-Lebenslauf geschrieben hatte. Bald schuf Lerdorf jedoch eine größere Umsetzung in [[C (Programmiersprache)|C]]. In dieser Programmiersprache wird PHP heute noch entwickelt. Das schließlich veröffentlichte PHP/FI (FI stand für '''F'''orm '''I'''nterpreter) war Perl sehr ähnlich, wenn auch viel eingeschränkter, einfacher, und ziemlich inkonsistent.


PHP 3 wurde von [[Andi Gutmans]] und [[Zeev Suraski]] neu geschrieben, da das inzwischen erschienene PHP/FI 2 ihrer Meinung nach für [[eCommerce]] zu schwach war. Auch die Bedeutung der [[Abkürzung]] „PHP“ wurde hierbei geändert. Lerdorf kooperierte mit Gutmans und Suraski, und so wurde die Entwicklung von PHP/FI eingestellt. Obwohl PHP 3 für den professionellen Einsatz noch keine allzu große Funktionsvielfalt bot bzw. einige Schwächen aufwies, brachte es die Verbreitung von PHP bedeutend voran. Die von Gutmans und Suraski gegründete Firma [[Zend Technologies Ltd.]] entwickelte in der Folge die Zend Engine 1, die den Kern der PHP-4-Standardimplementierung bildet. Der Name „Zend“ ist aus den beiden Vornamen der Entwickler '''Ze'''ev und A'''nd'''i gebildet. Mit PHP 4 wurden die Ausführungsgeschwindigkeit komplexer Applikationen und die Sicherheit bei Verwendung globaler Variablen verbessert. Eingeführt wurden die Unterstützung für viele weitere Webserver, das Sessionmanagement, die Ausgabepufferung sowie viele neue Sprachkonstrukte.
PHP 3 wurde von [[Andi Gutmans]] und [[Zeev Suraski]] neu geschrieben, da das inzwischen erschienene PHP/FI 2 ihrer Meinung nach für [[eCommerce]] zu schwach war. Auch die Bedeutung der [[Abkürzung]] „PHP“ wurde hierbei geändert. Lerdorf kooperierte mit Gutmans und Suraski, und so wurde die Entwicklung von PHP/FI eingestellt. Obwohl PHP 3 für den professionellen Einsatz noch keine allzu große Funktionsvielfalt bot bzw. einige Schwächen aufwies, brachte es die Verbreitung von PHP bedeutend voran. Die von Gutmans und Suraski gegründete Firma [[Zend Technologies Ltd.]] entwickelte in der Folge die Zend Engine 1, die den Kern der PHP-4-Standardimplementierung bildet. Der Name „Zend“ ist aus den beiden Vornamen der Entwickler '''Ze'''ev und A'''nd'''i gebildet. Mit PHP 4 wurden die Ausführungsgeschwindigkeit komplexer Applikationen und die Sicherheit bei Verwendung globaler Variablen verbessert. Eingeführt wurden die Unterstützung für viele weitere Webserver, das Sessionmanagement, die Ausgabepufferung sowie viele neue Sprachkonstrukte.
Zeile 30: Zeile 29:
=== Meilensteine ===
=== Meilensteine ===


* PHP 1.0 erschienen am 8. Juni 1995
* PHP 1.0, erschienen am 8. Juni 1995 <ref name='initial' />
* PHP 2.0.0 bzw. PHP/FI, erschienen am 12. November 1997
* PHP 2.0.0 bzw. PHP/FI, erschienen am 12. November 1997
* PHP 3.0.0, erschienen am 6. Juni 1998
* PHP 3.0.0, erschienen am 6. Juni 1998
* PHP 4.0.0, erschienen am 22. Mai 2000
* PHP 4.0.0, erschienen am 22. Mai 2000 <ref>[http://de.php.net/ChangeLog-4.php#4.0.0 Changelog für PHP 4.0.0]</ref>
** Einfache [[Objektorientierte Programmierung]] hinzugefügt
** Einfache [[Objektorientierte Programmierung]] hinzugefügt
** Sessions hinzugefügt
** Session-Verwaltung hinzugefügt
* PHP 5.0.0, erschienen am 13. Juli 2004
* PHP 5.0.0, erschienen am 13. Juli 2004 <ref>http://de.php.net/ChangeLog-5.php#5.0.0 Changelog für PHP 5.0.0</ref>
** Erstmals ist durch viele hinzugefügte Sprachkonstrukte ernsthaftes objektorientiertes Programmieren möglich.
** Erstmals ist durch viele hinzugefügte Sprachkonstrukte ernsthaftes objektorientiertes Programmieren möglich.
** [[Ausnahmebehandlung|Exceptions]] hinzugefügt
** [[Ausnahmebehandlung|Exceptions]] hinzugefügt
Zeile 44: Zeile 43:
** SimpleXML (einfacher XML-Parser, Ändern von Einträgen sowie Hinzufügen von Kindelementen sind möglich)
** SimpleXML (einfacher XML-Parser, Ändern von Einträgen sowie Hinzufügen von Kindelementen sind möglich)
** [[Document Object Model|DOM]]-Unterstützung (objektorientiert)
** [[Document Object Model|DOM]]-Unterstützung (objektorientiert)
* PHP 5.1.0, erschienen am 24. November 2005
* PHP 5.1.0, erschienen am 24. November 2005 <ref>http://de.php.net/ChangeLog-5.php#5.1.0 Changelog für PHP 5.1.0</ref>
** Datenbankabstraktionsschicht hinzugefügt ([[PHP Data Objects|PDO]])
** Datenbankabstraktionsschicht hinzugefügt ([[PHP Data Objects|PDO]])
* PHP 5.2.0, erschienen am 2. November 2006
* PHP 5.2.0, erschienen am 2. November 2006 <ref>[http://de.php.net/ChangeLog-5.php#5.2.0 Changelog für PHP 5.2.0</ref>
** schnellere und effizientere [[Speicherverwaltung]]
** schnellere und effizientere [[Speicherverwaltung]]
** Filter-Erweiterung hinzugefügt (Filtern und Verifizieren von Benutzereingaben)
** Filter-Erweiterung hinzugefügt (Filtern und Verifizieren von Benutzereingaben)
** [[JSON]] hinzugefügt ([[Serialisierung]] von PHP-Variablen, nützlich im Zusammenspiel mit [[Ajax (Programmierung)|Ajax]])
** [[JSON]] hinzugefügt ([[Serialisierung]] von PHP-Variablen, nützlich im Zusammenspiel mit [[Ajax (Programmierung)|Ajax]])
** [[ZIP (Dateiformat)|ZIP]] (Auslesen und Erstellen von ZIP-Archiven) hinzugefügt
** [[ZIP (Dateiformat)|ZIP]] (Auslesen und Erstellen von ZIP-Archiven) hinzugefügt
** objektorientierte Datum-Erweiterung (DateTime und DateTimeZone) hinzugefügt
** objektorientierte Datums-Erweiterung (DateTime und DateTimeZone) hinzugefügt
<!--
<!--
Diese Daten entstammen folgenden Quellen:
Diese Daten entstammen folgenden Quellen:
* http://groups.google.ch/group/comp.infosystems.www.authoring.cgi/msg/cc7d43454d64d133?oe=UTF-8&output=gplain
* http://de.php.net/ChangeLog-4.php#4.0.0 (PHP 4.0.0)
* http://de.php.net/ChangeLog-5.php#5.0.0 (PHP 5.0.0)
* http://de.php.net/ChangeLog-5.php#5.1.0 (PHP 5.1.0)
* http://www.php.net/UPDATE_5_2.txt (PHP 5.2.0)
* http://museum.php.net (PHP-Museum, PHP 2.0.0 und PHP 3.0.0)
* http://museum.php.net (PHP-Museum, PHP 2.0.0 und PHP 3.0.0)
-->
-->


== Ausblick ==
== Ausblick ==
Zurzeit wird die Version 6.0 entwickelt. Bisher bekannte Änderungen sind zum einen die Entfernung von „Altlasten“ wie ''Register Globals'', ''Magic Quotes'' und dem ''Safe Mode'', zum anderen die Unterstützung von Unicode. Neuerungen wie [[Namensraum|Namensräume]], "late static binding"<ref>http://blog.webteam.at/2007/uber-ein-neues-halbes-feature-in-php-53/, "Einführung in late static binding"</ref> und ein neuer, nativer [[MySQL]] Treiber waren eigentlich für die Version 6 geplant, sollen nun aber schon in PHP 5.3 eingeführt werden.
Zur Zeit wird die Version 6.0 entwickelt. Bisher bekannte Änderungen sind zum einen die Entfernung von „Altlasten“ wie ''Register Globals'', ''Magic Quotes'' und dem ''Safe Mode'', zum anderen die Unterstützung von Unicode. Neuerungen wie [[Namensraum|Namensräume]], „late static binding“ <ref>http://blog.webteam.at/2007/uber-ein-neues-halbes-feature-in-php-53/, "Einführung in late static binding"</ref> und ein neuer, nativer [[MySQL]] Treiber waren eigentlich für die Version 6 geplant, sollen nun aber schon in PHP 5.3 eingeführt werden (siehe auch Abschnitt [[#Behebung von Mängeln|Behebung von Mängeln]]).


Am 13. Juli 2007 hat das Entwickler-Team angekündigt, die Unterstützung für PHP4 bis zum August 2008 einzustellen. Da es zum Zeitpunkt dieser Ankündigung im Feld noch zahlreiche PHP4-Installationen gibt, sind verantwortungsvolle Entwickler und Administratoren zur baldigen Migration ihrer PHP-Anwendungen gezwungen.
Am 13. Juli 2007 hat das Entwickler-Team angekündigt, die Unterstützung für PHP 4 bis zum August 2008 einzustellen <ref>[http://www.heise.de/newsticker/meldung/92691 Heise online: Pflege von PHP4 wird zum Jahresende weitgehend eingestellt]</ref> <ref>[http://www.php.net/archive/2007.php#2007-07-13-1 PHP.net News Archive: PHP 4 end of life announcement]</ref>. Da es zum Zeitpunkt dieser Ankündigung im Feld noch zahlreiche PHP 4-Installationen gibt, sind verantwortungsvolle Entwickler und Administratoren zur baldigen Migration ihrer PHP-Anwendungen gezwungen.


== Allgemein ==
== Allgemein ==

[[Bild:PHP funktionsweise.png|thumb|800px|none|Darstellung der Funktionsweise von PHP]]
[[Bild:PHP funktionsweise.png|thumb|800px|none|Darstellung der Funktionsweise von PHP]]
PHP ist ein System, das PHP-Code [[server]]-seitig verarbeitet. Das bedeutet, dass der [[Quelltext]] – im Gegensatz zu [[JavaScript]], das in der Regel [[Client]]-seitig interpretiert wird – nicht an den [[Webbrowser|Browser]] übermittelt wird, sondern an einen [[Interpreter]] auf dem [[Webserver]]. Erst dessen Ausgabe wird an den Browser geschickt. In den meisten Fällen ist dies ein [[Hypertext Markup Language|HTML]]-Dokument, wobei es mit PHP aber auch möglich ist, andere [[Dateityp]]en, wie z.&nbsp;B. Bilder oder [[Portable Document Format|PDF]]-Dateien, zu generieren.
PHP ist ein System, das PHP-Code [[server]]seitig verarbeitet. Das bedeutet, dass der [[Quelltext]] nicht an den [[Webbrowser|Browser]] übermittelt wird, sondern an einen [[Interpreter]] auf dem [[Webserver]] – im Gegensatz zu [[JavaScript]], das in der Regel [[client]]seitig vom Browser interpretiert wird. Erst die Ausgabe des PHP-Interpeters wird an den Browser geschickt. In den meisten Fällen ist dies ein [[Hypertext Markup Language|HTML]]-Dokument, wobei es mit PHP aber auch möglich ist, andere [[Dateityp]]en, wie z.&nbsp;B. Bilder oder [[Portable Document Format|PDF]]-Dateien, zu generieren.


Mit PHP lassen sich wie mit [[Perl]] auch Skripte schreiben, die nichts mit dem [[World Wide Web|WWW]] zu tun haben. Die [[GIMP-Toolkit|GTK-Erweiterung]] stellt sogar eine [[Programmierschnittstelle]] für eine grafische Oberfläche zur Verfügung, für die weder ein Webserver noch ein Browser benötigt werden. Verglichen mit „Allzweck“-Skriptsprachen wie [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache) | Ruby ]] und [[Perl]] waren in einer ersten Version die Schnittstellen für die grafische Oberfläche und zu anderen Betriebssystemfunktionen aber spärlich und wurden kaum verwendet. Die aktuell entwickelte PHP-GTK-Version 2 strebt hingegen eine Abdeckung der GTK-API von 95 % an<ref>''http://gtk.php.net (Englisch)'', 17. Juni 2007</ref>, wodurch sich PHP zu einer vielversprechenden Skriptsprache zur Entwicklung plattformunabhängiger Applikationen fortentwickeln könnte. Gegenwärtig spielt PHP seine Stärken vor allem beim Einsatz auf Webservern aus.
Mit PHP lassen sich wie mit [[Perl]] auch [[kommandozeile]]norientierte Skripte schreiben, die nichts mit dem Internet zu tun haben. Die [[GIMP-Toolkit|GTK-Erweiterung]] stellt sogar eine [[Programmierschnittstelle]] für eine grafische Oberfläche zur Verfügung, für die weder ein Webserver noch ein Browser benötigt werden. Verglichen mit „Allzweck“-Skriptsprachen wie [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]] und [[Perl]] waren in einer ersten Version die Schnittstellen für die grafische Oberfläche und zu anderen Betriebssystemfunktionen aber spärlich und wurden kaum verwendet. Die aktuell entwickelte PHP-GTK-Version 2 strebt hingegen eine Abdeckung der GTK-API von 95% an <ref>''http://gtk.php.net (Englisch)'', abgerufen am 17. Juni 2007</ref>, wodurch sich PHP zu einer vielversprechenden Skriptsprache zur Entwicklung plattformunabhängiger Applikationen fortentwickeln könnte. Gegenwärtig findet sich PHP jedoch vor allem im Einsatz auf Webservern.


Um eine PHP-Datei im Rahmen einer [[Webanwendung]] ausführen zu können, benötigt man ein System, das mit den in der Datei enthaltenen Anweisungen umgehen kann. Aus diesem Grund wird durch eine Schnittstelle (beispielsweise [[ISAPI]] oder [[Common Gateway Interface|CGI]]) der Interpreter von einem Server-[[Daemon]] bzw. Server-Dienst (z.&nbsp;B. [[Apache HTTP Server|Apache]] oder [[Microsoft Internet Information Services|IIS]]) ausgeführt. Die Kombination von [[Linux]]/[[Microsoft Windows|Windows]] als [[Betriebssystem]], Apache als Webserver, [[MySQL]]-Server als Datenbank und PHP wird [[LAMP]] bzw. [[WAMP]] genannt. Fertige LAMP- und WAMP-Pakete, die das einzelne Laden und Konfigurieren von [[Paket]]en aus dem WWW unnötig machen, werden u.&nbsp;a. im Projekt [[XAMPP]] entwickelt, wobei es inzwischen Versionen für [[Linux]], [[Solaris (Betriebssystem)|Solaris]], [[Microsoft Windows|Windows]] und [[Mac OS X]] gibt.
Um eine PHP-Datei im Rahmen einer [[Webanwendung]] ausführen zu können, benötigt man ein System, das mit den in der Datei enthaltenen Anweisungen umgehen kann. Aus diesem Grund wird durch eine Schnittstelle (beispielsweise [[ISAPI]] oder [[Common Gateway Interface|CGI]]) der Interpreter von einem Server-[[Daemon]] bzw. Server-Dienst (z.&nbsp;B. [[Apache HTTP Server|Apache]] oder [[Microsoft Internet Information Services|IIS]]) ausgeführt. Die Kombination von [[Linux]]/[[Microsoft Windows|Windows]] als [[Betriebssystem]], Apache als Webserver, [[MySQL]] als Datenbanksystem und PHP wird [[LAMP]] bzw. [[WAMP]] genannt. Fertige LAMP- und WAMP-Pakete, die das einzelne Laden und Konfigurieren von [[Paket]]en aus dem Internet unnötig machen, werden u.&nbsp;a. im Projekt [[XAMPP]] entwickelt, wobei es inzwischen Versionen für [[Linux]], [[Solaris (Betriebssystem)|Solaris]], [[Microsoft Windows|Windows]] und [[Mac OS X]] gibt.


Die Vorteile der server-seitigen Ausführung sind, dass beim [[Client]] (Browser) keine speziellen Fähigkeiten erforderlich sind oder Inkompatibilitäten auftreten können, wie es beispielsweise bei JavaScript und den verschiedenen Browsern der Fall ist. Außerdem bleibt der PHP-[[Quelltext]] der Seite auf dem Server, und nur die generierten [[Daten]] sind für den Besucher einsehbar. Gleiches gilt für andere [[Ressource]]n wie z.&nbsp;B. [[Datenbanksystem|Datenbank]]en, die daher auch keine direkte Verbindung zum Client benötigen.
Die Vorteile der serverseitigen Ausführung sind, dass beim [[Client]] (Browser) keine speziellen Fähigkeiten erforderlich sind oder Inkompatibilitäten auftreten können, wie es beispielsweise bei JavaScript und den verschiedenen Browsern der Fall ist. Außerdem bleibt der PHP-[[Quelltext]] der Seite auf dem Server, und nur die generierten [[Daten]] sind für den Besucher einsehbar. Gleiches gilt für andere [[Ressource]]n wie z.&nbsp;B. [[Datenbanksystem|Datenbank]]en, die daher auch keine direkte Verbindung zum Client benötigen.


Nachteilig ist, dass jede Aktion des Benutzers erst bei einem erneuten Aufruf der Seite erfasst werden kann. Da PHP normalerweise in einer Webserver-Umgebung läuft, unterliegt es auch dem zustandslosen [[Hypertext Transfer Protocol|HTTP]]. Außerdem wird jede PHP-Seite vom [[Server]] interpretiert, wodurch dessen Belastung steigt. Diese Vor- und Nachteile sind nicht PHP-spezifisch, sondern treten bei grundsätzlich jeder [[Web-Anwendung]] auf. Zusätzlich liest, prüft und übersetzt der Interpreter den Quelltext bei jedem Aufruf erneut. Dies mindert die Reaktionsgeschwindigkeit des Servers und erhöht nochmals die Last. Um dem entgegenzuwirken, stehen verschiedene Byte-Code-Caches zur Verfügung, diese speichern eine zur Ausführung vorbereitete Version des Programmes zwischen und beschleunigt somit den Zugriff auf diese Datei beim nächsten Aufruf. (siehe auch Abschnitt [[PHP#Performance|Performance]])
Nachteilig ist, dass jede Aktion des Benutzers erst bei einem erneuten Aufruf der Seite erfasst werden kann. Da PHP normalerweise in einer Webserver-Umgebung läuft, unterliegt es auch dem zustandslosen [[Hypertext Transfer Protocol|HTTP]]. Außerdem wird jede PHP-Seite vom [[Webserver]] interpretiert, wodurch dessen Belastung steigt. Diese Vor- und Nachteile sind nicht PHP-spezifisch, sondern treten bei grundsätzlich jeder [[Web-Anwendung]] auf. Zusätzlich liest, prüft und übersetzt der Interpreter den Quelltext bei jedem Aufruf erneut. Dies mindert die Reaktionsgeschwindigkeit des Servers und erhöht nochmals die Last. Um dem entgegenzuwirken, stehen verschiedene [[Bytecode]]-Caches zur Verfügung, welche eine zur Ausführung vorbereitete Version des Programmes zwischenspeichern und somit den Zugriff auf diese Datei beim nächsten Aufruf beschleunigten (siehe auch Abschnitt [[#Performance|Performance]]).


== Code-Beispiel ==
== Code-Beispiel ==
Zeile 95: Zeile 88:
</source>
</source>


''Anmerkung: Das „echo“ kann auch durch „print“ ersetzt werden, und es können auch einfache Anführungszeichen (') statt doppelten (") verwendet werden. Die Unterscheidung der einfachen von den doppelten Anführungszeichen entscheidet darüber, ob in der Zeichenkette auftauchende Variablennamen unverändert zu übernehmen oder durch den entsprechenden Variableninhalt zu ersetzen sind. Außerdem wird die Bearbeitung von [[Escape-Sequenz|Escape-Sequenzen]] hierdurch gesteuert''
''Anmerkung: <tt>echo</tt> kann auch durch <tt>print</tt> ersetzt werden, und es können auch einfache Anführungszeichen (<tt>'</tt>) statt doppelten (<tt>"</tt>) verwendet werden. Die Unterscheidung der einfachen von den doppelten Anführungszeichen entscheidet darüber, ob in der Zeichenkette auftauchende Variablennamen unverändert zu übernehmen oder durch den entsprechenden Variableninhalt zu ersetzen sind. Außerdem wird die Bearbeitung von [[Escape-Sequenz|Escape-Sequenzen]] hierdurch gesteuert.''


Das Skript in HTML integriert (gibt ebenfalls „Hallo Welt!“ auf der Webseite aus):
Das Skript in HTML integriert (gibt ebenfalls „Hallo Welt!“ auf der Webseite aus):
Zeile 115: Zeile 108:


== Mängel ==
== Mängel ==
PHP ist zeitweise ungesteuert gewachsen, so wurden viele ähnlich arbeitende Funktionen oft unterschiedlich benannt (sehr deutlich wurde dies bei Funktionen zum Zugriff auf verschiedene [[Datenbanksystem]]e). Auch die logische Reihenfolge der Funktionsparameter stimmt bei Funktionen mit ähnlichem Zweck nicht immer überein. Zudem sind trotz vorhandener [[objektorientierte Programmierung|Objektorientierung]] die meisten Standardbibliotheken noch [[Prozedurale Programmierung|prozedural]] angelegt. [[Thread (Informatik)|Threading]] fehlt in PHP völlig und einige wenige PHP-Module sind nicht threadsicher. Auch besitzt PHP keinen Bytecode-Cache, wie bei anderen Skriptsprachen (z.&nbsp;B. [[Perl]]) teilweise üblich, was bei jedem Aufruf einer Datei ein komplettes [[Parser|Parsen]] notwendig macht.


Weiterhin kann PHP von sich aus nur Zeichenketten in [[ISO 8859-1]]-Kodierung verarbeiten; PHP bietet bisher zwar einige Funktionen, bei denen ein Zeichensatz (darunter auch [[UTF-8]]) für die Verarbeitung von Zeichenketten angegeben werden kann, sowie Funktionen zur Konvertierung von und nach UTF-8, jedoch kann der isolierte Zugriff auf einzelne Zeichen einer Zeichenketten (wie beispielsweise durch <tt>$string{4}</tt> auf das vierte Zeichen in der Zeichenkette ''string'') unerwartete Ergebnisse liefern.
PHP ist zeitweise ungesteuert gewachsen, so wurden viele zusammenhängende Funktionen oft sehr unterschiedlich benannt. Auch die logische Reihenfolge der Funktionsparameter stimmt bei sich ähnelden Funktionen nicht immer überein. Zudem sind die meisten Standardbibliotheken noch prozedual angelegt. [[Thread (Informatik)|Threading]] fehlt in PHP völlig und einige wenige PHP-Module sind nicht threadsicher. Auch besitzt PHP keinen Bytecode-Cache, was bei jedem Aufruf einer Datei ein komplettes [[Parser|Parsen]] notwendig macht.

In früheren Versionen wurden die fehlende oder unzureichend implementierte Objektorientierung sowie das Fehlen von [[Ausnahmebehandlung]]en bemängelt.


=== Behebung von Mängeln ===
=== Behebung von Mängeln ===
PHP wird kontinuierlich weiterentwickelt und befindet sich derzeit, durch die Einstellung der Entwicklung von PHP 4, in einem großen Wandel.


Seit der Version 5 unterstützt PHP durch [[Kapselung]] der Daten (z.&nbsp;B. private Variablen), [[Destruktor]]en und Außnahmebehandlung per [[Exception]]s verbesserte und erweiterte Möglichkeiten der objektorientierten Programmierung. Auch sind Objekt-Variablen in PHP 5 wie bei den meisten Programmiersprachen nur noch eine [[Referenz (Programmierung)|Referenz]] auf das Objekt und nicht wie in PHP 4 das Objekt selbst. Ebenso wurde dem oft bemängelten uneinheitlichen Zugriff auf verschiedene Datenbanken in der Version 5.1 mit der objektorientierten Datenbankabstraktionsebene [[PHP Data Objects|PDO]] entgegengewirkt. Ab der Version 5.3 wird PHP zudem [[Namensraum|Namensräume]] unterstützen.<ref>[http://de.php.net/manual/de/language.namespaces.php PHP Manual: Namespaces]</ref>
PHP wird kontinuierlich weiterentwickelt und befindet sich derzeit, durch das Einstellen der Entwicklung von PHP 4, in einem großen Wandel.


In der Version 6 werden endgültig Probleme verursachende Komponenten wie ''Magic Quotes'' <ref>[http://de.php.net/manual/de/security.magicquotes.php PHP Manual: Magic quotes]</ref>, der ''Safe Mode'' <ref>[http://de.php.net/manual/de/features.safe-mode.php PHP Manual: Safe mode]</ref> sowie ''Register Globals'', die schon länger standardmäßig deaktivert sind, entfernt. Auch wird der Standardzeichensatz von [[ISO 8859-1]] auf [[Unicode]] geändert <ref>PHP-Conference 2005: ''[http://www.gravitonic.com/downloads/talks/intlphpcon2005/php_unicode.pdf Präsentation von Andrei Zmievski]'' (PDF)</ref>.
Seit der Version 5 unterstützt PHP durch [[Kapselung]] der Daten (z.B. private Variablen), [[Destruktor]]en und Außnahmenbehandlung per [[Exception]]s verbesserte und erweiterte Möglichkeiten [[Objektorientierte Programmierung|objektorientiert]] zu Programmieren. Auch sind Objekt-Variablen in PHP 5 wie bei den meisten Sprachen nur noch eine Referenz auf das Objekt und nicht wie in PHP 4 das Objekt selbst. Ebenso wurde der oft bemängelte verschiedenartige Zugriff auf unterschiedliche Datenbanken in der Version 5.1 mit der [[Objektorientierte Programmierung|objektorientierten]] Datenbankabstraktionsebene [[PHP_Data_Objects|PDO]] entgegengewirkt. Ab der Version 5.3 wird PHP zudem [[Namensraum|Namensräume]] unterstützen.

In der Version 6 werden endgültig Problemverursachende Systeme wie ''Magic quotes'' <ref>[http://de.php.net/manual/de/security.magicquotes.php Magic quotes]</ref>, ''Safe mode'' <ref>[http://de.php.net/manual/de/features.safe-mode.php Safe mode]</ref> sowie ''Register Globals'', die schon länger standardmäßig deaktivert sind, entfernt. Auch wird der Standardzeichensatz von [[ISO 8859-1]] auf [[Unicode]] geändert, <ref>PHP-Conference 2005: ''[http://www.gravitonic.com/downloads/talks/intlphpcon2005/php_unicode.pdf Präsentation von Andrei Zmievski]'' (PDF)</ref> denn bisher bietet PHP nur einige Funktionen, bei denen ein Zeichensatz (darunter auch UTF-8) angegeben werden kann, sowie Funktionen zur Konvertierung von und nach UTF-8, aber noch keine durchgehende Unterstützung.


=== Probleme, die durch Unkenntnis entstehen ===
=== Probleme, die durch Unkenntnis entstehen ===
Oft werden einige Unterschiede zu anderen Programmiersprachen als Mangel beschrieben, dennoch sind sie nur Probleme, die durch Unkenntnis des Programmiers entstehen und somit vermieden werden können.


So ist beispielsweise die [[schwache Typisierung]] von PHP eine häufige Fehlerquelle bei PHP-Anfängern. Es wird häufig nicht der Operator für typsichere Vergleiche verwendet, wenn numerische Werte mit Zeichenketten verglichen werden sollen, wodurch es durch die [[dynamische Typisierung]] zu unerwünschten Ergebnissen kommen kann. Auch die unübliche Vereinigung des Array-Konzepts mit dem Dictionary-Konzept (auch bekannt als [[assoziatives Array|assoziative Arrays]]) sorgt bei Programmierern, die mit anderen Programmiersprachen vertraut sind, oft für Fehler. Zudem ist es in PHP nicht möglich, eine förmliche Deklaration von Variablen zu erzwingen. Variablen werden vielmehr automatisch angelegt, wenn sie erstmals verwendet werden. Dies ist zwar bequem, hat aber zur Folge, dass insbesondere Tippfehler bei Variablennamen zu nur schwer auffindbaren Programmfehlern führen können (dieser Mangel kann zumindest während der Entwicklung durch die Aktivierung von Warnungen bei der Benutzung nicht initialisierter Variablen (<code>E_NOTICE</code>) abgeschwächt werden, so dass der Programmierer bei der Skriptausführung auf das Problem hingewiesen wird).
Oft werden die Unterschiede zu anderen Programmiersprachen als Mangel beschrieben, dennoch sind sie nur Probleme, die durch Unkenntnis des Programmiers entstehen und somit vermieden werden können.


Im Zusammenhang mit [[globale Variable|globalen Variablen]] und bestimmten Serverkonfigurationen können bei unachtsamer Programmierung durch Variablenmanipulation Sicherheitslücken entstehen, so können über die [[URL]] einer Seite Variablen geändert werden, wenn diese nicht ordnungsgemäß vor der ersten Benutzung initialisiert werden. Beispielsweise erhält durch den Aufruf von <tt><nowiki>http://example.com/beispiel.php?a=test&b=irgend_ein_wert</nowiki></tt>
So ist z.B. die schwache Typisierung in PHP eine beliebte Fehlerquelle bei PHP-Anfängern. So wird häufig nicht der Operator für typsichere Vergleiche verwendet, wenn numerische Werte mit Strings verglichen werden sollen, wodurch es leicht zu unerwünschten Ergebnissen kommen kann. Auch die unübliche Vermengung des Array-Konzepts mit dem Dictionary-Konzepts sorgt bei Programmierern, die mit anderen Sprachen vertraut sind, oft für Fehler. Zudem ist es in PHP nicht möglich, eine förmliche Deklaration von Variablen zu erzwingen. Variablen werden vielmehr automatisch angelegt, wenn sie erstmals verwendet werden. Das ist zwar bequem, hat aber zur Folge, dass insbesondere Tippfehler bei Variablennamen zu nur schwer auffindbaren Programmfehlern führen können. Dieser Mangel kann während der Entwicklung durch die Aktivierung der Warnung bei der Benutzung nicht initialisierter Variablen (<code>E_NOTICE</code>) abgeschwächt werden, da der Programmierer so auf das Problem hingewiesen wird.
die Variable ''a'' den Wert „test“ und ''b'' entsprechend den Wert „irgend_ein_wert“. Haben nun Variablen, die im Skript verwendet werden, den selben Namen wie die in der URL übergebenen Variablen und werden ohne vorherige Prüfung verwendet, können Sicherheitslücken wie [[SQL-Injection]]s oder [[Cross-Site Scripting]] entstehen. Um diese Art von Manipulation zu verhindern, sollte die automatische Variablenvorbelegung mit der Option <tt>register_globals=off</tt> (seit PHP 4.2 standardmäßig voreingestellt) in der PHP-Konfiguration abgeschaltet werden. Sollte dies nicht möglich sein, muss zumindest jede Variable vor der ersten Verwendung initalisiert werden. Auf die per URL übergebenen Variablen kann über die globalen Arrays <tt>HTTP_GET_VARS</tt> und <tt>HTTP_POST_VAR</tt> (je nach Übertragungsart) bzw. seit PHP 4.1.0 über die globalen Arrays <tt>$_GET</tt> und <tt>$_POST</tt> zugegriffen werden.

Bei den [[Globale Variable|Globalen Variablen]] (→[[Variable (Programmierung)#Gültigkeitsbereich von Variablen (Scope)|Geltungsbereich von Variablen]]) können bei unvorsichtiger Programmierung <u>in Kombination</u> mit bestimmten Konfigurationen durch Variablenmanipulation Sicherheitslücken entstehen, die durch die Variablenvorbelegung von PHP zustande kommen können. Über die [[URL]] einer Seite können Variablen geändert werden, wenn diese nicht ordnungsgemäß vor der ersten Benutzung initialisiert werden.
<nowiki>http://example.com/beispiel.php?variable1=test&variable2=irgend_ein_wert</nowiki>
Durch diesen Aufruf erhält ''variable1'' den Wert ‚test‘ und ''variable2'' entsprechend ‚irgend_ein_wert‘. Vorhandene Variablen, die im PHP-Skript verwendet werden, könnten überschrieben werden. Um diese Art von Manipulation zu verhindern, sollte die automatische Variablenvorbelegung mit <code>register_globals=off</code>, was seit PHP 4.2 standardmäßig eingestellt ist, in der PHP-Konfiguration abgeschaltet werden. Sollte dies nicht möglich sein, muss jede Variable vor dem ersten verwenden initalisiert werden. Auf die per URL übergebenen Variablen kann dann seit PHP 4.1.0 mit den „Superglobals“ (Variablen die automatisch [[Globale Variable|Global]] sind) zugegriffen werden.

<code>$_GET['variable1'] ''oder'' $_POST['variable1'] ''(je nach Übertragungsart)''
$HTTP_GET_VARS['variable1'] ''oder'' $HTTP_POST_VARS['variable1'] ''(bei PHP-Versionen vor 4.1.0)''</code>


== Lizenz und Bezug ==
== Lizenz und Bezug ==
PHP 3 wurde unter der [[GNU General Public License]] (GPL) vertrieben. Seit Version 4 wird PHP unter der [[PHP License]] vertrieben, da der neue [[Parser]], die [[Zend Engine|Zend Engine]], vom Hersteller Zend unter einer nicht GPL-kompatiblen Lizenz veröffentlicht wird. Die PHP-Lizenz ist eine [[Lizenz|Softwarelizenz]], die die freie Verwendung und Veränderung der [[Quelltext]]e erlaubt. Die Software kann somit kostenlos aus dem Internet geladen werden; daneben ist PHP auch schon bei einigen [[Betriebssystem]]en (z.&nbsp;B. bei allen relevanten [[Linux-Distribution]]en oder [[Mac OS X]]) im Lieferumfang enthalten.

PHP 3 wurde unter der [[GNU General Public License]] (GPL) vertrieben. Seit Version 4 wird PHP unter der [[PHP License]] vertrieben, da der neue [[Parser]], die [[Zend Engine|Zend Engine]], von den Machern unter einer nicht GPL-kompatiblen Lizenz veröffentlicht wird. Die PHP-Lizenz ist eine [[Lizenz|Softwarelizenz]], die die freie Verwendung und Veränderung der [[Quelltext]]e erlaubt. Die Software kann somit kostenlos aus dem Internet geladen werden; daneben ist PHP auch schon bei einigen [[Betriebssystem]]en (z.&nbsp;B. bei allen relevanten [[Linux]]-[[Distribution (Software)|Distributionen]] oder [[Mac OS X]]) im Lieferumfang enthalten.


== Performance ==
== Performance ==

Setzt man PHP als [[Common Gateway Interface|CGI]]-Programm ein, ist die Performance nicht optimal. Für jeden HTTP-Request startet der Webserver eine neue Instanz des PHP-Interpreters, welche jedes Mal den Quelltext des aufgerufenen Skriptes neu übersetzt. Um den Start der Interpreter-Instanzen zu sparen, setzt man PHP üblicherweise als Servermodul, d.&nbsp;h. Teil der Webserver-Prozesse, oder über [[FastCGI]] ein. Da bei kleinen Skripten das Starten des PHP-Interpreters bei weitem am meisten Zeit verbraucht, führt diese Maßnahme zu einer drastischen Leistungssteigerung.
Setzt man PHP als [[Common Gateway Interface|CGI]]-Programm ein, ist die Performance nicht optimal. Für jeden HTTP-Request startet der Webserver eine neue Instanz des PHP-Interpreters, welche jedes Mal den Quelltext des aufgerufenen Skriptes neu übersetzt. Um den Start der Interpreter-Instanzen zu sparen, setzt man PHP üblicherweise als Servermodul, d.&nbsp;h. Teil der Webserver-Prozesse, oder über [[FastCGI]] ein. Da bei kleinen Skripten das Starten des PHP-Interpreters bei weitem am meisten Zeit verbraucht, führt diese Maßnahme zu einer drastischen Leistungssteigerung.


Bei umfangreichen Projekten mit viel PHP-Quelltext kann es sich lohnen, auch das Neuübersetzen des Skriptes zu vermeiden. Dazu verwendet man einen sog. [[Opcode]]-[[Cache]]. Anders als bei [[Java (Programmiersprache)|Java]] ist es bei PHP nicht standardmäßig vorgesehen, die aus dem PHP-Quelltext erzeugten Opcodes zu speichern und später auszuführen. Die für PHP verfügbaren Opcode-Caches sind Erweiterungen, die man von Hand einbinden muss.
Bei umfangreichen Projekten mit viel PHP-Quelltext kann es sich lohnen, auch das Neuübersetzen des Skriptes zu vermeiden. Dazu verwendet man einen sog. [[Bytecode]]-[[Cache]]. Anders als bei [[Java (Programmiersprache)|Java]] oder [[Perl]] ist es bei PHP nicht standardmäßig vorgesehen, den aus dem PHP-Quelltext erzeugten Bytecode zu speichern und später auszuführen. Die für PHP verfügbaren Bytecode-Caches sind Erweiterungen, die man von Hand einbinden muss.


Beispiel für diese Caches sind [[MMCache|Turck-mmCache]], der nicht mehr weiterentwickelt wird, und dessen Nachfolger [[eAccelerator]], der [[Alternative PHP Cache]], der IonCube-Accelerator (alles [[Open Source]] und [[Freeware]]) sowie der kommerzielle [[Zend Optimizer]].
Beispiele für diese Caches sind [[MMCache|Turck-mmCache]], der nicht mehr weiterentwickelt wird, und dessen Nachfolger [[eAccelerator]], der [[Alternative PHP Cache]], der [[IonCube-Accelerator]] (alle [[Open Source]] und [[Freeware]]) sowie der kommerzielle [[Zend Optimizer]].


Der Leistungsgewinn hängt von der Art der Skripte ab. Je geringer die eigentliche Laufzeit des Skriptes im Vergleich mit dem Umfang des Quellcodes ist, desto mehr lohnt sich der Einsatz solcher Opcode-Caches. Die von den Anbietern angegebenen Leistungssteigerungen sind als Maximalwerte zu verstehen. <ref>Jean-François Bustarret: ''[http://www.ipersec.com/index.php?q=en/bench_ea_vs_apc Benchmarking PHP accelerators]'', 11. Juli 2006</ref>
Der Leistungsgewinn hängt von der Art der Skripte ab. Je geringer die eigentliche Laufzeit des Skriptes im Vergleich zum Umfang des Quellcodes ist, desto mehr lohnt sich der Einsatz solcher Optimierer. Die von den Anbietern angegebenen Leistungssteigerungen sind als Maximalwerte zu verstehen. <ref>Jean-François Bustarret: ''[http://www.ipersec.com/index.php?q=en/bench_ea_vs_apc Benchmarking PHP accelerators]'', 11. Juli 2006</ref>


Weiterhin kann man die Leistung von PHP dadurch steigern, dass man umfangreiche Teile des Quellcodes in separate Dateien auslagert und nur bei Bedarf einbindet. Dafür stellt PHP 5 mit „Autoloading“ eine geeignete Methode bereit <ref>The PHP Group: ''[http://www.php.net/language.oop5.autoload PHP: Autoloading – Manual]'', 11. Juli 2006</ref>. Auch ohne Opcode-Caches spart man so das Übersetzen von Teilen des Quellcodes.
Weiterhin kann man die Leistung von PHP dadurch steigern, dass man umfangreiche Teile des Quellcodes in separate Dateien auslagert und nur bei Bedarf einbindet. Dafür stellt PHP 5 mit „Autoloading“ eine geeignete Methode bereit <ref>The PHP Group: ''[http://www.php.net/language.oop5.autoload PHP: Autoloading – Manual]'', 11. Juli 2006</ref>. Auch ohne Bytecode-Caches spart man so das Übersetzen von Teilen des Quellcodes.


In einem kürzlich veröffentlichten Datenbank-Contest<ref>c't: ''[http://www.heise.de/ct/dbcontest/teilnehmer.shtml Datenbank Contest]''</ref> der Zeitschrift c't ist eine Lösungsvariante mit MySQL, welche PHP als Frontend nutzt, unter Linux mit der besten Performance gegenüber Varianten in Java, C++ und anderen Sprachen als Sieger hervorgegangen. Dabei wurde der oben erwähnte Alternative PHP Cache (APC) eingesetzt. Allerdings ging es bei dem Test um die Datenbank und nicht um die eingesetzte Skriptsprache.
In einem kürzlich veröffentlichten Datenbank-Contest <ref>c't: ''[http://www.heise.de/ct/dbcontest/teilnehmer.shtml Datenbank Contest]''</ref> der Zeitschrift c't ist eine Lösungsvariante mit MySQL, welche PHP als Frontend nutzt, unter Linux mit der besten Performance gegenüber Varianten in Java, C++ und anderen Sprachen als Sieger hervorgegangen. Dabei wurde der oben erwähnte Alternative PHP Cache (APC) eingesetzt. Allerdings ging es bei dem Test um die Datenbank und nicht um die eingesetzte Skriptsprache.


Laut dem großen Computer Language Shootout <ref>http://shootout.alioth.debian.org</ref> wie auch im großen Win32 Computer Language Shootout <ref>http://dada.perl.it/shootout/</ref> liegt PHP bei Standardproblemen in Sachen Laufzeit und Ressourcenverbrauch in den meisten Benchmarks leicht bis deutlich hinter anderen populären Scriptsprachen wie [[Python (Programmiersprache)|Python]], oder [[Perl]].
Laut dem ''Computer Language Shootout'' <ref>http://shootout.alioth.debian.org</ref> wie auch dem ''Win32 Computer Language Shootout'' <ref>http://dada.perl.it/shootout/</ref> liegt PHP bei Standardproblemen in Bezug auf Laufzeit und Ressourcenverbrauch in den meisten Benchmarks leicht bis deutlich hinter anderen populären Skriptsprachen wie [[Python (Programmiersprache)|Python]] oder [[Perl]].


== Schutzsysteme für PHP-Installationen ==
== Schutzsysteme für PHP-Installationen ==
'''[[Suhosin]]''' <ref>[http://www.hardened-php.net/suhosin/index.html Hauptseite des Suhosin-Projekts]</ref> ist ein fortgeschrittenes Schutzsystem für PHP-Installationen. Es wurde entworfen, um den Server und die Benutzer vor bekannten und unbekannten Fehlern in PHP-Anwendungen und im PHP-Kern zu schützen.

'''Suhosin''' [http://www.hardened-php.net/suhosin/index.html] ist ein fortgeschrittenes Schutzsystem für PHP-Installationen. Es wurde entworfen, um den Server und die Benutzer vor bekannten und unbekannten Fehlern in PHP-Anwendungen und im PHP-Kern zu schützen.


== Verbreitete PHP-Applikationen ==
== Verbreitete PHP-Applikationen ==

Es gibt verschiedene, sehr weit verbreitete Applikationen, die in PHP geschrieben wurden. Hier eine kleine Auswahl.
Es gibt verschiedene, sehr weit verbreitete Applikationen, die in PHP geschrieben wurden. Hier eine kleine Auswahl.
<!--
<!--
Zeile 174: Zeile 159:
* ''[[phpMyAdmin]]'', ''[[phpPgAdmin]]'' – grafische Benutzeroberflächen zur Verwaltung von [[MySQL]]- bzw. [[PostgreSQL]]-Datenbanken
* ''[[phpMyAdmin]]'', ''[[phpPgAdmin]]'' – grafische Benutzeroberflächen zur Verwaltung von [[MySQL]]- bzw. [[PostgreSQL]]-Datenbanken
* ''[[Drupal]]'', ''[[Redaxo]]'', ''[[TYPO3]]'' und ''[[Contenido]]'' – [[Content-Management-System]]e (CMS)
* ''[[Drupal]]'', ''[[Redaxo]]'', ''[[TYPO3]]'' und ''[[Contenido]]'' – [[Content-Management-System]]e (CMS)
* ''[[Mambo (CMS)|Mambo]] / [[Joomla!]]'' und ''[[PostNuke]]'' – PortalSoftware
* ''[[Mambo (CMS)|Mambo]] / [[Joomla!]]'' und ''[[PostNuke]]'' – Portal-Software
* ''[[WordPress]]'', ''[[Serendipity (Weblog)|Serendipity]]'' – Software für das Erstellen von [[Weblog]]s
* ''[[WordPress]]'', ''[[Serendipity (Weblog)|Serendipity]]'' – Software für das Erstellen von [[Weblog]]s
* ''[[Horde (Framework)|Horde]]'', ''[[CakePHP]]'' – Application Framework für Webanwendungen
* ''[[Horde (Framework)|Horde]]'', ''[[CakePHP]]'' – Application Framework für Webanwendungen
Zeile 181: Zeile 166:


== Literatur ==
== Literatur ==
Gedruckte Werke zu PHP veralten aufgrund der permanenten Weiterentwicklung von PHP schnell. Die aktuellen Informationen und Dokumentationen findet man auf der offiziellen Website.

Gedruckte Werke zu PHP veralten aufgrund der permanenten Weiterentwicklungen von PHP schnell. Die aktuellen Informationen und Dokumentationen findet man auf der offiziellen Website [http://www.php.net/index php.net].


* [[Matthias Kannengiesser]]: ''PHP 5 / MySQL 4, Studienausgabe''. Franzis Verlag, ISBN 3-7723-7005-5
* [[Matthias Kannengiesser]]: ''PHP 5 / MySQL 4, Studienausgabe''. Franzis Verlag, ISBN 3-7723-7005-5
Zeile 200: Zeile 184:


== Weblinks ==
== Weblinks ==

{{Wiktionary|PHP}}
{{Wiktionary|PHP}}
{{Wikibooks|Websiteentwicklung: PHP}}
{{Wikibooks|Websiteentwicklung: PHP}}
Zeile 225: Zeile 208:


=== Zeitschriften ===
=== Zeitschriften ===
* [http://www.php-mag.de/ PHP-Magazin], deutschsprachig

* [http://www.php-mag.de/ PHP-Magazin] deutschsprachig
* [http://www.php-mag.net/ PHP Magazine], englischsprachig
* [http://www.php-mag.net/ PHP Magazine] englischsprachig
* [http://www.phpsolmag.org/ PHP Solutions], erscheint in mehreren Sprachen
* [http://www.phpsolmag.org/ PHP Solutions] erscheint in mehreren Sprachen
* [http://www.phparch.com/ php|architect], englischsprachig
* [http://www.phparch.com/ php|architect] englischsprachig
* [http://t3n.yeebase.com/ T3N Magazin] für Open Source, Web & PHP, deutschsprachig
* [http://t3n.yeebase.com/ T3N Magazin] Open Source, Web & PHP, deutschsprachig
* [http://www.php-journal.de/ PHP Journal], deutschsprachig, erscheint 2-monatlich
* [http://www.php-journal.de/ PHP Journal] deutschsprachig, erscheint 2-monatlich


== Quellen ==
== Quellen ==

<references/>
<references/>



Version vom 20. Dezember 2007, 23:50 Uhr

PHP
Datei:PHP Logo.svg
Serverseitig interpretierte Skriptsprache
Basisdaten
Erscheinungsjahr: 1995
Designer: Rasmus Lerdorf[1]
Entwickler: The PHP Group
Aktuelle Version: 5.2.5 (8. November 2007)
4.4.7  (2. Mai 2007)
Typisierung: schwach, dynamisch
Beeinflusst von: C++, Perl[2], C[2], Java[2], Tcl[3], HTML, JavaScript
Betriebssystem: plattformunabhängig
Lizenz: PHP License
www.php.net

PHP (rekursives Backronym für „PHP: Hypertext Preprocessor“, ursprünglich „Personal Home Page Tools“) ist eine Skriptsprache mit einer an C bzw. C# oder C++ angelehnten Syntax, die hauptsächlich zur Erstellung von dynamischen Webseiten oder Webanwendungen verwendet wird [4]. PHP ist Open-Source-Software.

PHP zeichnet sich besonders durch die leichte Erlernbarkeit, die breite Datenbankunterstützung und Internet-Protokolleinbindung sowie die Verfügbarkeit zahlreicher, zusätzlicher Funktionsbibliotheken aus. Es existieren beispielsweise Programmbibliotheken, um Bilder und Grafiken zur Einbindung in Webseiten dynamisch zu generieren.

Geschichte

PHP wurde 1995 von Rasmus Lerdorf entwickelt. Der Begriff stand damals noch für Personal Home Page Tools und war ursprünglich eine Sammlung von Perl-Skripten, die Rasmus Lerdorf zur Protokollierung der Zugriffe auf seinen Online-Lebenslauf geschrieben hatte [5]. Bald schuf Lerdorf jedoch eine größere Umsetzung in C. In dieser Programmiersprache wird PHP heute noch entwickelt. Das schließlich veröffentlichte PHP/FI (FI stand für Form Interpreter) war Perl sehr ähnlich, wenn auch viel eingeschränkter, einfacher, und ziemlich inkonsistent.

PHP 3 wurde von Andi Gutmans und Zeev Suraski neu geschrieben, da das inzwischen erschienene PHP/FI 2 ihrer Meinung nach für eCommerce zu schwach war. Auch die Bedeutung der Abkürzung „PHP“ wurde hierbei geändert. Lerdorf kooperierte mit Gutmans und Suraski, und so wurde die Entwicklung von PHP/FI eingestellt. Obwohl PHP 3 für den professionellen Einsatz noch keine allzu große Funktionsvielfalt bot bzw. einige Schwächen aufwies, brachte es die Verbreitung von PHP bedeutend voran. Die von Gutmans und Suraski gegründete Firma Zend Technologies Ltd. entwickelte in der Folge die Zend Engine 1, die den Kern der PHP-4-Standardimplementierung bildet. Der Name „Zend“ ist aus den beiden Vornamen der Entwickler Zeev und Andi gebildet. Mit PHP 4 wurden die Ausführungsgeschwindigkeit komplexer Applikationen und die Sicherheit bei Verwendung globaler Variablen verbessert. Eingeführt wurden die Unterstützung für viele weitere Webserver, das Sessionmanagement, die Ausgabepufferung sowie viele neue Sprachkonstrukte.

Da das World Wide Web Ende der 1990er-Jahre stark wuchs, bestand großer Bedarf an Skriptsprachen, mit denen sich dynamische Webseiten realisieren lassen. PHP wurde für die Webentwicklung mit der Zeit populärer als der vorherige De-facto-Standard Perl, weil es durch seine Spezialisierung als einfacher erlernbar gilt.

Meilensteine

  • PHP 1.0, erschienen am 8. Juni 1995 [5]
  • PHP 2.0.0 bzw. PHP/FI, erschienen am 12. November 1997
  • PHP 3.0.0, erschienen am 6. Juni 1998
  • PHP 4.0.0, erschienen am 22. Mai 2000 [6]
  • PHP 5.0.0, erschienen am 13. Juli 2004 [7]
    • Erstmals ist durch viele hinzugefügte Sprachkonstrukte ernsthaftes objektorientiertes Programmieren möglich.
    • Exceptions hinzugefügt
    • Reflections API
    • MySQLi (MySQL improved, objektorientiert und auf aktuelle MySQL-Versionen zugeschnitten)
    • SQLite (vollständig client-basiertes, dem SQL Standard zu 95 % entsprechendes Datenbanksystem)
    • SimpleXML (einfacher XML-Parser, Ändern von Einträgen sowie Hinzufügen von Kindelementen sind möglich)
    • DOM-Unterstützung (objektorientiert)
  • PHP 5.1.0, erschienen am 24. November 2005 [8]
    • Datenbankabstraktionsschicht hinzugefügt (PDO)
  • PHP 5.2.0, erschienen am 2. November 2006 [9]
    • schnellere und effizientere Speicherverwaltung
    • Filter-Erweiterung hinzugefügt (Filtern und Verifizieren von Benutzereingaben)
    • JSON hinzugefügt (Serialisierung von PHP-Variablen, nützlich im Zusammenspiel mit Ajax)
    • ZIP (Auslesen und Erstellen von ZIP-Archiven) hinzugefügt
    • objektorientierte Datums-Erweiterung (DateTime und DateTimeZone) hinzugefügt

Ausblick

Zur Zeit wird die Version 6.0 entwickelt. Bisher bekannte Änderungen sind zum einen die Entfernung von „Altlasten“ wie Register Globals, Magic Quotes und dem Safe Mode, zum anderen die Unterstützung von Unicode. Neuerungen wie Namensräume, „late static binding“ [10] und ein neuer, nativer MySQL Treiber waren eigentlich für die Version 6 geplant, sollen nun aber schon in PHP 5.3 eingeführt werden (siehe auch Abschnitt Behebung von Mängeln).

Am 13. Juli 2007 hat das Entwickler-Team angekündigt, die Unterstützung für PHP 4 bis zum August 2008 einzustellen [11] [12]. Da es zum Zeitpunkt dieser Ankündigung im Feld noch zahlreiche PHP 4-Installationen gibt, sind verantwortungsvolle Entwickler und Administratoren zur baldigen Migration ihrer PHP-Anwendungen gezwungen.

Allgemein

Darstellung der Funktionsweise von PHP

PHP ist ein System, das PHP-Code serverseitig verarbeitet. Das bedeutet, dass der Quelltext nicht an den Browser übermittelt wird, sondern an einen Interpreter auf dem Webserver – im Gegensatz zu JavaScript, das in der Regel clientseitig vom Browser interpretiert wird. Erst die Ausgabe des PHP-Interpeters wird an den Browser geschickt. In den meisten Fällen ist dies ein HTML-Dokument, wobei es mit PHP aber auch möglich ist, andere Dateitypen, wie z. B. Bilder oder PDF-Dateien, zu generieren.

Mit PHP lassen sich wie mit Perl auch kommandozeilenorientierte Skripte schreiben, die nichts mit dem Internet zu tun haben. Die GTK-Erweiterung stellt sogar eine Programmierschnittstelle für eine grafische Oberfläche zur Verfügung, für die weder ein Webserver noch ein Browser benötigt werden. Verglichen mit „Allzweck“-Skriptsprachen wie Python, Ruby und Perl waren in einer ersten Version die Schnittstellen für die grafische Oberfläche und zu anderen Betriebssystemfunktionen aber spärlich und wurden kaum verwendet. Die aktuell entwickelte PHP-GTK-Version 2 strebt hingegen eine Abdeckung der GTK-API von 95% an [13], wodurch sich PHP zu einer vielversprechenden Skriptsprache zur Entwicklung plattformunabhängiger Applikationen fortentwickeln könnte. Gegenwärtig findet sich PHP jedoch vor allem im Einsatz auf Webservern.

Um eine PHP-Datei im Rahmen einer Webanwendung ausführen zu können, benötigt man ein System, das mit den in der Datei enthaltenen Anweisungen umgehen kann. Aus diesem Grund wird durch eine Schnittstelle (beispielsweise ISAPI oder CGI) der Interpreter von einem Server-Daemon bzw. Server-Dienst (z. B. Apache oder IIS) ausgeführt. Die Kombination von Linux/Windows als Betriebssystem, Apache als Webserver, MySQL als Datenbanksystem und PHP wird LAMP bzw. WAMP genannt. Fertige LAMP- und WAMP-Pakete, die das einzelne Laden und Konfigurieren von Paketen aus dem Internet unnötig machen, werden u. a. im Projekt XAMPP entwickelt, wobei es inzwischen Versionen für Linux, Solaris, Windows und Mac OS X gibt.

Die Vorteile der serverseitigen Ausführung sind, dass beim Client (Browser) keine speziellen Fähigkeiten erforderlich sind oder Inkompatibilitäten auftreten können, wie es beispielsweise bei JavaScript und den verschiedenen Browsern der Fall ist. Außerdem bleibt der PHP-Quelltext der Seite auf dem Server, und nur die generierten Daten sind für den Besucher einsehbar. Gleiches gilt für andere Ressourcen wie z. B. Datenbanken, die daher auch keine direkte Verbindung zum Client benötigen.

Nachteilig ist, dass jede Aktion des Benutzers erst bei einem erneuten Aufruf der Seite erfasst werden kann. Da PHP normalerweise in einer Webserver-Umgebung läuft, unterliegt es auch dem zustandslosen HTTP. Außerdem wird jede PHP-Seite vom Webserver interpretiert, wodurch dessen Belastung steigt. Diese Vor- und Nachteile sind nicht PHP-spezifisch, sondern treten bei grundsätzlich jeder Web-Anwendung auf. Zusätzlich liest, prüft und übersetzt der Interpreter den Quelltext bei jedem Aufruf erneut. Dies mindert die Reaktionsgeschwindigkeit des Servers und erhöht nochmals die Last. Um dem entgegenzuwirken, stehen verschiedene Bytecode-Caches zur Verfügung, welche eine zur Ausführung vorbereitete Version des Programmes zwischenspeichern und somit den Zugriff auf diese Datei beim nächsten Aufruf beschleunigten (siehe auch Abschnitt Performance).

Code-Beispiel

Einfaches PHP-Skript (gibt „Hallo Welt!“ aus):

<?php
  echo "Hallo Welt!";
?>

Anmerkung: echo kann auch durch print ersetzt werden, und es können auch einfache Anführungszeichen (') statt doppelten (") verwendet werden. Die Unterscheidung der einfachen von den doppelten Anführungszeichen entscheidet darüber, ob in der Zeichenkette auftauchende Variablennamen unverändert zu übernehmen oder durch den entsprechenden Variableninhalt zu ersetzen sind. Außerdem wird die Bearbeitung von Escape-Sequenzen hierdurch gesteuert.

Das Skript in HTML integriert (gibt ebenfalls „Hallo Welt!“ auf der Webseite aus):

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
 <html>
   <head>
    <title>Hallo-Welt-Beispiel</title>
   </head>
   <body>
     <?php 
       echo "Hallo Welt!";
     ?>
   </body>
 </html>

Mängel

PHP ist zeitweise ungesteuert gewachsen, so wurden viele ähnlich arbeitende Funktionen oft unterschiedlich benannt (sehr deutlich wurde dies bei Funktionen zum Zugriff auf verschiedene Datenbanksysteme). Auch die logische Reihenfolge der Funktionsparameter stimmt bei Funktionen mit ähnlichem Zweck nicht immer überein. Zudem sind trotz vorhandener Objektorientierung die meisten Standardbibliotheken noch prozedural angelegt. Threading fehlt in PHP völlig und einige wenige PHP-Module sind nicht threadsicher. Auch besitzt PHP keinen Bytecode-Cache, wie bei anderen Skriptsprachen (z. B. Perl) teilweise üblich, was bei jedem Aufruf einer Datei ein komplettes Parsen notwendig macht.

Weiterhin kann PHP von sich aus nur Zeichenketten in ISO 8859-1-Kodierung verarbeiten; PHP bietet bisher zwar einige Funktionen, bei denen ein Zeichensatz (darunter auch UTF-8) für die Verarbeitung von Zeichenketten angegeben werden kann, sowie Funktionen zur Konvertierung von und nach UTF-8, jedoch kann der isolierte Zugriff auf einzelne Zeichen einer Zeichenketten (wie beispielsweise durch $string{4} auf das vierte Zeichen in der Zeichenkette string) unerwartete Ergebnisse liefern.

In früheren Versionen wurden die fehlende oder unzureichend implementierte Objektorientierung sowie das Fehlen von Ausnahmebehandlungen bemängelt.

Behebung von Mängeln

PHP wird kontinuierlich weiterentwickelt und befindet sich derzeit, durch die Einstellung der Entwicklung von PHP 4, in einem großen Wandel.

Seit der Version 5 unterstützt PHP durch Kapselung der Daten (z. B. private Variablen), Destruktoren und Außnahmebehandlung per Exceptions verbesserte und erweiterte Möglichkeiten der objektorientierten Programmierung. Auch sind Objekt-Variablen in PHP 5 wie bei den meisten Programmiersprachen nur noch eine Referenz auf das Objekt und nicht wie in PHP 4 das Objekt selbst. Ebenso wurde dem oft bemängelten uneinheitlichen Zugriff auf verschiedene Datenbanken in der Version 5.1 mit der objektorientierten Datenbankabstraktionsebene PDO entgegengewirkt. Ab der Version 5.3 wird PHP zudem Namensräume unterstützen.[14]

In der Version 6 werden endgültig Probleme verursachende Komponenten wie Magic Quotes [15], der Safe Mode [16] sowie Register Globals, die schon länger standardmäßig deaktivert sind, entfernt. Auch wird der Standardzeichensatz von ISO 8859-1 auf Unicode geändert [17].

Probleme, die durch Unkenntnis entstehen

Oft werden einige Unterschiede zu anderen Programmiersprachen als Mangel beschrieben, dennoch sind sie nur Probleme, die durch Unkenntnis des Programmiers entstehen und somit vermieden werden können.

So ist beispielsweise die schwache Typisierung von PHP eine häufige Fehlerquelle bei PHP-Anfängern. Es wird häufig nicht der Operator für typsichere Vergleiche verwendet, wenn numerische Werte mit Zeichenketten verglichen werden sollen, wodurch es durch die dynamische Typisierung zu unerwünschten Ergebnissen kommen kann. Auch die unübliche Vereinigung des Array-Konzepts mit dem Dictionary-Konzept (auch bekannt als assoziative Arrays) sorgt bei Programmierern, die mit anderen Programmiersprachen vertraut sind, oft für Fehler. Zudem ist es in PHP nicht möglich, eine förmliche Deklaration von Variablen zu erzwingen. Variablen werden vielmehr automatisch angelegt, wenn sie erstmals verwendet werden. Dies ist zwar bequem, hat aber zur Folge, dass insbesondere Tippfehler bei Variablennamen zu nur schwer auffindbaren Programmfehlern führen können (dieser Mangel kann zumindest während der Entwicklung durch die Aktivierung von Warnungen bei der Benutzung nicht initialisierter Variablen (E_NOTICE) abgeschwächt werden, so dass der Programmierer bei der Skriptausführung auf das Problem hingewiesen wird).

Im Zusammenhang mit globalen Variablen und bestimmten Serverkonfigurationen können bei unachtsamer Programmierung durch Variablenmanipulation Sicherheitslücken entstehen, so können über die URL einer Seite Variablen geändert werden, wenn diese nicht ordnungsgemäß vor der ersten Benutzung initialisiert werden. Beispielsweise erhält durch den Aufruf von http://example.com/beispiel.php?a=test&b=irgend_ein_wert die Variable a den Wert „test“ und b entsprechend den Wert „irgend_ein_wert“. Haben nun Variablen, die im Skript verwendet werden, den selben Namen wie die in der URL übergebenen Variablen und werden ohne vorherige Prüfung verwendet, können Sicherheitslücken wie SQL-Injections oder Cross-Site Scripting entstehen. Um diese Art von Manipulation zu verhindern, sollte die automatische Variablenvorbelegung mit der Option register_globals=off (seit PHP 4.2 standardmäßig voreingestellt) in der PHP-Konfiguration abgeschaltet werden. Sollte dies nicht möglich sein, muss zumindest jede Variable vor der ersten Verwendung initalisiert werden. Auf die per URL übergebenen Variablen kann über die globalen Arrays HTTP_GET_VARS und HTTP_POST_VAR (je nach Übertragungsart) bzw. seit PHP 4.1.0 über die globalen Arrays $_GET und $_POST zugegriffen werden.

Lizenz und Bezug

PHP 3 wurde unter der GNU General Public License (GPL) vertrieben. Seit Version 4 wird PHP unter der PHP License vertrieben, da der neue Parser, die Zend Engine, vom Hersteller Zend unter einer nicht GPL-kompatiblen Lizenz veröffentlicht wird. Die PHP-Lizenz ist eine Softwarelizenz, die die freie Verwendung und Veränderung der Quelltexte erlaubt. Die Software kann somit kostenlos aus dem Internet geladen werden; daneben ist PHP auch schon bei einigen Betriebssystemen (z. B. bei allen relevanten Linux-Distributionen oder Mac OS X) im Lieferumfang enthalten.

Performance

Setzt man PHP als CGI-Programm ein, ist die Performance nicht optimal. Für jeden HTTP-Request startet der Webserver eine neue Instanz des PHP-Interpreters, welche jedes Mal den Quelltext des aufgerufenen Skriptes neu übersetzt. Um den Start der Interpreter-Instanzen zu sparen, setzt man PHP üblicherweise als Servermodul, d. h. Teil der Webserver-Prozesse, oder über FastCGI ein. Da bei kleinen Skripten das Starten des PHP-Interpreters bei weitem am meisten Zeit verbraucht, führt diese Maßnahme zu einer drastischen Leistungssteigerung.

Bei umfangreichen Projekten mit viel PHP-Quelltext kann es sich lohnen, auch das Neuübersetzen des Skriptes zu vermeiden. Dazu verwendet man einen sog. Bytecode-Cache. Anders als bei Java oder Perl ist es bei PHP nicht standardmäßig vorgesehen, den aus dem PHP-Quelltext erzeugten Bytecode zu speichern und später auszuführen. Die für PHP verfügbaren Bytecode-Caches sind Erweiterungen, die man von Hand einbinden muss.

Beispiele für diese Caches sind Turck-mmCache, der nicht mehr weiterentwickelt wird, und dessen Nachfolger eAccelerator, der Alternative PHP Cache, der IonCube-Accelerator (alle Open Source und Freeware) sowie der kommerzielle Zend Optimizer.

Der Leistungsgewinn hängt von der Art der Skripte ab. Je geringer die eigentliche Laufzeit des Skriptes im Vergleich zum Umfang des Quellcodes ist, desto mehr lohnt sich der Einsatz solcher Optimierer. Die von den Anbietern angegebenen Leistungssteigerungen sind als Maximalwerte zu verstehen. [18]

Weiterhin kann man die Leistung von PHP dadurch steigern, dass man umfangreiche Teile des Quellcodes in separate Dateien auslagert und nur bei Bedarf einbindet. Dafür stellt PHP 5 mit „Autoloading“ eine geeignete Methode bereit [19]. Auch ohne Bytecode-Caches spart man so das Übersetzen von Teilen des Quellcodes.

In einem kürzlich veröffentlichten Datenbank-Contest [20] der Zeitschrift c't ist eine Lösungsvariante mit MySQL, welche PHP als Frontend nutzt, unter Linux mit der besten Performance gegenüber Varianten in Java, C++ und anderen Sprachen als Sieger hervorgegangen. Dabei wurde der oben erwähnte Alternative PHP Cache (APC) eingesetzt. Allerdings ging es bei dem Test um die Datenbank und nicht um die eingesetzte Skriptsprache.

Laut dem Computer Language Shootout [21] wie auch dem Win32 Computer Language Shootout [22] liegt PHP bei Standardproblemen in Bezug auf Laufzeit und Ressourcenverbrauch in den meisten Benchmarks leicht bis deutlich hinter anderen populären Skriptsprachen wie Python oder Perl.

Schutzsysteme für PHP-Installationen

Suhosin [23] ist ein fortgeschrittenes Schutzsystem für PHP-Installationen. Es wurde entworfen, um den Server und die Benutzer vor bekannten und unbekannten Fehlern in PHP-Anwendungen und im PHP-Kern zu schützen.

Verbreitete PHP-Applikationen

Es gibt verschiedene, sehr weit verbreitete Applikationen, die in PHP geschrieben wurden. Hier eine kleine Auswahl.

Literatur

Gedruckte Werke zu PHP veralten aufgrund der permanenten Weiterentwicklung von PHP schnell. Die aktuellen Informationen und Dokumentationen findet man auf der offiziellen Website.

Wiktionary: PHP – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen
Wikibooks: Websiteentwicklung: PHP – Lern- und Lehrmaterialien

Dies ist eine kleine Auswahl von Links zu PHP. Eine ausführliche Linksammlung findet sich im Open Directory Project.

Zeitschriften

Quellen

  1. lerdorf.com. (englisch, abgerufen am 31. Mai 2021).
  2. a b c PHP: Preface - Manual. (abgerufen am 25. August 2016).
  3. Rasmus Lerdorf | PHP on Hormones. 29. Juli 2013 (abgerufen am 19. März 2016).
  4. Rasmus Lerdorf: "PHP's design goal from the very beginning is very simple. To solve the common web problem. That's it."
  5. a b Ankündigung von Rasmus Lerdorf zu PHP 1.0 in der Newsgroup comp.infosystems.www.authoring.cgi
  6. Changelog für PHP 4.0.0
  7. http://de.php.net/ChangeLog-5.php#5.0.0 Changelog für PHP 5.0.0
  8. http://de.php.net/ChangeLog-5.php#5.1.0 Changelog für PHP 5.1.0
  9. [http://de.php.net/ChangeLog-5.php#5.2.0 Changelog für PHP 5.2.0
  10. http://blog.webteam.at/2007/uber-ein-neues-halbes-feature-in-php-53/, "Einführung in late static binding"
  11. Heise online: Pflege von PHP4 wird zum Jahresende weitgehend eingestellt
  12. PHP.net News Archive: PHP 4 end of life announcement
  13. http://gtk.php.net (Englisch), abgerufen am 17. Juni 2007
  14. PHP Manual: Namespaces
  15. PHP Manual: Magic quotes
  16. PHP Manual: Safe mode
  17. PHP-Conference 2005: Präsentation von Andrei Zmievski (PDF)
  18. Jean-François Bustarret: Benchmarking PHP accelerators, 11. Juli 2006
  19. The PHP Group: PHP: Autoloading – Manual, 11. Juli 2006
  20. c't: Datenbank Contest
  21. http://shootout.alioth.debian.org
  22. http://dada.perl.it/shootout/
  23. Hauptseite des Suhosin-Projekts