Navigation


PHP

25.05.2012 @ 12:39, Felix J.,


{{Begriffsklärungshinweis}}

{{Infobox Programmiersprache
|Logo = 150px
|Beschreibung = serverseitig interpretierte Skriptsprache
|Erscheinungsjahr = 1995
|Designer = Rasmus Lerdorf
|Entwickler = The PHP Group
|AktuelleVersion = 5.4.3{{Internetquelle|hrsg=The PHP Group|url=http://www.php.net/ChangeLog-5.php#5.4.3|titel=PHP 5 ChangeLog Version 5.4.3|datum=2012-05-08|zugriff=2012-05-08}}
|AktuelleVersionFreigabeDatum = 8. Mai 2012
|AktuelleVorabVersion =
|AktuelleVorabVersionFreigabeDatum =
|Typisierung = schwach, dynamisch
|Betriebssystem = plattformunabhängig
|Lizenz = PHP-Lizenz
|Website = [http://www.php.net/ www.php.net]
|Beeinflusst_von = Perl, C, C++, Java
|Paradigma = imperativ, objektorientiert

}}

PHP (rekursives Akronym für „PHP: 158H159ypertext 160P161reprocessor“, Backronym aus „Personal 164H165ome 166P167age Tools“) ist eine Skriptsprache mit einer an C und Perl angelehnten Syntax, die hauptsächlich zur Erstellung dynamischer Webseiten oder Webanwendungen verwendet wird.[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.“] PHP wird als freie Software unter der PHP-Lizenz verbreitet.

PHP zeichnet sich durch die breite Datenbankunterstützung[http://www.php.net/manual/de/refs.database.php PHP-Handbuch: Datenbankerweiterungen] und Internet-Protokolleinbindung sowie die Verfügbarkeit zahlreicher Funktionsbibliotheken[http://de.php.net/extensions PHP-Handbuch: Erweiterungen] aus. PHP wird auf ca. 75 % aller Websites als serverseitige Programmiersprache eingesetzt{{Internetquelle|url=http://w3techs.com/technologies/overview/programming_language/all|titel=Usage of server-side programming languages for websites|zugriff=29. Oktober 2010}} und ist damit die am häufigsten verwendete Sprache zum Erstellen von Websites.

Geschichte


Personal Home Page Tools (PHP1)


PHP wurde 1995 von Rasmus Lerdorf entwickelt. Der Begriff stand damals noch für Personal Home Page Tools und war ursprünglich als Ersatz für eine Sammlung von Perl-Skripten gedacht, die Lerdorf zur Protokollierung der Zugriffe auf seinen Online-Lebenslauf geschrieben hatte.[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]

PHP/FI (PHP2)


Bald schuf Lerdorf eine umfangreichere Version in der Programmiersprache C, in der PHP bis heute entwickelt wird. Das schließlich veröffentlichte PHP/FI (FI stand für Form Interpreter) war Perl sehr ähnlich, wenn auch eingeschränkter.

PHP3


PHP3 wurde von Andi Gutmans und Zeev Suraski neu geschrieben, da das inzwischen erschienene PHP/FI 2 ihrer Meinung nach für E-Commerce unzureichend war. Lerdorf kooperierte nun mit Gutmans und Suraski, und so wurde die Entwicklung von PHP/FI eingestellt. Die Version PHP3 brachte die Verbreitung der Web-Skriptsprache PHP bedeutend voran.

PHP4


Das von Gutmans und Suraski gegründete Unternehmen Zend Technologies Ltd. entwickelte in der Folge die Zend Engine 1, die den Kern der PHP-4-Standardimplementierung bildet. 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 eine Anzahl neuer 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 mit der Zeit für die Webentwicklung populärer als der vorherige De-facto-Standard Perl, weil es durch seine Spezialisierung als einfacher erlernbar galt.

Seit 2008 ist die Weiterentwicklung und der Support eingestellt. Die Software kann auch nicht mehr auf der offiziellen Website heruntergeladen werden.

PHP5


Im Sommer 2004 wurde mit Version 5.0 eine weitere Entwicklungsstufe veröffentlicht. Wesentlicher Unterschied zum Vorgänger ist die Zend Engine II, die vor allem ein verbessertes Objektmodell nutzt, somit objektorientierte Anwendungen effizienter ausführt und Sprachkonstrukte wie Überladung ermöglicht. Dazu kommen Exceptions, Reflection, die Integration der Datenbank SQLite sowie Erweiterungen bei XML- und DOM-Handhabung.

Derzeit werden der ältere Versionszweig 5.3 und der aktuelle Versionszweig 5.4 weiterentwickelt. Die Weiterentwicklung von PHP 5.2 ist seit Anfang 2011 eingestellt. Die letzte Version 5.2.17 kann weiterhin auf [http://www.php.net/downloads.php www.php.net/downloads.php] heruntergeladen werden, aber es gibt kein Support mehr.

PHP6


Die Entwicklung von PHP6 wurde eingestellt. Es war ursprünglich die Unterstützung verschiedener Unicode-Standards geplant, das Vorhaben war jedoch nicht erfolgreich[http://lwn.net/Articles/379909/ Resetting PHP6][http://www.slideshare.net/andreizm/the-good-the-bad-and-the-ugly-what-happened-to-unicode-and-php-6 The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6]. Einige Verbesserungen sind in PHP 5.3 (Namensräume, Late Static Bindings, die goto-Anweisung, Lambdas und Closures) und 5.4 (Traits, Closure Rebinding) eingeflossen.

Wichtige Versionen


{{Version |t |zeige=11111}}
{| class="wikitable"
|- class="hintergrundfarbe5"
! Haupt-
version
! Version
! style="min-width: 10em;"| Veröffentlichung
! Wichtigste Änderungen
|-
! 1.x
| {{Version |o |1.0.0}}
| 8. Juni 1995
| Offiziell „Personal Home Page Tools (PHP Tools)“ genannt. Das ist die erste Verwendung des Begriffes „PHP“.
|-
! 2.x
| {{Version |o |2.0.0}}
| 16. April 1996
| Von den Entwicklern als das „schnellste und einfachste Tool“ zum Erstellen von dynamischen Webseiten bezeichnet.
|-
! 3.x
| {{Version |o |3.0.0}}
| 6. Juni 1998
| Die Entwicklung wird nicht mehr nur von einer Person vorangetrieben. Zeev Suraski und Andi Gutmans schreiben die Codebasis für diese Version vollständig neu.
|-
! rowspan="10"| 4.x
| {{Version |o |4.0.0}}
| 22. Mai 2000
| Einfache objektorientierte Programmierung hinzugefügt. Hinzufügen einer fortgeschrittenen zweistufigen Parser- bzw. Ausführungsmaschine, Zend Engine genannt.{{cite web| title=PHP: PHP 4 ChangeLog| url=http://www.php.net/ChangeLog-4.php| publisher=The PHP Group| accessdate=2008-02-22| date=2008-01-03}}
|-
| {{Version |o |4.0.6}}
| 23. Juni 2001
| Letzte Sicherheits- und Stabilitätsaktualisierung des Entwicklungszweigs 4.0; fünf Aktualisierungen erschienen zuvor: 4.0.1 bis 4.0.5.
|-
| {{Version |o |4.1.0}}
| 10. Dezember 2001
| Einführung von „Superglobals“ ($_GET, $_POST, $_SESSION, etc.).
|-
| {{Version |o |4.1.2}}
| 12. März 2002
| Letzte Sicherheits- und Stabilitätsaktualisierung des Entwicklungszweigs 4.1; zuvor erschien die Aktualisierung 4.1.1.
|-
| {{Version |o |4.2.0}}
| 22. April 2002
| Standardmäßige Deaktivierung von register_globals. Daten, die über ein Netzwerk empfangen werden, werden nicht direkt in den globalen Namensraum eingefügt. Damit werden potentielle Sicherheitslücken in der Anwendung verhindert.
|-
| {{Version |o |4.2.3}}
| 6. September 2002
| Letzte Sicherheits- und Stabilitätsaktualisierung des Entwicklungszweigs 4.2; zwei Aktualisierungen erschienen zuvor: 4.2.1 und 4.2.2.
|-
| {{Version |o |4.3.0}}
| 27. Dezember 2002
| Einführung von CLI als Zusatz zu CGI.
|-
| {{Version |o |4.3.11}}
| 31. März 2005
| Letzte Sicherheits- und Stabilitätsaktualisierung des Entwicklungszweigs 4.3; zehn Aktualisierungen erschienen zuvor: 4.3.1 bis 4.3.10.
|-
| {{Version |o |4.4.0}}
| 11. November 2005
| Hinzufügen von Man-Seiten für phpize und php-config-Skripten.
|-
| {{Version |o |4.4.9}}
| 7. August 2008
| Letzte Sicherheits- und Stabilitätsaktualisierung des Entwicklungszweigs 4.4; acht Aktualisierungen erschienen zuvor: 4.4.1 bis 4.4.8.
|-
! rowspan="23"| 5.x
| {{Version |o |5.0.0}}
| 13. Juli 2004
| Zend Engine II mit neuem Objektmodell, das private Methoden und Attribute und Überladung erlaubt. Exceptions hinzugefügt, Reflections API, MySQLi (MySQL verbessert, objektorientiert und auf aktuelle MySQL-Versionen zugeschnitten), SQLite integriert, SimpleXML (einfacher XML-Parser, Update und Insert von Kindelementen möglich), DOM-Unterstützung.
|-
| {{Version |o |5.0.5}}
| 5. September 2005
| Letzte Sicherheits- und Stabilitätsaktualisierung des Entwicklungszweigs 5.0; vier Aktualisierungen erschienen zuvor: 5.0.1 bis 5.0.4.
|-
| {{Version |o |5.1.0}}
| 24. November 2005
| Leistungsverbesserungen durch die Einführung von Compilervariablen. Datenbankabstraktionsschicht hinzugefügt (PDO).
|-
| {{Version |o |5.1.6}}
| 24. August 2006
| Letzte Sicherheits- und Stabilitätsaktualisierung des Entwicklungszweigs 5.1; fünf Aktualisierungen erschienen zuvor: 5.1.1 bis 5.1.5.
|-
| {{Version |o |5.2.0}}
| 2. November 2006
| Schnellere und effizientere Speicherverwaltung, Filtererweiterung 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 Datumserweiterung (DateTime und DateTimeZone) hinzugefügt.
|-
| {{Version |o |5.2.17}}
| 6. Januar 2011
| Letzte Sicherheits- und Stabilitätsaktualisierung des Entwicklungszweigs 5.2; sechzehn Aktualisierungen erschienen zuvor: 5.2.1 bis 5.2.16.
|-
| {{Version |o |5.3.0}}
| 30. Juni 2009
| Unterstützung von Namensräumen (Namespaces); verbesserter XML-Support durch Nutzung von XMLReader und XMLWriter; SOAP-Unterstützung, Late Static Binding, Jump label (begrenzt auf goto), Closures, Native PHP-Archive (Phar).
|-
| {{Version |o |5.3.4}}
| 10. Dezember 2010
| Behebung von Sicherheits- und Stabilitätsproblemen. Der Konstruktor einer Klasse in einem Namespace muss seit 5.3.3 __construct genannt werden, daher ist diese Version nicht abwärtskompatibel, da älterer Code unter Umständen nicht mehr korrekt arbeitet. Drei Aktualisierungen erschienen zuvor: 5.3.1 bis 5.3.3.
|-
| {{Version |o |5.3.5}}
| 6. Januar 2011
| Behebung des bekannten Floating-Point-Bugs.[http://www.heise.de/developer/meldung/PHP-5-3-5-5-2-17-Floating-Point-Bug-behoben-1164801.html] heise.de zum Floating Point Bug (abgerufen am 19. Mai 2011)
|-
| {{Version |o |5.3.6}}
| 17. März 2011
| Behebung von Sicherheits- und Stabilitätsproblemen.
|-
| {{Version |o |5.3.7}}
| 18. August 2011
| Behebung von Sicherheits- und Stabilitätsproblemen.
|-
| {{Version |o |5.3.8}}
| 23. August 2011
| Behebung einer in Version 5.3.7 eingeführten Regression in der crypt()-Funktion.[https://bugs.php.net/bug.php?id=55439 Eintrag zum crypt()-Bug in PHP 5.3.7 im PHP-Bugtracker auf php.net]
|-
| {{Version |o |5.3.9}}
| 10. Januar 2012
| Behebung von Sicherheits- und Stabilitätsproblemen. Durch einen Workaround, der einen DoS-Angriff auf Basis von Hash-Kollisionen verhindern soll, ist jedoch eine aus der Ferne ausnutzbare Sicherheitslücke, die Codeausführung ermöglicht, geschaffen worden.[http://thexploit.com/secdev/critical-php-remote-vulnerability-introduced-in-fix-for-php-hashtable-collision-dos/ Critical PHP Remote Vulnerability Introduced in Fix for PHP Hashtable Collision DOS]
|-
| {{Version |o |5.3.10}}
| 2. Februar 2012
| Behebung der in PHP 5.3.9 eingeführten kritischen Sicherheitslücke.[http://www.php.net/archive/2012.php#id2012-02-02-1 PHP 5.3.10 Released!]
|-
| {{Version |o |5.3.11}}
| 26. April 2012
| Behebung von Fehlern. Unterstützung von Apache 2.4.x.[http://www.php.net/archive/2012.php#id2012-04-26-1 PHP 5.3.11 And PHP 5.4.1 released!]
|-
| {{Version |o |5.3.12}}
| 3. Mai 2012
| Behebung einer schweren Sicherheitslücke, die bei bestimmten Serverkonfigurationen (php-cgi) die Anzeige von PHP-Quellcode und das Ausführen von Code ermöglicht.[http://www.php.net/archive/2012.php#id2012-05-03-1 PHP 5.3.12 and PHP 5.4.2 Released!]
|-
| {{Version |co |5.3.13}}
| 8. Mai 2012
| Behebung der in 5.3.12 nicht richtig geschlossenen Sicherheitslücke.
|-
| {{Version |cp |5.3.14 RC1_05}}
| 25. Mai 2012 (Vorabversion)
| Kann über [http://qa.php.net qa.php.net] heruntergeladen werden
|-
| {{Version |o |5.4.0}}
| 1. März 2012
| Traits, $this-Support in Closures, Array- und Konstruktor-Dereferenzierung, Interface JsonSerializable, Entfernung von register_globals und magic_quotes, vereinfachte Schreibweise für Arrays, integrierter Webserver, Binäre Notation[http://docs.php.net/manual/en/migration54.new-features.php Übersicht der PHP 5.4-Features]
|-
| {{Version |o |5.4.1}}
| 26. April 2012
| Unterstützung von Apache 2.4.x.
|-
| {{Version |o |5.4.2}}
| 3. Mai 2012
| Behebung einer schweren Sicherheitslücke, die bei bestimmten Serverkonfigurationen (php-cgi) die Anzeige von PHP-Quellcode und das Ausführen von Code ermöglicht.[http://www.php.net/archive/2012.php#id2012-05-03-1 PHP 5.3.12 and PHP 5.4.2 Released!]
|-
| {{Version |c |5.4.3}}
| 8. Mai 2012
| Behebung der in 5.4.2 nicht richtig geschlossenen Sicherheitslücke.
|-
| {{Version |cp |5.4.4 RC1_05}}
| 25. Mai 2012 (Vorabversion)
| Kann über [http://qa.php.net qa.php.net] heruntergeladen werden
|-
! rowspan="1" |6.x
| {{Version |p |6.0.0}}
| Entwicklung eingestellt
| Unicode-Unterstützung. Weiterentwicklung zugunsten von PHP 5.4 eingestellt, Neuerungen fließen / flossen in PHP 5.3.x und PHP 5.4.x ein.

|}

Weiterentwicklungen


Objektorientierung


Seit der Version 5 unterstützt PHP durch Kapselung der Daten, Destruktoren und Ausnahmebehandlung per Exceptions verbesserte und erweiterte Möglichkeiten der objektorientierten Programmierung. Auch Objekt-Variablen sind in PHP 5 wie bei den meisten Programmiersprachen nur noch Referenzen auf Objekte und nicht wie in PHP 4 die Objekte selbst.

Aktuelle Versionen setzen weitere Konzepte objektorientierter Programmierung ein, so werden seit Version 5.3 Namensräume[http://de.php.net/manual/de/language.namespaces.php PHP-Handbuch: Namespaces] und seit Version 5.4 Traits unterstützt.

Datenbankanbindung


Mit der objektorientierten Datenbankabstraktionsebene PDO wurde dem oft bemängelten uneinheitlichen Zugriff auf verschiedene Datenbanken in der Version 5.1 entgegengewirkt.

Speicheroptimierung


In PHP 5.3 wurde eine deutliche Verbesserung der Speicheranforderung eines PHP-Skripts zur Laufzeit durch einen internen Garbage Collector erreicht. Seitdem ist eine Zusatzinstallation von Zend Optimizer nicht mehr notwendig.

Webserver


Seit Version 5.4 ist ein einfacher Webserver integriert, der über die Kommandozeile konfigurierbar ist. Er wird nicht für den Produktiveinsatz empfohlen.

Unicode


Ab Version 5.4 ist der Standardzeichensatz von ISO 8859-1 auf Unicode geändert worden.[http://de.php.net/manual/de/migration54.other.php Zeichensatz-Änderungen in PHP 5.4] (Englisch) Ziel ist noch die vollständige Unicode-Umsetzung aller Funktionen in PHP, die nach wie vor noch nicht abgeschlossen ist.PHP-Conference 2005: [http://www.gravitonic.com/downloads/talks/intlphpcon2005/php_unicode.pdf Präsentation von Andrei Zmievski] (PDF) Damit werden vor allem interne Probleme mit Sprachkonstrukten bei der Verarbeitung von Unicode gelöst. Um Standard-Zeichenkettenfunktionen zu nutzen, welche keine Parameter für den Zeichensatz besitzen, können durch das Überladen der entsprechenden Multibyte-Funktionen auf Unicode-Fähigkeit umgestellt werden.[http://de.php.net/manual/de/mbstring.overload.php PHP-Dokumentation - Funktionsüberladung] (Englisch)

Funktionsweise


{{Panorama|PHP funktionsweise.svg|800|Darstellung der Funktionsweise von PHP}}

PHP ist ein System, das PHP-Code serverseitig verarbeitet. Das bedeutet, dass der Quelltext nicht an den Webbrowser übermittelt wird, sondern an einen Interpreter auf dem Webserver. Erst die Ausgabe des PHP-Interpreters wird an den Browser geschickt. In den meisten Fällen ist das ein HTML-Dokument, wobei es mit PHP aber auch möglich ist, andere Dateitypen, wie Bilder oder PDF-Dateien, zu generieren.

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, wie ISAPI oder CGI, der Interpreter von einem Server-Daemon oder Server-Dienst, wie Apache oder IIS, ausgeführt. Die Kombination von Linux/Windows/OS X als Betriebssystem, Apache als Webserver, MySQL als Datenbanksystem und PHP wird LAMP (für Linux), WAMP (für Windows) oder MAMP (für OS X) genannt. Fertige LAMP-, MAMP- und WAMP-Pakete, die das einzelne Laden und Konfigurieren von Paketen aus dem Internet unnötig machen, werden etwa im Projekt XAMPP entwickelt. Hier gibt es Versionen für Linux, Solaris, Windows und Mac OS X.

Da PHP normalerweise in einer Webserver-Umgebung läuft, unterliegt es auch dem zustandslosen HTTP. Jede PHP-Seite belastet den Webserver durch den Interpreter, zudem arbeitet der Interpreter den Quelltext bei jedem Aufruf erneut ab. Das mindert die Reaktionsgeschwindigkeit des Servers und erhöht die Last. Um dem entgegenzuwirken, stehen verschiedene Bytecode-Caches zur Verfügung, die eine zur Ausführung vorbereitete Version des Programmes zwischenspeichern und somit den Zugriff auf diese Datei beim nächsten Aufruf beschleunigen (siehe auch Abschnitt Ausführungsgeschwindigkeit).

Mit PHP lassen sich auch kommandozeilenorientierte Skripte schreiben, die vom Internet unabhängig sind. Die Qt-Erweiterung und die GTK-Erweiterung stellen sogar eine Programmierschnittstelle für eine grafische Oberfläche zur Verfügung, für die weder ein Webserver noch ein Browser benötigt werden. Die ersten Versionen der Schnittstellen zur grafischen Oberfläche und zu anderen Betriebssystemfunktionen waren spärlich und wurden kaum verwendet. Die aktuell entwickelte PHP-GTK-Version 2 strebt hingegen eine Abdeckung der GTK-API von 95 % an.http://gtk.php.net (Englisch), abgerufen am 17. Juni 2007 Gegenwärtig wird PHP jedoch vor allem auf Webservern genutzt.

Code-Beispiel



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



echo 'Hallo Welt!';
?>

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





Hallo-Welt-Beispiel


echo 'Hallo Welt!';
?>


Anmerkung: Der PHP-Interpreter interpretiert den Code zwischen , der übrige Code (üblicherweise HTML) wird unverändert an den Client zurückgegeben.

Kritik


Allgemein


Kritiker führen eine Reihe von Unzulänglichkeiten in PHP an. So sei die Sprache zeitweise ungesteuert gewachsen, wodurch ähnlich arbeitende Funktionen oft unterschiedlich benannt worden sind und die Reihenfolge der Funktionsparameter bei Funktionen mit ähnlichem Zweck teilweise nicht übereinstimmen. Zudem sind trotz vorhandener Objektorientierung die meisten Standardbibliotheken noch prozedural angelegt. Threading fehlt in PHP völlig und einige PHP-Module sind nicht threadsicher.

PHP besitzt zudem keinen eigenen Bytecode-Cache, was ohne entsprechende Erweiterung bei jedem Aufruf einer Datei ein komplettes Parsen notwendig macht.

Programmierungsspezifische Probleme


Die schwache Typisierung von PHP ist Teil des Konzepts, aber auch eine häufige Fehlerquelle. Ein Fehler tritt etwa auf, wenn numerische Werte mit Zeichenketten verglichen werden sollen, wobei es durch die implizite Typumwandlung zu unerwarteten Ergebnissen kommen kann, sofern nicht der Operator für typsichere Vergleiche verwendet wurde. Auch die unübliche Vereinigung des Array-Konzepts mit dem Dictionary-Konzept sorgt bei Programmierern, die mit anderen Programmiersprachen vertraut sind, teils für Fehler. Zudem ist es in PHP nicht möglich, eine Variablendeklaration zu erzwingen – Variablen werden vielmehr stets automatisch angelegt, sobald sie erstmals verwendet werden. Diese Bequemlichkeit hat zur Folge, dass etwa Tippfehler im Variablennamen zu schwer auffindbaren Programmfehlern führen können. Dieses Verhalten kann jedoch durch den Fehler-Level E_STRICT abgefangen werden.[http://de.php.net/manual/de/ref.errorfunc.php#ini.error-reporting PHP-Handbuch: Option error_reporting]

Webanwendungsspezifische Probleme


Im Zusammenhang mit globalen Variablen und unsicheren Serverkonfigurationen können Daten in ein Skript eingeschleust werden, indem etwa URL-Parameter gesetzt werden. Um diese Art von Manipulation zu verhindern, empfiehlt das PHP-Handbuch, die Option register_globals=off in der PHP-Konfiguration zu setzen. Seit PHP 4.2 ist das standardmäßig der Fall; in PHP 5.3 wurde die Option als veraltet eingestuft. In PHP 5.4 wurde sie ganz entfernt.{{Internetquelle|url=http://de3.php.net/manual/de/ini.core.php#ini.register-globals|titel=PHP: Beschreibung der php.ini-Direktiven des Sprachkerns|werk=PHP Manual|zugriff=4. Juli 2009}} Generell sollte jede Variable vor der ersten Verwendung initialisiert werden.{{Internetquelle|url=http://de3.php.net/manual/de/security.globals.php|titel=PHP: Verwendung von Register Globals|werk=PHP Manual|zugriff=4. Juli 2009}}

Weiterhin bestehen Gefahren über SQL-Injections oder Cross-Site Scripting-Attacken, die jedoch nicht PHP-spezifisch sind, sondern für alle Webanwendungen gelten. Sie lassen sich beseitigen, indem alle Daten, die das Programm von außen über HTTP oder andere Protokolle empfängt, sorgfältig geprüft und gefiltert werden.{{Internetquelle|url=http://de3.php.net/manual/de/security.variables.php|titel=PHP: Vom Nutzer übermittelte Daten|werk=PHP Manual|zugriff=4. Juli 2009}}

Ausführungsgeschwindigkeit


Allgemein


Setzt man PHP als CGI-Programm ein, so kann sich das negativ auf die Ausführungsgeschwindigkeit auswirken, denn für jede HTTP-Anfrage startet der Webserver hier eine neue Instanz des PHP-Interpreters. Um den Start der Interpreter-Instanzen zu sparen, setzt man PHP üblicherweise als Servermodul, also als Teil der Webserver-Prozesse, oder über FastCGI ein.

Laut dem Computer Language Shootout[http://shootout.alioth.debian.org The Computer Language Benchmarks Game] wie auch bei dessen Windows-Gegenstück Win32 Computer Language Shootout[http://dada.perl.it/shootout/ The Great Win32 Computer Language Shootout] liegt PHP bei Standardproblemen in Bezug auf Laufzeit und Ressourcenverbrauch in den meisten Leistungstests leicht bis deutlich hinter anderen verbreiteten Skriptsprachen wie Python oder Perl.

Bytecode-Caching


Mit der Zend-Engine wird ein PHP-Skript zunächst zu einem (plattformunabhängigen) Bytecode (Zend-Opcode) übersetzt, aus dem zur Ausführung noch Maschinencode erzeugt werden muss. Durch Verwendung eines Bytecode-Cache kann die redundante Generierung von Opcode vermieden werden. PHP besitzt aktuell keinen integrierten Bytecode-Cache, was dazu führt, dass ein Skript bei jedem Aufruf neu übersetzt werden muss. Um dem entgegenzuwirken, gibt es einige Erweiterungen, die diese Funktionalität nachrüsten, wie beispielsweise den eAccelerator, den Alternative PHP Cache, XCache sowie den kommerziellen Zend Optimizer. Besonders bei umfangreichen Skripten kann so eine deutliche Steigerung der Ausführungsgeschwindigkeit erreicht werden. {{Internetquelle |werk=itst.net |autor=Sascha A. Carlin |url=http://itst.net/654-php-on-fire-three-opcode-caches-compared |titel=PHP on Fire: Five Opcode Caches compared. |datum=2006-10-15 |zugriff=2010-06-29 }}

Kompilierung


Der PHP Compiler (PHC) {{Internetquelle |autor=Paul Biggar |url=http://www.phpcompiler.org/ |titel=PHP Compiler (PHC) auf Basis einer mehrjährigen Doktorarbeit |datum=2009-10-01 |zugriff=2011-07-29 }} ist ein OpenSource-Compiler von Paul Biggar, welcher PHP-Scripte in optimierten C-Code übersetzt und dann als eigener Webserver ausführt. Die Grundlage für PHC ist Biggars Doktorarbeit {{Internetquelle |hrsg=Trinity College Dublin |autor=Paul Biggar |url=http://paulbiggar.com/research/ |titel=Design and Implementation of an Ahead-of-Time Compiler for PHP |datum=2009-10-01 |zugriff=2011-07-29 }} aus dem Jahr 2009 und dessen mehrjährige Forschung an Konzepten zur Konvertierung von Scriptsprachen in kompilierte Sprachen. Mit HipHop existiert seit 2010 eine weitere freie Software zum Übersetzen von PHP-Code in optimierten C++-Code, der kompiliert werden kann, was nach Herstellerangaben dort die Leistung im Schnitt auf etwa das Doppelte steigert. HipHop wurde von Facebook entwickelt, um die Serverlast zu senken (laut Facebook um etwa 40 %). Es ist als Open Source-Software auf [https://github.com/facebook/hiphop-php github] zu finden. {{Internetquelle |hrsg=heise Zeitschriften Verlag |werk=heise Developer |autor=Alexander Neumann |url=http://www.heise.de/developer/meldung/Facebook-will-PHP-beschleunigen-920684.html |titel=Facebook will PHP beschleunigen |datum=2010-02-03 |zugriff=2010-02-23 }}

Schutzsysteme für PHP-Installationen


Suhosin[http://www.hardened-php.net/suhosin/index.html Hauptseite des Suhosin-Projekts] ist ein von Stefan Esser, einem ehemaligen Mitglied des „PHP Security Response Team“[http://www.golem.de/showhigh2.php?file=/0612/49448.html News auf Golem.de: „PHP-Sicherheit: Stefan Esser wirft hin“] und Mitentwickler von PHP, entwickeltes 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


Eine Auswahl einiger weit verbreiteter Applikationen, die in PHP entwickelt wurden:

* Invision Power Board, phpBB, Simple Machines Forum, vBulletin und WoltLab Burning BoardForen-Software
* Zend Framework, symfony, CakePHP, HordeWeb-Application-Frameworks
* phpMyAdmin, phpPgAdmin – grafische Benutzeroberflächen zur Verwaltung von MySQL- bzw. PostgreSQL-Datenbanken
* TYPO3, Joomla!, Xoops, DrupalContent-Management-Systeme (CMS)
* WordPress, Serendipity – Software für das Erstellen von Weblogs
* SugarCRM und vtiger CRM – CRM (Customer Relationship Management)
* MediaWikiWiki-Software, die von Wikipedia verwendet wird
* osCommerce, xt:Commerce, Magento, PrestaShop – E-Commerce-Applikationen

* Coppermine, 4images, Pixlie, easyImage - Bildergalerien

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 kostenlos aus dem Internet geladen werden; daneben ist PHP auch im Lieferumfang einiger Betriebssysteme (so bei einigen Linux-Distributionen oder Mac OS X) enthalten.

Literatur



* Frank Dopatka: PHP - endlich objektorientiert. OO- und UML-Praxisbuch: vom Anfänger zum Fortgeschrittenen, Entwickler Press, Frankfurt am Main 2010, ISBN 978-3-86802-039-7.
* Damir Enseleit: SELFPHP – Das PHP Kochbuch. In: Franzis professional series. Franzis, Poing 2006. ISBN 3-7723-7107-8 (inklusive CD-ROM)
* Jens Ferner: PHP 5 Referenz [Programmierung ; die schnelle Referenz: wichtige Funktionen nachschlagen & umsetzen! Dateien, Strings, Arrays, PHP & MySQL im Team, viele kompakte Beispiele für optimalen Nutzen]. Data Becker, Düsseldorf 2004. ISBN 3-8158-2369-2.
* Andre Gildemeister, Hannes Gassert, Mathias Lehn; Christian Stocker, Richard Samar (Hrsg.): PHP de Luxe – PHP5 Edition. [PHP 5.0 - Neuheiten, Migration, Leistungsmerkmale des neuen Objektmodells ; XML, DOM, XSLT, PEAR/PECL, MySQLi, SQLite, Streams u.v.m.]. 2., aktualisierte Auflage, mitp, Bonn 2004. ISBN 3-8266-1482-8.
* Martin Goldmann, Markus Schraudolph: PHP 5. Die Neuerungen. Galileo Press, Bonn 2004. ISBN 3-89842-490-1.
* Matthias Kannengiesser: PHP 5 / MySQL 5. Berücksichtigt PHP 5.3. In: Know-how ist blau. 3., aktualisierte Auflage. Franzis, Poing 2009. ISBN 978-3-645-60010-1.
* Jörg Krause: PHP 5, Grundlagen und Profiwissen. Webserver-Programmierung unter Windows und Linux. 2., aktualisierte Auflage. Hanser, München / Wien 2005. ISBN 3-446-40334-5.
* Christopher Kunz, Peter Prochaska, Stefan Esser: PHP-Sicherheit. 2. Auflage. dpunkt, Heidelberg 2007. ISBN 3-89864-450-2.
* Carsten Möhrke: Besser PHP programmieren. Galileo Press, Bonn 2004. ISBN 3-89842-381-6.
* Stefan Priebsch: Enterprise PHP Tools. Entwickler Press, Frankfurt M 2006. ISBN 3-935042-93-0.
* George Schlossnagle: Professionelle PHP 5-Programmierung. Entwicklerleitfaden für große Webprojekte mit PHP 5 (Originaltitel: Advanced PHP programming übersetzt von Christine Peyton). In: Open source library. Addison-Wesley, München 2005. ISBN 3-8273-2198-0.
* Stephan Schmidt: PHP Design Patterns. 1. Auflage. O’Reilly, Köln 2006. ISBN 3-89721-442-3.
* Thomas Theis: Einstieg in PHP 5 & MySQL 5. 4. Auflage. Galileo press, Bonn 2006. ISBN 3-89842-854-0.
* Tobias Wassermann: Sichere Webanwendungen mit PHP. 1. Auflage. mitp, Bonn 2007. ISBN 3-8266-1754-1.

* Christian Wenz, Tobias Hauser: PHP 5 Kompendium. Markt und Technik, Düsseldorf 2005. ISBN 3-8272-6292-5.

Weblinks


{{Wikibooks|Websiteentwicklung: PHP}}
{{Commonscat|PHP}}
{{Wiktionary|PHP}}
* [http://www.php.net/ Offizielle Website] (englisch)

** [http://de.php.net/manual/de/ PHP-Handbuch in deutscher Sprache]

Einzelnachweise


{{SORTIERUNG:Php}}


Kategorie:Templatesprache
Kategorie:Freies Programmierwerkzeug

Kategorie:Objektorientierte Programmiersprache

{{Link GA|en}}

af:PHP
als:PHP
an:PHP
ar:بي إتش بي
az:PHP
bar:PHP
bat-smg:PHP
be:PHP
be-x-old:PHP
bg:PHP
bn:পিএইচপি
br:Lavar PHP
bs:PHP
ca:PHP
ceb:PHP
ckb:پی ئێچ پی
cs:PHP
cy:PHP
da:PHP
el:PHP
PHP
eo:PHP
es:PHP
et:PHP
eu:PHP
fa:پی‌اچ‌پی (زبان برنامه‌نویسی)
fi:PHP
PHP
gl:PHP
he:PHP
hi:पीएचपी
hr:PHP
hu:PHP
hy:PHP
id:PHP
is:PHP
it:PHP
ja:PHP: Hypertext Preprocessor
ka:PHP
kab:PHP
kk:PHP
km:PHP
ko:PHP
ku:PHP
la:PHP
lb:PHP
lt:PHP
lv:PHP
mg:PHP
mk:PHP
ml:പി.എച്ച്.പി.
mn:PHP
mr:पीएचपी
ms:PHP
my:PHP
nds:PHP
ne:पि एच पि
nl:PHP
nn:PHP
no:PHP
pl:PHP
pt:PHP
ro:PHP
ru:PHP
sah:PHP
sh:PHP
si:PHP
simple:PHP
sk:PHP (programovací jazyk)
sl:PHP
sq:PHP
sr:PHP
sv:PHP
ta:பி.எச்.பி
te:పిహెచ్పి(PHP)
tg:PHP
th:ภาษาพีเอชพี
tk:PHP
tl:PHP
tr:PHP
uk:PHP
ur:PHP
uz:PHP
vi:PHP
vls:PHP
war:PHP
wuu:PHP
yi:PHP
zh:PHP
zh-min-nan:PHP
zh-yue:PHP

weiter

Text und Bilder dieses Beitrags stammen aus dem Artikel PHP der freien Enzyklopädie Wikipedia und stehen unter der GNU Free Documentation License. Die Liste der Autoren ist in der Wikipedia unter dieser Seite verfügbar, der Original-Artikel lässt sich hier bearbeiten.