Die Abkürzung PHP steht offiziell für "PHP: Hypertext Preprocessor". Dies ist eine rekursive Abkürzung im Stile des GNU -Projektes. PHP ist eine serverseitige Scriptsprache zur dynamischen Erstellung von Webseiten. Die Anweisungen der Sprache sind dabei in den HTML-Code einer Webseite eingebettet, d. h. jede HTML-Seite ist auch ein gültiges PHP-Programm. Die Syntax von PHP ist ähnlich wie die von C/C++, Java oder JavaScript. Die Sprache zeichnet sich vor allen Dingen durch ihre leichte Erlernbarkeit, ihre ausgezeichneten Datenbankanbindungen und Internet-Protokolleinbindungen und die Unterstützung zahlreicher weiterer Funktionsbibliotheken aus. PHP stellt so für den Web-Entwickler das ideale Werkzeug zur Erstellung von dynamischen Inhalten dar.
PHP ist freie Software im Sinne der Debian Free Software Guidelines (DFSG) . Quelltext und Binaries des PHP-Interpreters sind frei erhältlich und können für alle kommerziellen und nichtkommerziellen Zwecke eingesetzt werden; jeder kann den PHP-Quelltext weiterentwickeln und die Änderungen an das PHP-Projekt zurückfließen lassen. Der genaue Lizenztext ist in der Datei LICENSE enthalten, die Bestandteil der PHP-Distribution ist.
PHP läuft auf allen gängigen UNIX-Versionen, auf den verschiedenen Windows-Versionen (Windows 95/98/ME/NT/2000/XP) sowie auf MacOS X, OS/2 und einigen anderen Betriebssystemen. Als CGI-Programm kann PHP mit jedem Webserver zusammenarbeiten. Für einige Webserver, allen voran Apache , stehen auch Modulversionen zur Verfügung, die sehr viel effizienter ausgeführt werden. Mit PHP 4.3.0 gibt es auch ein Command Line Interface (CLI), welches PHP für kommandozeilenbasierende Applikationen attraktiv macht.
Die Homepage des PHP-Projektes ist http://www.php.net . Mirrors dieser Site sind in vielen Ländern vorhanden, unter anderem auch in Deutschland unter der URL http://www.php3.de oder http://de.php.net . Von dort kann man die jeweils aktuelle Releaseversion des Interpreters sowie Binaries für eine Reihe von Plattformen herunterladen. Ebenso finden sich dort das Handbuch und Archive der englischen Mailinglisten. Die Geschichte von PHP ist ebenfalls dokumentiert.
Die aktuelle Produktionsversion von PHP ist Version 5.0.3. Diese Version ist die erste ausreichend stabile Version seit dem Release von PHP 5.0.0 am 13.07.2004. Wer auf Stabilität wert legt, sollte jedoch derzeit noch PHP 4 verwenden.
Die derzeit letzte Version von PHP 4 ist Version 4.3.10. An PHP 4 werden derzeit noch Bugfixes vorgenommen und kleinere Änderungen aus der aktuellen Version zurückübernommen (auch "MFH" oder Merge from Head" genannt).
Die letzte Version von PHP 3 war Version 3.0.18 (bzw. 3.0.17 für die kompilierte Windows-Version). PHP 3 wird nicht mehr weiterentwickelt und soll nicht mehr verwendet werden.
Die aktuellste Version ist immer auf der offiziellen PHP Homepage verfügbar.
Wähle Download auf der PHP Website oder einem der Mirrors .
PHP 5.1 ist ein inkrementelles Update auf der Basis der Zend II Engine und des Objektmodells von PHP 5. Die Änderungen sind jedoch - auch wenn sie nur Module betreffen - signifikant.
PDO stellt eine einheitliche Datenbankabstraktion zur Verfügung, die Bestandteil der Sprache selbst ist und keine externe Bibltiotek.
Update der PCRE-Bibliothek für reguläre Ausdrücke auf Version 5.0
Die SPL stellt eine Reihe von Einbaufunktionen und Klassen zur Verfügung, die die folgenden Bereiche abdecken: Iteratoren, Datei- und Verzeichniszugriff, XML-Zugriff, Array-Overloading, auf- und abzählbare Datenstrukturen, Umgang mit Exceptions, Standard-Design-Patterns
Verbesserter Support für SOAP und Webservices durch WSDL-Unterstützung
PHP5 besteht aus dem Sprachkern Zend und den Funktionsmodulen, die den eigentlichen Wert von PHP ausmachen.
Änderungen am Sprachkern:
Die neue Engine liefert ein neues Objektmodell, das PHP zu einer Sprache mit einem schnellen und erstklassigen Objektsystem macht.
Änderungen an den Bibliotheken und Modulen:
PHP 5 verwendet libxml2 und erlaubt es, mit dieser Bibliothek über SAX, DOM oder die Simple XML Extension auf XML-Daten zuzugreifen sowie XSLT-Transformationen durchzuführen.
Mit Hilfe der SOAP-Extension können Webservices einfach und sicher aufgerufen werden.
Die neue MySQLi-Extension erlaubt es, auf neuere Versionen von MySQL zuzugreifen. Dabei kann wahlweise ein traditioneller prozeduraler oder ein objektorientierter Ansatz verwendet werden. Die neue MySQL-API erlaubt es, Variablen zu binden. Wird dies gemacht, werden SQL-Injections sehr viel schwieriger.
Durch Integration der dateibasierten Mini-SQL-Implementierung SQLite ist es möglich, Anwendungen mit Flat-File-Zugriff genauso wie datenbankbasierende Anwendungen zu schreiben.
Der Support für I/O Streams ist stark vebessert und es bestehen nun viel mehr Optionen zur Datenbehandlung bei der Ein- und Ausgabe.
PHP4 besteht aus dem Sprachkern Zend und den Funktionsmodulen, die den eigentlichen Wert von PHP ausmachen.
Änderungen am Sprachkern:
PHP3 war eine interpretierte Sprache. Code wurde nur minimal gecached. Das hatte zur Folge, dass Code in Schleifen oder in oft aufgerufenen Funktionen wieder und wieder neu geparsed werden musste, bevor er ausgeführt werden konnte.
PHP4/Zend ist ein Bytecode-Compiler, der beim Programmstart aufgerufen wird und das komplette Programm in eine interne Darstellung einer virtuellen Maschine überführt. Danach beginnt die Interpretation des Bytecodes der VM. Dies ist dasselbe Funktionsprinzip wie bei Perl, und ganz ähnlich dem Funktionsprinzip von Java, nur dass dort der Compiler explizit aufgerufen werden muss.
PHP4/Zend ist bei einigen Sprachkonstrukten zehnmal schneller als PHP3. Es liegt in den meisten Anwendungen gleichauf mit Perl oder mit Microsoft Visual Basic.
PHP4 kann endlich in Multithreaded-Umgebungen eingesetzt werden. Dadurch wird es möglich, PHP4 als Modul im Roxen Webserver, im Internet Information Server, im AOL/Netscape-Server und in einigen anderen Webservern einzusetzen.
PHP4 kann außerdem als CGI-Programm und als Coprozess zum Webserver eingesetzt werden, der als Java Servlet Engine behandelt wird.
In PHP3 waren Referenzen nur beim Aufruf von Funktionen verwendbar, um Call-by-Reference zu realisieren. In PHP4/Zend gibt es nun endlich vollständigen Support für Referenzen. Das bedeutet:
$foo = &$a;
In diesem Beispiel wird $foo zu einem alternativen Namen für die Variable $a . Dies funktioniert auch mit Arrays und Objekten.
In PHP3 existierten keine Zähler für Datenobjekte außerhalb der Sprache, etwa Image-Handles oder Datenbank-Resultathandles. Diese Ressourcen mussten manuell freigegeben werden.
PHP4/Zend hat für alle Variablen vom Typ Ressource Referenzzähler. Objekte, die nicht mehr referenziert werden, werden automatisch freigegeben. Das bedeutet: Aufrufe zu Funktionen wie mysql_free_result() innerhalb von Schleifen sind nicht mehr zwingend notwendig.
Demnach tut unset() jetzt auch endlich, was es soll.
PHP4 enthält Sessions nach dem Vorbild von PHPLIB als eingebauter Bestandteil der Sprache. Sessions werden standardmäßig als Dateien in einem Verzeichnis abgelegt, aber über Sessionmodule kann auch eine Datenbank, ein Shared Memory Segment oder ein anderer persistenter Speicher verwendet werden.
Anders als PHPLIB kann PHP4 die Session-ID automatisch an URLs anfügen.
Mit Hilfe der Funktion ob_start() kann eine Ausgabepufferung aktiviert werden. Der Ausgabepuffer wird erst am Ende der PHP-Seite oder mit Hilfe der Funktion ob_end_flush() ausgegeben. Die Funktion ob_end_clean() verwirft den Ausgabepuffer. ob_get_contents() überträgt den Ausgabepuffer in eine Variable.
Headerinformation wie sie von header() und setcookie() erzeugt wird ist ungepuffert. Indem man Ausgabepufferung aktiviert, kann man überall in der Datei Headerinformationen senden, egal ob vorher schon Ausgabe erzeugt wurde oder nicht. Ausgabepufferung erhöht die Latenzen bei der Ausgabe der Webseite je nach Anwendung erheblich und kann PHP sehr viel langsamer erscheinen lassen.
In PHP4/Zend ist es möglich, die Objektnotation von PHP zu verwenden, um objektorientiert aufgebaute Funktionsbibliotheken zu verwenden. Zum Beispiel verwenden die COM-Erweiterung und die DOMXML-Erweiterung von PHP4 diese Funktionalität.
Außerdem enthält PHP4 nun endlich Funktionen, mit denen Objekte über sich selbst Auskunft geben können: get_class() , get_parent_class() , method_exists() , is_subclass_of()
In PHP4 sind die früheren Anweisungen include() und eval() jetzt Funktionen, die einen Wert zurückgeben können. Der Default-Returnwert ist 1 , damit Anweisungen wie if (include(...)) funktionieren.
Mit Hilfe der Anweisung return() kann man den Returncode eines include() oder eval() -Aufrufes setzen.
Der PHP3-Parser hatte Probleme mit Verschachtelungen von Objekten in Arrays. In PHP4/Zend ist dieses Problem behoben.
Shell-Style Here-Documents werden unterstützt.
Es gibt ein foreach() -Schleifenkonstrukt. Syntax:
foreach($my_array as $val)
print "$val\n";
foreach($my_array as $key => $val)
print "$key => $val\n";
Die Schlüsselworte true und false sind nun Teil der Sprache und es gibt einen Datentyp boolean . Vergleiche werden nun durchgeführt, indem ein fremder Datentyp in Boolean konvertiert wird und dann verglichen wird: In PHP4/Zend ist das Konstrukt 5 == true eine wahre Aussage, weil (boolean) 5 in true konvertiert wird, bevor verglichen wird.
Funktionen können nun aufgerufen werden, bevor sie deklariert werden.
Der Import von Variablen in den globalen Namespace war bisher nur schwierig mit der Konfigurationsdirektive gpc_order steuerbar: Zwar konnte man die Reihenfolge unterdrücken, aber es war nicht möglich, den Import von externen Werten in globale Variablen zu verhindern, ohne diese Werte auch in den Track Vars auszuschließen. Umgebungsvariablen und Sessionvariablen waren gar nicht kontrollierbar.
In PHP4 kann man nun den Import von Werten differenziert steuern, und zwar unabhängig voneinander als globale Variablen und als Track Vars.
Ebenso wurde der Konfigurationsmechanismus überarbeitet: Es ist nun möglich, PHP mit denselben Direktiven in der Apache-Konfiguration und in der php.ini zu steuern.
Die Sprache ist außerdem um zahlreiche Funktionen und neue Module erweitert worden.
Zu PHP gibt es zahlreiche Informationsquellen in deutscher und englischer Sprache.
Deutsche Ressourcen im WWWThinkPHP! , eine Website mit kostenlosen Schulungsunterlagen, Artikeln, weiterführendem KnowHow.
Ein Verzeichnis von Projekten, die PHP verwenden, findet man im Projektverzeichnis der offiziellen Homepage .
Phorum , ein Diskussionsforum.
phpSlash , ein Diskussionsforum.
IMP , ein Webmail Interface.
Bookmarker , eine Bookmark-Verwaltung.
PHPLIB , eine objektorientierte Bibliothek zur Anwendungsentwicklung.
phpMyAdmin , ein Managementsystem für MySQL-Datenbanken.
MyGuestbook , ein Gästebuch.
phpAds , ein Verwaltungssystem für Banner Ads.
phpHoo , eine Art Mini-Yahoo.
Prinzipiell ist selbstverständlich jeder ASCII-Editor für PHP geeignet. Syntax-Highlighting und automatische Vervollständigung von Funktionsnamen bietet schon der größte Teil der Editoren. Einige IDEs bieten auch
die Integration des PHP-Manuals
die Möglichkeit des Debuggings (Stop-Punkte, Einzelschritte, ...)
die Integration in Versionsverwaltungssysteme (z.B. CVS)
Unter PHP Editor Rewiew ist eine umfangreiche Liste einsehbar, in der verschiedene Editoren/IDEs mit Bewertungen und Kommentaren aufgeführt sind.
PHPDocumentor (Projektleiter Joshua Eichorn)
PHPDoc (von Ulf Wendel)
PHPDoc (von Goeran Zaengerlein)
PHPDoc (von ?)
PHPDocumentor ist allerdings das einzige dieser Projekte, welches in letzter Zeit ständig weiterentwickelt wurde und als "stable" gekennzeichnet ist.
Antwort von Richard Körber:Einen PHPDoc-Generator, der auf Java basiert und sogar die JavaDoc-Doclets verwendet (zum Beispiel zur Ausgabe in PDFs), gibt es hier: PHPDoc (von Christian Calloway).
Antwort von Sebastian Bergmann:Doxygen unterstützt seit Version 1.2.17 neben C, C++, C#, Java und IDL auch PHP.
LAMP ist die Abkürzung für Linux , Apache , MySQL und PHP . Sie beschreibt ein System zur Entwicklung und zum Betrieb von Webanwendungen, bestehend aus Betriebssystem, Webserver, Datenbankserver und Programmiersprache.
Analog steht die Abkürzung WAMP für Windows , die Windows-Version von Apache , die Windows-Version von MySQL und die Windows-Version von PHP . Viele PHP-Anwender entwickeln lokal auf WAMP und überspielen die fertigen Seiten dann auf einen LAMP- oder SAMP (Solaris, Apache, MySQL, PHP)-Server bei einem Provider.
Der Begriff "Application Server" ist ein sehr schwammiger.
Man könnte unter einem solchen beispielsweise einen Daemon (Server) verstehen, der die Ausgabe von Programmen (Application) über das Internet zur Verfügung stellt. Dieser Definition zufolge wäre bereits ein Webserver mit PHP Unterstützung ein "Application Server".
In der Java Welt hingegen versteht man jedoch etwas anderes unter dem Begriff des "Application Servers":
In einem "Application Server" laufen die Applikationen permanent ab. Kommt ein Request per HTTP, so wird eine entsprechende Methode einer bereits laufenden Anwendung aufgerufen. Diese liefert ein Ergebnis, das an den Client ausgeliefert wird.
Dies bringt mehrere Vorteile mit sich: Die Umgebung der Sprache, in der die Applikation geschrieben wurde -- im Falle von PHP der PHP Interpreter, im Falle von Java die Java Virtual Machine (JVM) (naja, eigentlich ist auch der PHP Interpreter eine virtuelle Maschine, und die Java Virtual Machine ein Bytecode Interpreter -- aber das soll jetzt hier nicht diskutiert werden) -- muss nicht für jeden einzelnen HTTP Request neu initialisiert werden. Ferner können Ressourcen, wie zum Beispiel Datenbankverbindungen, gemeinsam genutzt und somit effizienter verwaltet werden.
Noch schwerer fällt als Vorteil ins Gewicht, dass komplexe Datenstrukturen nur einmal zu Beginn der Applikation aufgebaut werden müssen -- man denke hierbei nur an die OOHForms von Ulf Wendel.
Auch erschließen sich dem Applikationsentwickler neue Möglichkeiten, da er mit einem Application Server Daten zwischen verschiedenen Requests an seine Applikation tauschen kann: denn eigentlich arbeitet ja nur eine Instanz der Applikation sämtliche Anfragen ab.
Zur Zeit gibt es für PHP noch keinen Application Server, der dem Begriff aus der Java Welt gerecht wird. Unter dem Namen Script Running Machine (SRM) arbeiten einige PHP Developer an einem Daemon, der PHP Applikationen permanent ausführen, Datenbankverbindung poolen und Datenstrukturen im Speicher halten kann.
Ohne genauer in die Details zu gehen (immerhin ist das hier eine FAQ zu PHP und nicht zur Funktionsweise des Internets), kann man den Vorgang zwischen dem Eintippen der URL und der Anzeige der (HTML) Daten etwa folgendermaßen zusammenfassen:
Der Client (also der Web-Browser) schickt eine Anfrage an den Server auf dem die PHP-Seite gespeichert ist mit einer Anfrage nach, z.B., index.php . Die Sprache (das Protokoll), in der diese Anfrage gesendet wird, nennt sich HTTP (Hypertext Transfer Protocol, daher beginnen die URLs von Webseiten auch mit "http://").
Am Server wird diese Anfrage von einem speziellen Programm, dem HTTP-Server (z.B. Apache) erhalten. Wenn nun eine statische HTML-Seite ( .html ) gewünscht ist, ließt sie der Server direkt aus und schickt sie zurück an den Client. Ist aber eine PHP-Seite gefragt, leitet er die Anfrage an den PHP-Präprozessor (dem Programm das sozusagen hinter der Programmiersprache PHP steht) weiter. Dieser ließt nun den PHP-Quelltext der Seite, parst ihn und generiert daraus die HTML-Seite, die an den HTTP-Server und schlussendlich zum Client weitergeleitet wird.
Der Browser stellt nun das zurückgegeben HTML (hier ist also kein PHP-Code mehr enthalten) dar und führt eventuell enthaltenen JavaScript Code aus.
Ruft man phpinfo() auf, bekommt man normalerweise das PHP Logo oben in der rechten Ecke angezeigt. Dies wird realisiert durch einen Verweis auf die URL der phpinfo-Seite selbst mit einer speziellen Objekt-ID als Parameter. Am ersten April erscheint dort ein Verweis auf die spezielle Objekt-ID =PHPE9568F36-D428-11d2-A769-00AA001ACF42 , die ein Bild von Thies C. Arntzen referenziert, einem Mitglied des PHP Core Teams und Autor zahlreicher Extensions.