PHP-Handbuch

von:
Mehdi Achour
Friedhelm Betz
Antony Dovgal
Nuno Lopes
Hannes Magnusson
Georg Richter
Damien Seguy
Jakub Vrana
2009-10-30
Herausgegeben von: Philip Olson
Bei der Übersetzung wirkten mit:
Florian Anderiasch
Arne Blankerts
Cornelia Boenigk
Timo Buhmann
Hartmut Holzgraefe
Daniel Jänecke
Hakan Kücükyilmaz
Carola Kummert
Sebastian Nohn
Dirk Randhahn
Thorsten Rinne
Martin Samesch
Mark Wiesemann

Copyright

Copyright © 1997 - 2009 by the PHP Documentation Group. Dieses Material darf nur gemäß den Regeln und Bedingungen der Creative Commons Attribution License Version v3.0 oder neuer weiter verbreitet werden. Eine Kopie der Creative Commons Attribution 3.0 license ist in diesem Handbuch enthalten, die aktuellste Version ist unter » http://creativecommons.org/licenses/by/3.0/ verfügbar.

Für den Fall, dass Sie daran interessiert sind, dieses Dokument weiter zu verbreiten oder in sonstiger Form zu veröffentlichen, in Teilen oder als Ganzes, entweder verändert oder unverändert, und Sie Fragen haben, können Sie Kontakt zu den Copyright-Inhabern über » doc-license@lists.php.net. aufnehmen. Bitte beachten Sie, dass das Archiv dieser Maillingliste öffentlich zugänglich ist.



PHP-Handbuch


Vorwort

PHP ist die Abkürzung für "PHP: Hypertext Preprocessor", eine weitverbreitete Open Source Skriptsprache speziell für Webentwicklungen. PHP läßt sich in HTML einbinden. Die Syntax erinnert an C, Java und Perl und ist einfach zu erlernen. Das Hauptziel dieser Sprache ist es, Webentwicklern die Möglichkeit zu geben, schnell dynamisch generierte Webseiten zu erzeugen. Aber Sie können PHP für weitaus mehr einsetzen.

Dieses Handbuch besteht vorranging aus einer Funktionsreferenz, enthält aber zusätzlich auch eine Sprachreferenz, Erläuterungen zu den wichtigsten Features und weitere ergänzende Informationen.

Sie können dieses Handbuch in verschiedenen Formaten unter » http://www.php.net/download-docs.php herunterladen. Informationen dazu, wie dieses Handbuch erstellt wird, finden Sie im Anhang unter dem Kapitel 'Über dieses Handbuch'. Wenn Sie sich für die Geschichte von PHP interessieren, lesen Sie bitte den entsprechenden Anhang.

Autoren und Mitwirkende

Wir heben die zur Zeit aktivsten Personen auf der Titelseite des Handbuchs hervor, aber es gibt viel mehr Mitwirkende, die zur Zeit mithelfen oder in der Vergangenheit einen großen Beitrag zu diesem Projekt geleistet haben. Ebenfalls gibt es eine Vielzahl von Personen, die hier nicht namentlich aufgeführt sind, die durch ihre User Notes auf den Handbuchseiten mithelfen. Die User Notes werden kontinuierlich in unser Handbuch integriert und wir schätzen diese Unterstützung außerordentlich. Alle folgenden Listen sind alphabetisch sortiert.

Autoren und Editoren

Folgende Personen verdienenen Anerkennung dafür, dass Sie wesentlichen Inhalt zum Handbuch beigetragen haben und/oder weiterhin beitragen werden: Bill Abt, Jouni Ahto, Alexander Aulbach, Daniel Beckham, Stig Bakken, Jesus M. Castagnetto, Ron Chmara, Sean Coates, John Coggeshall, Simone Cortesi, Markus Fischer, Wez Furlong, Sara Golemon, Rui Hirokawa, Brad House, Pierre-Alain Joye, Etienne Kneuss, Moriyoshi Koizumi, Rasmus Lerdorf, Andrew Lindeman, Stanislav Malyshev, Rafael Martinez, Rick McGuire, Yasuo Ohgaki, Derick Rethans, Rob Richards, Sander Roobol, Egon Schmid, Thomas Schoefbeck, Sascha Schumann, Dan Scott, Masahiro Takagi, Michael Wallner, Lars Torben Wilson, Jim Winstead, Jeroen van Wolffelaar und Andrei Zmievski.

Folgende Personen haben durch Ihre Editionsarbeit wesentlich zum Handbuch beigetragen: Stig Bakken, Gabor Hojtsy, Hartmut Holzgraefe und Egon Schmid.

User Note-Betreuer

Die zurzeit aktivsten Betreuer: Daniel Brown, Nuno Lopes, Felipe Pena, Thiago Pojda und Maciek Sokolewicz.

Auch folgende Personen haben einiges an Mühe und Zeit zur Betreuung der User Notes investiert: Mehdi Achour, Daniel Beckham, Friedhelm Betz, Victor Boivie, Jesus M. Castagnetto, Nicolas Chaillan, Ron Chmara, Sean Coates, James Cox, Vincent Gevers, Sara Golemon, Zak Greant, Szabolcs Heilig, Oliver Hinckel, Hartmut Holzgraefe, Etienne Kneuss, Rasmus Lerdorf, Matthew Li, Andrew Lindeman, Aidan Lister, Hannes Magnusson, Maxim Maletsky, Bobby Matthis, James Moore, Philip Olson, Sebastian Picklum, Derick Rethans, Sander Roobol, Damien Seguy, Jason Sheets, Tom Sommer, Jani Taskinen, Yasuo Ohgaki, Jakub Vrana, Lars Torben Wilson, Jim Winstead, Jared Wyles und Jeroen van Wolffelaar.




Einführung


Introduction

Inhaltsverzeichnis


Was ist PHP?

PHP (rekursives Akronym fürPHP: Hypertext Preprocessor) ist eine weit verbreitete und für den allgemeinen Gebrauch bestimmte Open Source-Skriptsprache, welche speziell für die Webprogrammierung geeignet ist und in HTML eingebettet werden kann.

Nett, aber was heißt das genau? Ein Beispiel:

Beispiel #1 Ein einführendes Beispiel

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

        <?php
        
echo "Hallo, ich bin ein PHP-Skript!";
        
?>

    </body>
</html>

Anstatt ein Programm mit vielen Anweisungen zur Ausgabe von HTML zu schreiben, schreibt man etwas HTML und bettet einige Anweisungen ein, die irgendetwas tun (wie hier "Hallo, ich bin ein PHP-Skript!" auszugeben). Der PHP-Code steht zwischen speziellen Anfangs- und Abschluss-Verarbeitungsinstruktionen <?php und ?>, mit denen man in den "PHP-Modus" und zurück wechseln kann.

PHP unterscheidet sich von clientseitigen Sprachen wie Javascript dadurch, dass der Code auf dem Server ausgeführt wird und dort HTML-Ausgaben generiert, die an den Client gesendet werden. Der Client erhält also nur das Ergebnis der Skriptausführung, ohne dass es möglich ist herauszufinden, wie der eigentliche Code aussieht. Sie können Ihren Webserver auch anweisen, alle Ihre HTML-Dateien mit PHP zu parsen, denn dann gibt es wirklich nichts, das dem Benutzer sagt, was Sie in petto haben.

Das Beste an der Verwendung von PHP ist, dass es für Neueinsteiger extrem einfach ist, aber auch einen riesigen Funktionsumfang für den professionellen Programmierer bietet. Scheuen Sie sich nicht, die lange Liste der PHP-Funktionen zu lesen. Sie können einsteigen, und binnen weniger Stunden bereits mit dem Schreiben von einfachen Skripten beginnen.

Auch wenn die Entwicklung von PHP auf serverseitige Programmierung fokussiert ist, können Sie mit PHP weitaus mehr anstellen. Lesen Sie mehr im Abschnitt Was kann PHP? oder oder benutzen Sie direkt das Einführungstutorial, wenn Sie nur an Webprogrammierung interessiert sind.



Was kann PHP?

Alles. PHP ist hauptsächlich auf serverseitige Skripte fokussiert, weshalb Sie alles tun können, was auch ein anderes CGI-Programm kann, wie z.B. Formulardaten sammeln, dynamische Inhalte für Webseiten generieren oder Cookies senden und empfangen. Aber PHP kann noch viel mehr.

Es gibt drei Hauptgebiete, in denen PHP-Skripte genutzt werden.

  • Serverseitige Programmierung. Dies ist das traditionelle und auch Hauptfeld von PHP. Sie benötigen drei Dinge, um damit arbeiten zu können: Den PHP-Parser (CGI oder Server-Modul), einen Webserver und einen Webbrowser. Sie müssen einen Webserver laufen lassen, der mit einer PHP-Installation verbunden ist. Sie können auf die Ausgabe Ihres PHP-Programms mittels eines Webbrowsers zugreifen, der die Seite mithilfe des Servers darstellt. Dieses gesamte Szenario können Sie auf Ihrem heimischen Rechner laufen lassen, wenn Sie erst einmal mit PHP-Programmierung experimentieren wollen. Weitere Informationen finden Sie im Abschnitt Installation.
  • Kommandozeilenprogrammierung. Es ist auch möglich PHP-Skripte schreiben, die ohne einen Server oder Browser arbeiten können. Sie benötigen dafür nur den PHP-Parser. Die Art der Nutzung ist ideal für Programme, die regelmäßig mitels cron (auf *nix oder Linux) oder dem Task Scheduler (unter Windows) ausgeführt werden. Die Skripte können außerdem verwendet werden, um einfache Textprozessierung auszuführen. Weitere Informationen dazu finden Sie im Abschnitt Verwendung von PHP auf der Eingabezeile.
  • Schreiben von Desktop-Applikationen. PHP ist wahrscheinlich nicht die allerbeste Sprache, um Desktop-Anwendungen mit grafischer Oberfläche zu schreiben, aber wenn Sie PHP sehr gut kennen und einige weiterführende PHP-Features in Ihren clientseitigen Applikationen nutzen möchten, können Sie PHP-GTK nutzen, um derartige Programme zu schreiben. Auf diese Art haben Sie auch die Möglichkeit, plattformübergreifende Applikationen zu schreiben. PHP-GTK ist eine Erweiterung von PHP, die in der Hauptdistribution nicht enthalten ist. Sollten Sie daran interessiert sein, besuchen Sie die » PHP-GTK Website.

PHP kann auf allen gängigen Betriebssystemen verwendet werden, inkl. Linux, vielen Unix-Varianten (inkl. HP-UX, Solaris und OpenBSD), Microsoft Windows, Mac OS X, RISC OS, und wahrscheinlich anderen. PHP unterstützt auch die meisten der heute gebräuchlichen Webserver. Dies umfasst Apache, Microsoft Internet Information Server, Personal Web Server, Netscape- und iPlanet-Server, Oreilly Website Pro-Server, Caudium, Xitami, OmniHTTPd und viele andere. Für den Großteil der Server bietet PHP ein eigenes Modul, für die anderen, die den CGI-Standard unterstützen, kann PHP als CGI-Prozessor arbeiten.

So haben Sie die Freiheit, PHP auf dem Betriebssystem und dem Webserver Ihrer Wahl laufen zu lassen. Weiterhin können Sie je nach Vorliebe prozedural oder objektorientiert programmieren oder eine Mischung aus beidem verwenden. Auch wenn in PHP 4 noch nicht jedes Standard-OOP-Feature implementiert ist, sind viele Codebibliotheken und große Applikationen (unter anderem die PEAR-Bibliothek) bereits ausschließlich objektorientiert programmiert. Mit PHP 5 werden die objektorientierten Schwächen von PHP 4 behoben und ein vollständiges Objektmodell eingeführt.

Mit PHP sind Sie nicht auf die Ausgabe von HTML beschränkt. Seine Fähigkeiten umfassen auch das dynamische Generieren von Bildern, PDF-Dateien und Flashanimationen (mittels libswf und Ming). Sie können auch leicht jede Art von Text, wie XHTML oder irgendeine andere XML Datei, ausgeben. PHP kann diese Dateien automatisch generieren und im Dateisystem speichern anstatt diese nur auszugeben. Auf diese Weise lässt sich ein serverseitiger Cache Ihrer dynamischen Inhalte erstellen.

Vielleicht die größte und bemerkenswerteste Stärke von PHP ist seine Unterstützung für eine breite Masse von Datenbanken. Eine datenbankgestützte Website zu erstellen ist unglaublich einfach. Die folgenden Datenbanken werden zur Zeit unterstützt:

  • Adabas D
  • dBase
  • Empress
  • FilePro (nur Lesezugriff)
  • Hyperwave
  • IBM DB2
  • Informix
  • Ingres
  • InterBase
  • FrontBase
  • mSQL
  • Direct MS-SQL
  • MySQL
  • ODBC
  • Oracle (OCI7 und OCI8)
  • Ovrimos
  • PostgreSQL
  • Solid
  • SQLite
  • Sybase
  • Velocis
  • Unix dbm

Wir haben auch eine Extension zur Datenbankabstraktion (names PDO), welche Ihnen die transparente Verwendung irgendeiner von dieser Erweiterung unterstützten Datenbank erlaubt. Desweiteren unterstützt PHP ODBC, den Open Database Connection Standard, mit welchem Sie sich mit jeder anderen Datenbank verbinden können, die diesen weltweiten Standard unterstützt.

PHP unterstützt auch die Kommunikation mit anderen Services, welche Protokolle wie LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (auf Windows) und unzählige andere unterstützen. Sie können auch einfache Netzwerk-Sockets öffnen und unter Verwendung irgendeines anderen Protokolls kommunizieren. PHP unterstützt auch WDDX (Web Distributed Data Exchange) zum Austausch komplexer Daten zwischen Programmiersprachen. Da wir gerade vom Zusammenwirken sprechen: PHP unterstützt auch die Instantiierung von Java-Objekten und deren transparente Verwendung als PHP-Objekte. Sie können auch unsere CORBA-Erweiterung verwenden, um auf entfernte Objekte zuzugreifen.

PHP verfügt über äußerst hilfreiche Textverarbeitungsfunktionen, von den regulären Ausdrücken (POSIX erweitert oder Perl) bis zum Parsen von XML-Dokumenten. Für den Zugriff und das Parsen von XML-Dokumenten unterstützt PHP 4 die Standards SAX und DOM. Sie können außerdem die XSLT-Extension verwenden, um XML-Dokumente zu transformieren. PHP 5 vereinheitlicht all diese XML-Extensions auf der soliden Basis der libxml2-Bibliothek und erweitert diese Funktionalität durch die hinzugefügte Unterstützung von SimpleXML and XMLReader.

Es gibt noch viele andere interessante Erweiterungen, wie mnoGoSearch für Suchmaschinen, die IRC-Gateway-Funktionen, viele Komprimierungswerkzeuge (gzip, bz2, zip), Kalenderumrechnung, Übersetzung uws.

Wie Sie sehen können, reicht diese Seite nicht aus, um alle Möglichkeiten und Vorteile von PHP aufzulisten. Lesen Sie im Abschnitt Installation weiter und konsultieren Sie auch die Funktionsreferenz für weitere Erläuterungen der einzelnen hier erwähnten Erweiterungen.




Auf diesen Seiten möchten wir Ihnen die Grundlagen von PHP in einem kleinen Tutorial vorstellen. Dieser Text behandelt nur das Erstellen von dynamischen Web-Seiten, obwohl PHP natürlich nicht nur dafür geeignet ist. Weitere Informationen finden Sie im Abschnitt Was kann PHP?.

Mit PHP erweiterte Web-Seiten werden wie normale HTML-Seiten behandelt. Sie können sie genauso wie normale HTML-Seiten erstellen und bearbeiten.


Was brauche ich?

In diesem Tutorial gehen wir davon aus, dass auf Ihrem Server die PHP-Unterstützung aktiviert ist und dass die Dateiendung .php PHP zugeordnet ist. Auf den meisten Servern ist dies die Standardeinstellung für PHP-Dateien, aber fragen Sie bitte Ihren Server-Administrator, um sicherzugehen. Wenn Ihr Server PHP unterstützt, müssen Sie nichts machen. Erstellen Sie einfach Ihre .php-Dateien und legen Sie diese in Ihr Web-Verzeichnis - der Server wird sie dann für Sie parsen. Sie müssen nichts kompilieren und auch keine Zusatz-Tools installieren. Stellen Sie sich diese PHP-erweiterten Dateien wie normale HTML-Seiten mit einer ganzen Familie von "magischen" Tags, die Sie verschiedenste Dinge tun lassen, vor. Die meisten Webhoster unterstützen PHP auf ihren Servern. Wenn Ihr Hoster dies nicht tut, dann können Sie auf der Seiter » PHP Links solche Hoster finden.

Angenommen, Sie möchten Bandbreite sparen und lokal entwickeln. In diesem Fall müssen Sie einen Webserver wie z.B. » Apache und natürlich » PHP installieren. Sehr empfehlenswert ist auch die Installation einer Datenbank wie z.B. » MySQL.

Sie können diese Programme entweder eins nach dem anderen selbst installieren oder den folgenden einfacheren Weg gehen. Unser Handbuch bietet ausführliche Installationsanweisungen für PHP (dabei gehen wir davon aus, dass Sie schon einen Webserver installiert haben). Falls Sie Probleme bei der Installation von PHP haben, dann empfehlen wir Ihnen, dass Sie Ihre Fragen auf unserer » Installations-Mailingliste stellen. Noch einfacher ist es, » vorkonfigurierte Pakete für Ihr Betriebssystem zu benutzen, die alle oben genannten Programm mit einigen wenigen Mausklicks installieren. Es ist ziemlich einfach, einen Webserver mit PHP-Unterstützung auf jedem Betriebssystem, wie MacOSX, Linux5oder Windows, aufzusetzen. Unter Linux sind » rpmfind und » PBone hilfreich, wenn Sie RPM-Pakete suchen. Wenn Sie Pakete für Debian suchen, dann besuchen Sie bitte » apt-get.



Ihre erste PHP-erweiterte Seite

Erstellen Sie eine Datei mit dem Namen hallo.php und speichern Sie sie im Root-Verzeichnis Ihres Webservers (DOCUMENT_ROOT) mit dem folgenden Inhalt:

Beispiel #1 Unser erstes PHP-Skript: hallo.php

<html>
 <head>
  <title>PHP-Test</title>
 </head>
 <body>
 <?php echo '<p>Hallo Welt</p>'?>
 </body>
</html>

Benutzen Sie Ihren Browser, um die Datei über den Webserver-URL aufzurufen. Der URL muss mit /hallo.php enden. Wenn Sie lokal entwickeln, sieht der URL z.B. so aus: http://localhost/hallo.php oder http://127.0.0.1/hallo.php - andere Adressen sind aber, abhängig vom Webserver, auch möglich. Wenn Sie alles korrekt installiert haben, wird die Datei von PHP geparst und Sie werden die folgende Ausgabe in Ihrem Browser sehen:

<html>
 <head>
  <title>PHP-Test</title>
 </head>
 <body>
 <p>Hallo Welt</p>
 </body>
</html>

Das Beispiel ist extrem einfach und natürlich brauchen Sie PHP nicht, um eine Seite wie diese zu erstellen. Denn es macht nicht mehr, als Hallo Welt mit der echo()-Anweisung von PHP auszugeben. Bitte beachten Sie, dass die Datei nicht ausführbar sein muss. Der Server erkennt anhand der Dateiendung ".php", dass sie durch PHP interpretiert werden muss. Stellen Sie sich eine normale HTML-Datei vor, die eine Menge von speziellen Tags enthält, mit denen Sie einige interessante Dinge tun können.

Wenn Sie dieses Beispiel ausprobiert haben und Sie aber keine Ausgabe erhalten haben oder zum Download aufgefordert worden sind oder die komplette Datei als Text erhalten haben, dann ist es sehr wahrscheinlich, dass auf Ihrem Server PHP nicht aktiviert oder falsch konfiguriert ist. Fragen Sie in diesem Fall Ihren Administrator und weisen Sie ihn auf das Installations-Kapitel hin. Wenn Sie lokal entwickeln, lesen Sie bitte das Installations-Kapitel, um festzustellen, ob alles richtig konfiguriert wurde. Stellen Sie sicher, dass Sie die datei über das HTTP-Protokoll aufrufen können. Wenn Sie die Datei direkt aus Ihrem Dateisystem aufrufen, wird sie nicht durch PHP geparst. Sollten Ihre Probleme nach Lesen dieses Kapitels immer noch bestehen, zögern Sie nicht und nutzen Sie eines der vielen » Support-Angebote.

Der wichtigste Punkt im Beispiel ist, Ihnen das spezielle PHP Tag-Format zu zeigen. Im Beispiel wurde <?php verwendet, um den Beginn eines PHP-Tags zu kennzeichnen. Anschließend folgte die PHP-Anweisung. Mit dem schließenden Tag, ?>, wurde der PHP-Modus wieder verlassen. Sie können an jeder Stelle und so oft Sie wollen, in den PHP-Modus wechseln und ihn wieder verlassen. Für weitere Details lesen Sie bitte den Abschnitt zu den Grundlagen der Syntax von PHP.

Hinweis: Anmerkungen zu Zeilenwechseln
Zeilenwechsel sind in HTML nur von geringer Bedeutung, trotzdem ist es sinnvoll HTML Code durch Zeilenwechsel zu formatieren um die Lesbarkeit zu erhöhen. Ein Zeilenwechsel der direkt auf ein schließendes ?>> folgt wird von PHP bei der Ausgabe entfernt. Dies ist äußerst nützlich wenn Sie viele PHP-Blöcke einfügen oder Dateien includieren die keine Ausgabe erzeugen sollen, auf der anderen Seite kann es aber auch verwirrend sein. Sie können einen Zeilenwechsel erzwingen indem sie entweder ein zusätliches Leerzeichen hinter ?> einfügen oder explizit mit echo oder print ein Zeilenwechselzeichen am ende ihres Codes ausgeben.

Hinweis: Anmerkung zu Text-Editoren
Es gibt eine ganze Reihe von Text-Editoren und Integrated Development Environments (IDEs), mit denen Sie Ihre PHP-Dateien erstellen, bearbeiten und managen können. Eine Liste solcher Programme finden Sie hier: » PHP Editors List. Wenn Sie einen Editor vorschlagen möchten, besuchen Sie bitte die genannte Seite und bitten Sie den Betreiber der Seite, dass er den Editor der Liste hinzufügt. Wir empfehlen Ihnen einen Editor zu benutzen, der Syntax-Highlighting bietet.

Hinweis: Anmerkung zu Textverarbeitungen
Textverarbeitungen wie StarOffice Writer, Microsoft Word und Abiword sind keine gute Wahl, um PHP-Dateien zu bearbeiten. Wenn Sie eines dieser Programme für dieses Test-Skript nutzen möchten, dann müssen Sie sicherstellen, dass die Datei als "Nur Text"-Datei gespeichert wird, da PHP sonst das Skript nicht lesen und nicht ausführen kann.

Hinweis: Anmerkung zu Notepad, dem Windows-Standard-Editor
Wenn Sie Ihre PHP-Skripte mit Notepad schreiben, müssen Sie sicherstellen, dass Ihre Dateien mit der Endung .php gespeichert werden. (Notepad fügt die Endung .txt automatisch an den Dateinamen an, wenn Sie das nicht mit einem der folgenden Schritte verhindern.) Wenn Sie die Datei speichern und einen Namen für die Datei eingeben sollen, dann setzen Sie den Dateinamen in Anführungszeichen (z.B. "hallo.php"). Alternativ können Sie auch im "Datei speichern"-Fenster in der Drop-Down-Liste "Dateityp" die Einstellung auf "Alle Dateien" ändern. Sie können dann den Dateinamen ohne Anführungszeichen eingeben.

Nachdem Sie jetzt erfolgreich ein einfaches, funktionierendes PHP-Skript geschrieben haben, wird es Zeit, das berühmteste PHP-Skript zu schreiben. Rufen Sie die Funktion phpinfo() auf und Sie bekommen viele nützliche Informationen über Ihr System und Ihre Installation wie z.B. die verfügbaren vordefinierten Variablen, die geladenen PHP-Module und die Konfigurations-Einstellungen. Nehmen Sie sich etwas Zeit und schauen Sie sich diese wichtigen Informationen an.

Beispiel #2 Hole Systeminformationen mit PHP

<?php phpinfo(); ?>



Nützliches

Kommen wir nun zu einem etwas nützlicheren Beispiel. Wir wollen prüfen, welchen Browser der Besucher benutzt. Um das zu tun, prüfen wir den "user agent"-String, den der Browser als Teil seiner HTTP-Anforderung sendet. Diese Information ist in einer Variablen abgelegt. In PHP beginnen Variablen immer mit einem Dollar-Zeichen. Die Variable, die uns jetzt interessiert, ist $_SERVER['HTTP_USER_AGENT'].

Hinweis: $_SERVER ist eine speziell reservierte PHP-Variable, die alle Informationen über den Webserver enthält. Diese Variable wird auch als superglobal bezeichnet. Mehr Informationen darüber Sie auf der Manual-Seite über Superglobals. Diese speziellen Variablen wurden in PHP » 4.1.0 eingeführt. Vorher wurden stattdessen die älteren $HTTP_*_VARS-Arrays benutzt, also z.B. $HTTP_SERVER_VARS. Auch wenn diese Variablen nicht mehr genutzt werden sollen - sie existieren weiterhin. (Beachten Sie auch die Seite Alten Code mit neuen PHP-Versionen benutzen.)

Um die Variable auszugeben, schreiben Sie einfach:

Beispiel #1 Variable ausgeben (Array-Element)

<?php
  
echo $_SERVER['HTTP_USER_AGENT'];
?>

Die Ausgabe dieses Beispiel könnte so aussehen:


Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Es gibt viele Typen von Variablen. Im obigen Beispiel haben wir ein Array-Element ausgegeben. Arrays können sehr nützlich sein.

$_SERVER ist nur eine von vielen Variablen, die Ihnen automatisch von PHP zur Verfügung gestellt werden. Eine Liste finden Sie auf der Seite Reservierte Variablen im Manual. Eine vollständige Liste können Sie auch bekommen, wenn Sie sich die Ausgabe der phpinfo()-Funktion ansehen, die im Beispiel des vorigen Abschnitts benutzt wurde.

Sie können mehrere PHP-Anweisungen innerhalb eines PHP-Tags platzieren und so kleine Code-Blöcke schreiben, die mehr als nur eine Ausgabe mit echo() enthalten. Wenn wir zum Beispiel prüfen möchten, ob es sich beim Browser des Besuchers um den Internet Explorer handelt, können wir folgenden Code benutzen:

Beispiel #2 Beispiel, das Kontrollstrukturen und Funktionen benutzt

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
    echo 
"Sie benutzen Microsofts Internet Explorer.<br />";
}
?>

Die Ausgabe dieses Skripts könnte so aussehen:

Sie benutzen Microsofts Internet Explorer.<br />

Hier haben wir Ihnen eine ganze Reihe von neuen Konzepten vorgestellt. Wir haben hier zuerst eine if-Anweisung. Wenn Sie mit der Grundlagen-Syntax von der Programmiersprache C vertraut sind, sollte Ihnen dies logisch erscheinen. Andernfalls sollten Sie sich ein Buch mit einer PHP-Einführung besorgen und die ersten Kapitel lesen. Sie können natürlich auch in die Sprachreferenz des Manuals schauen.

Das zweite hier vorgestellte Konzept ist der Aufruf der Funktion strpos(). strpos() ist eine in PHP eingebaute Funktion, die nach einem String in einem anderen String sucht. In diesem Fall suchen wir nach 'MSIE' (die so genannte Nadel, engl. needle) in $_SERVER['HTTP_USER_AGENT'] (der so genannte Heuhaufen, engl. haystack). Wenn die Nadel im Hauhaufen gefunden wird, gibt die Funktion die Position der Nadel relativ zum Start des Heuhaufens zurück. Andernfalls wird FALSE zurückgegeben. Wenn nicht FALSE zurückgeben wird, wird die if-Anweisung zu TRUE ausgewertet und der Code innerhalb der geschweiften Klammern wird ausgeführt. Andernfalls wird der Code innerhalb der Klammern nicht ausgeführt. Probieren Sie weitere ähnliche Beispiele mit if, else und anderen Funktionen wie strtoupper() oder strlen(). Jede dieser Manual-Seiten enthält weitere Beispiele. Wenn Sie unsicher sind, wie die Funktionen benutzt werden, dann lesen Sie die Handbuch-Seite Wie sind Funktionsdefinitionen (Prototypen) zu lesen? und den Abschnitt zu den PHP-Funktionen.

Wir können jetzt einen Schritt weitergehen und sehen, wie Sie innerhalb eines PHP-Blocks den PHP-Modus verlassen und wieder in ihn hinein gelangen können:

Beispiel #3 HTML- und PHP-Modus vermischt

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() muss nicht false zurückgegeben haben</h3>
<p>Sie benutzen Microsofts Internet Explorer.</p>
<?php
} else {
?>
<h3>strstr muss false zurückgegeben haben</h3>
<p>Sie benutzen nicht Microsofts Internet Explorer.</p>
<?php
}
?>

Die Ausgabe dieses Skripts könnte so aussehen:

<h3>strpos() muss nicht false zurückgegeben haben</h3>
<p>Sie benutzen Microsofts Internet Explorer.</p>

Anstatt die PHP echo-Anweisung für die Ausgabe zu benutzen, haben wir den PHP-Modus verlassen und normales HTML verwendet. Der wichtige Punkt hierbei ist, dass der logische Ablauf des Skripts dadurch nicht gestört wird. Nur einer der beiden HTML-Blöcke wird ausgegeben - abhängig davon, was strstr() zurückgibt bzw. ob der String MSIE gefunden wird oder nicht.



Formulare verarbeiten

Eine der mächtigsten Funktionen von PHP ist die Art, wie HTML-Formulare verarbeitet werden. Sie sollten wissen, dass jedes Element eines Formulars automatisch in Ihren PHP-Skripts verfügbar ist. Bitte lesen Sie die Seite Variablen aus externen Quellen für weitere Informationen und Beispiele über das Benutzen von Formularen mit PHP. Hier ist ein Beispiel-HTML-Formular:

Beispiel #1 Ein einfaches HTML-Formular

<form action="action.php" method="post">
 <p>Ihr Name: <input type="text" name="name" /></p>
 <p>Ihr Alter: <input type="text" name="alter" /></p>
 <p><input type="submit" /></p>
</form>

An diesem Formular ist nichts Besonderes. Es ist ein normales HTML-Formular ohne irgendwelche speziellen Tags. Wenn der Benutzer das Formular ausfüllt und den Submit-Button anklickt, wird die Seite action.php aufgerufen. Diese Datei könnte so aussehen:

Beispiel #2 Daten des Formulars ausgeben

Hallo <?php echo $_POST['name']; ?>.
Sie sind <?php echo $_POST['alter']; ?> Jahre alt.

Hallo <?php echo htmlspecialchars($_POST['name']); ?>.
Sie sind <?php echo (int)$_POST['alter']; ?> Jahre alt.

Die Ausgabe des Skripts könnte dann so aussehen:

Hallo Joe.
Sie sind 22 Jahre alt.

Abgesehen von dem htmlspecialchars()-Aufruf und dem (int) Cast sollte einfach zu verstehen sein was hier geschieht. htmlspecialchars() stellt sicher das das Zeichen die in HTML eine spezielle Bedeutung haben ordentlich codiert werden so das niemand HTML Tags oder Javascript-Code in ihre Seite einschmuggeln kann. Da wir wissen das das "alter" Feld eine Zahl enthalten soll konvertieren wir es in einen integer Wert wodurch automatisch überflüssige Zeichen entfernt werden. Sie können diese Aufgabe auch PHP überlassen indem sie die Filter Extension benutzen. Die Variablen $_POST['name'] und $_POST['alter'] werden für Sie automatisch von PHP gesetzt. Weiter oben haben wir das superglobale Array $_SERVER eingeführt, jetzt benutzen wir hier das - ebenfalls superglobale - Array $_POST, dass alle POST-Daten enthält. Beachten Sie, dass die im Formular verwendete Methode POST ist. Hätten wir GET verwendet, dann wären die Daten unseres Formulars stattdessen im superglobalen Array $_GET verfügbar. Sie können auch das superglobale Array $_REQUEST benutzen, wenn die Quelle der Daten keine Rolle spielt. Dieses Array enthält die GET-, POST- und COOKIE-Daten. Beachten Sie auch die import_request_variables()-Funktion.

Sie können auch die Eingaben von XForms in PHP verarbeiten, auch wenn Ihnen die gut von PHP unterstützten HTML-Formulare bisher gereicht haben. Auch wenn die Arbeit mit XForms nichts für Anfänger ist, sind vielleicht trotzdem daran interessant. In unserem Features-Kapitel finden Sie eine kurze Einführung in die Verarbeitung von XForms-Daten.



Alten Code mit neuen PHP-Versionen benutzen

Dadurch dass PHP eine immer beliebtere Skriptsprache ist, gibt es immer mehr öffentliche Quellen und Bibliotheken mit Code, den Sie wieder verwenden können. Die PHP-Entwickler haben versucht, den größten Teil der Sprache abwärtskompatibel zu halten. Das bedeutet, dass ein Skript, das für eine ältere PHP-Version geschrieben wurde, (im Idealfall) ohne Änderungen auch unter einer neueren PHP-Version läuft. In der Praxis sind aber meist einige Änderungen nötig.

Zwei der wichtigsten aktuellen Änderungen, die alten Code betreffen, sind:

  • Die Missbilligung der alten $HTTP_*_VARS-Arrays (die global gemacht werden mussten, wenn man sie innerhalb einer Funktion nutzen wollte). Die folgenden Superglobalen Arrays wurden in PHP » 4.1.0 eingeführt: $_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, $_REQUEST und $_SESSION. Die älteren $HTTP_*_VARS-Arrays, wie $HTTP_POST_VARS, existierten nach wie vor. Seit PHP 5.0.0 können Sie die Registrierung der langen von PHP vordefinierten Arrays mit der Konfigurationsoption register_long_arrays abschalten.
  • Externe Variablen werden standardmäßig nicht mehr im globalen Namensraum registriert. Mit anderen Worten, seit PHP » 4.2.0 ist off die Standard-Einstellung für die PHP-Direktive register_globals. Die empfohlene Methode, auf diese Werte zuzugreifen, ist, die oben genannten superglobalen Arrays zu verwenden. Ältere Skripte, Bücher und Tutorials gehen eventuell davon aus, dass diese Einstellung auf on steht. Wäre die Einstellung z.B. on, dann wäre die Variable $id aus dem URL http://www.example.com/foo.php?id=42 verfügbar. Unabhängig davon, ob on oder off, ist immer $_GET['id'] verfügbar.

Für weitere Details über diese Änderungen siehe die Seite über vordefinierte Variablen und die Links dort.



Und weiter?

Mit dem neuen Wissen sollte es Ihnen möglich sein, das meiste aus diesem Manual und die vielen Beispiel-Skripte in den Beispiel-Archiven zu verstehen. Sie können weitere auf den php.net-Seiten verfügbare Beispiele auf der folgenden Seite finden: » http://www.php.net/links.php.

Wenn Sie an verschiedenen Präsentationen, die Ihnen zeigen, was PHP alles tun kann, interessiert sind, dann besuchen Sie doch folgende Seite: » http://talks.php.net/.





Installation und Konfiguration


Generelle Überlegungen

Bevor Sie mit der Installation beginnen, sollten Sie wissen, für was Sie PHP verwenden wollen. Es gibt drei Hauptbereiche, in denen Sie PHP verwenden können, die im Abschnitt Was kann PHP? beschrieben werden:

  • Webseiten und Webapplikationen (serverseitiges Skripting)
  • Kommandozeilenskripte
  • Desktop(GUI-)Anwendungen

Für die erste und gebräuchlichste Variante brauchen Sie drei Dinge: PHP selbst, einen Webserver und einen Webbrowser. Sie haben wahrscheinlich bereits einen Webbrowser und, abhängig von Ihrem Betriebssystem, möglicherweise ebenso bereits einen Webserver (z.B. Apache auf Linux oder Mac OS X; IIS auf Windows). Sie können ebenfalls Webspace bei einem Unternehmen mieten. Auf diese Weise müssen Sie selbst nichts einrichten und müssen nur PHP-Skripte schreiben, diese auf den gemieteten Server hochladen und die Ergebnisse im Browser betrachten.

Für den Fall, dass Sie den Server und PHP selbst aufsetzen, haben Sie zwei Auswahlmöglichkeiten, um PHP mit dem Server zu verbinden. Für viele Server bietet PHP eine direkte Schnittstelle (auch SAPI genannt). Unter diesen Servern befinden sich Apache, Microsoft Internet Information Server, Netscape und iPlanet Server. Viele andere Server unterstützen ISAPI, die Microsoft Modulschnittstelle (z.B. OmniHTTPd). Falls PHP kein Modul für Ihren Webserver anbietet, können Sie es noch immer als CGI- oder FastCGI-Prozessor verwenden. Das bedeutet, Sie setzen Ihren Server so auf, dass er die ausführbare Datei für CGI von PHP verwendet, um alle Anfragen nach PHP Dateien auf dem Server zu verarbeiten.

Falls Sie außerdem darin interessiert sind, PHP für Kommandozeilenskripte zu verwenden (z.B. Skripte schreiben, die automatisch offline Bilder erzeugen oder Textdateien abhängig von einigen übergebenen Parametern zu verarbeiten), benötigen Sie die ausführbare Datei für die Kommandozeile. Für mehr Informationen lesen Sie bitte den Abschnitt über PHP auf der Kommandozeile. In diesem Fall benötigen Sie weder einen Server noch einen Browser.

Mit PHP können Sie ebenfalls grafische Desktopanwendungen mittels der PHP-GTK-Erweiterung schreiben. Dies erfordert einen völlig anderen Ansatz als das Verfassen von Webseiten, da man kein HTML ausgibt, sondern Fenster und darin enthaltene Objekte verwaltet. Für mehr Informationen zu PHP-GTK werfen Sie bitte einen Blick auf » diese Seite über die Erweiterung. PHP-GTK ist nicht in den offiziellen PHP-Paketen enthalten.

Von jetzt an behandelt dieser Abschnitt nur noch die Installation von PHP für Webserver auf Unix und Windows mittels Serverschnittstellen und CGI. Sie werden außerdem in den folgenden Abschnitten Informationen über die ausführbare Datei für die Kommandozeile finden.

Den PHP-Quellcode und die -Binärpakete für Windows finden Sie unter » http://www.php.net/downloads.php. Wir empfehlen, den Ihnen am nächsten gelegenen » gespiegelten Server für den Download zu verwenden.



Installation auf Unix-Systemen

Inhaltsverzeichnis

Dieser Abschnitt leitet Sie durch die generelle Konfiguration und Installation von PHP auf Unix-Systemen. Bitte lesen Sie zuerst alle Abschnitte, die speziell für Ihre Plattform oder Ihren Webserver zugeschnitten sind, bevor Sie mit dem Installationsprozess beginnen.

Wie dieses Handbuch im Abschnitt Generelle Installationsüberlegungen darlegt, behandeln wir hauptsächlich die web-zentrierten Einrichtungen von PHP, obwohl wir die Installation von PHP für die Kommandozeilennutzung ebenso beschreiben.

Es gibt veschiedene Wege, PHP auf Unix-Plattformen zu installieren: Entweder mit einem Kompilierungs- und Konfigurierungsprozess oder durch verschiedene Methoden von vorgefertigten Paketen. Diese Dokumentation richtet ihr Augenmerk hauptsächlich auf den Prozess des Selbstkompilierens und -konfigurierens von PHP. Viele unix-artige Systeme haben eine Art von Paketinstallationssystem. Dies kann beim Aufsetzen einer Standardkonfiguration helfen, aber wenn Sie eine davon abweichende Menge an Features benötigen (etwa sichere Server oder andere Datenbanktreiber), könnte es sein, dass Sie PHP und/oder Ihren Webserver selbst bauen müssen. Falls Ihnen das Bauen und Kompilieren von Software nicht geläufig ist, ist es lohnenswert zu prüfen, ob bereits jemand ein PHP-Paket mit den von Ihnen benötigten Features gebaut hat.

Folgende Fähigkeiten und Software benötigen Sie für die Kompilierung:

  • Grundlegende Unix-Fertigkeiten (die Fähigkeit, "make" und einen C- Kompiler zu bedienen)
  • Ein ANSI-C-Compiler
  • flex: Version 2.5.4
  • bison: Version 1.28 (bevorzugt), 1.35, or 1.75
  • Ein Webserver
  • Modulspezifische Komponenten (wie GD, PDF-Bibliotheken usw.)

Der anfängliche PHP Setup- und Konfigurationsprozess wird durch die Verwendung von Kommandozeilenoptionenn des configure-Skriptes gesteuert. Sie sollten eine Liste von allen verfügbaren Optionen zusammen mit einer kurzen Erläuterung durch den Aufruf von ./configure --help erhalten. Unser Handbuch dokumentiert die verschiedenen Optionen einzeln. Sie finden die grundlegenden Optionen im Anhang, während die verschiedenen extensionspezifischen Optionen auf den Referenzseiten der Erweiterungen beschrieben sind.

Sobald PHP konfiguriert ist, sind Sie bereit, die Module und/oder die ausführbaren Dateien zu bauen. Der Befehl make sollte sich darum kümmern. Falls dies fehlschlägt und Sie nicht herausfinden können wieso, werfen Sie einen Blick in den Abschnitt Probleme.


Apache 1.3.x auf Unix-Systemen

Dieser Abschnitt beinhaltet Hinweise und Tipps, die sich auf die Installation von PHP speziell für Apache auf Unix-Plattformen beziehen. Wir haben Anweisungen und Hinweise für Apache 2 auf einer eigenen Seite.

Die Anweisungen, die Sie zum unten in Zeile 10 abgebildeten configure-Aufruf hinzufügen können, können Sie aus der Liste von grundlegenden Configure-Optionen und aus den für Erweiterungen spezifiscen Optionen, die auf den jeweiligen Handbuchseiten beschrieben sind, auswählen. Um sicherzustellen, dass die Anweisungen nicht inkorrekt sind, wurden Versionsnummern hier ausgelassen. Sie müssen die Zeichenkette 'xxx' hier mit den zu Ihren Dateien passenden Werten ersetzen.

Beispiel #1 Installationsanweisungen (Apache Shared Module Version) für PHP

1.  gunzip apache_xxx.tar.gz
2.  tar -xvf apache_xxx.tar
3.  gunzip php-xxx.tar.gz
4.  tar -xvf php-xxx.tar
5.  cd apache_xxx
6.  ./configure --prefix=/www --enable-module=so
7.  make
8.  make install
9.  cd ../php-xxx

10. Konfigurieren Sie jetzt Ihr PHP. Dies ist die Stelle, an der Sie
    Ihr PHP mit verschiedenen Optionen, z.B. welche Erweiterungen aktiviert
    sein werden, anpassen können. Rufen Sie ./configure --help für eine Liste
    von verfügbaren Optionen auf. In unseren beispiel werden wir eine einfache
    Konfiguration mit Unterstützung für Apache 1 und MySQL vornehmen. Ihr
    Pfad zu apxs könnte von unserem Beispiel abweichen.

      ./configure --with-mysql --with-apxs=/www/bin/apxs

11. make
12. make install

    Falls Sie sich entscheiden, die Werte Ihrer Konfiguration nach der
    Installation zu ändern, müssen Sie nur die letzten drei Schritte
    wiederholen. Sie müssen nur Apache neu starten, damit das neue Modul
    aktiv wird. Eine erneute Kompilation von Apache ist nicht erforderlich.

    Beachten Sie, dass 'make install', falls nicht anders angewiesen,
    ebenfalls PEAR, verschiedene PHP-Tools wie phpize, das PHP CLI und mehr
    installieren wird.

13. Ihre php.ini Datei einrichten:

      cp php.ini-dist /usr/local/lib/php.ini

    Sie können Ihre .ini-Datei bearbeiten, um verschiedene PHP-Einstellungen
    vorzunehmen. Wenn Sie es bevorzugen, Ihre php.ini-Datei an anderer
    Stelle zu haben, verwenden Sie --with-config-file-path=/irgendein/pfad
    in Schritt 10.
    
    Wenn Sie stattdessen php.ini-recommended auswählen stellen Sie sicher,
    dass Sie die enthaltenen Änderungen lesen, da diese sich auf das Verhalten
    von PHP auswirken.

14. Ändern Sie Ihre httpd.conf-Datei, damit das PHP-Modul geladen wird. Der
    Pfad auf der rechten Seite des LoadModule Befehls muss zum Pfad des
    PHP-Moduls auf Ihrem System zeigen. Das 'make install' von oben könnte
    dies bereits für Sie hinzugefügt haben, aber prüfen Sie dies nach.

    Für PHP 4:
            
      LoadModule php4_module libexec/libphp4.so

    Für PHP 5:
                      
      LoadModule php5_module libexec/libphp5.so
      
15. Fügen Sie dies im AddModule-Abschnitt Ihrer httpd.conf, irgendwo unterhalb
    von ClearModuleList, hinzu:
    
    Für PHP 4:
    
      AddModule mod_php4.c
      
    Für PHP 5:
    
      AddModule mod_php5.c

16. Sagen Sie Ihrem Apache, bestimmte Dateiendungen als PHP zu parsen. Zum 
    Beispiel lassen wir die .php-Dateiendung als PHP behandeln. Sie können
    jede Erweiterung als PHP parsen lassen, indem Sie einfach weitere
    Endungen, jeweils durch ein Leerzeichen getrennt, hinzufügen. Wir fügen
    .phtml hinzu, um dies vorzuführen. 

      AddType application/x-httpd-php .php .phtml

    Es ist weiterhin üblich, die .phps-Dateiendung zu konfigurieren, damit
    diese farblich hervorgehobenen Quellcode anzeigt. Dies kann wie folgt
    eingerichtet werden:
    
      AddType application/x-httpd-php-source .phps

17. Verwenden Sie Ihre normale Prozedur, um den Apache zu starten. (Sie müssen
    den Server anhalten und neu starten, nicht nur ein erneutes laden des
    Servers mittels eines HUP- oder USR1-Signals veranlassen.)

Alternativ, um PHP als statisches Objekt zu installieren:

Beispiel #2 Installationsanweisungen (Statische Modulinstallation für Apache) für PHP

1.  gunzip -c apache_1.3.x.tar.gz | tar xf -
2.  cd apache_1.3.x
3.  ./configure
4.  cd ..

5.  gunzip -c php-5.x.y.tar.gz | tar xf -
6.  cd php-5.x.y
7.  ./configure --with-mysql --with-apache=../apache_1.3.x
8.  make
9.  make install

10. cd ../apache_1.3.x

11. ./configure --prefix=/www --activate-module=src/modules/php5/libphp5.a
    (Die obige Zeile ist korrekt! Ja, wir wissen, dass libphp5.a zu diesem
    Zeitpunkt nicht existiert. Das soll sie auch noch nicht. Sie wird
    angelegt werden.)

12. make
    (Sie sollten jetzt eine ausführbare Datei httpd haben, welche Sie in Ihr
    Apache-Binärverezichnis kopieren können. Wenn dies Ihre Erstinstallation
    ist, müssen Sie außerdem noch "make install" aufrufen)

13. cd ../php-5.x.y
14. cp php.ini-dist /usr/local/lib/php.ini

15. Sie können /usr/local/lib/php.ini bearbeiten, um PHP-Einstellungen zu
    ändern. Bearbeiten Sie Ihre httpd.conf oder srm.conf-Datei und fügen Sie
    folgendes hinzu:

    AddType application/x-httpd-php .php

Hinweis: Ersetzen Sie php-5 durch php-4 und php5 durch php4 in PHP4.

Abhängig von Ihrer Apacheinstallation und Unixvariante gibt es viele verschiedene Methoden, um den Server anzuhalten und erneut zu starten. Unten sind für verschiedene Apache/Unix-Installationen einige typische Zeilen zum Neustart des Servers. Sie sollten /path/to mit dem Pfad dieser Anwendungen auf Ihrem System ersetzen.

Beispiel #3 Beispielbefehle, um Apache neu zu starten

1. Verschiedene Linux- und SysV-Varianten:
/etc/rc.d/init.d/httpd restart

2. Verwendung der apachectl Skripte:
/path/to/apachectl stop
/path/to/apachectl start

3. httpdctl und httpsdctl (mit OpenSSL), ähnlich wie apachectl:
/path/to/httpsdctl stop
/path/to/httpsdctl start

4. Mit mod_ssl oder einem anderen SSL Server, könnten Sie manuell stoppen
   und starten wollen:
/path/to/apachectl stop
/path/to/apachectl startssl

Die Orte der apachectl- und http(s)dctl-Binärdateien sind häufig verschieden. Wenn Ihr System einen locate-, whereis- oder which-Befehl besitzt, können diese Ihnen beim Auffinden des Serverkontrollprogrammes helfen.

Verschiedene Beispiele zur Kompilierung von PHP für Apache wie folgt:

./configure --with-apxs --with-pgsql

Dies wird eine Bibliothek libphp5.so (oder libphp4.so in PHP4) erzeugen, die mittels einer LoadModule-Zeile in der httpd.conf des Apache geladen wird. PostgreSQL-Unterstützung ist in diese Bibliothek eingebaut.

./configure --with-apxs --with-pgsql=shared

Dies wird eine Bibliothek libphp4.so für Apache erzeugen, aber ebenso eine pgsql.so, die von PHP mit der Extension-Direktive in der php.ini-Datei oder durch explizites Laden in einem Skript mittels der Funktion dl() geladen wird.

./configure --with-apache=/path/to/apache_source --with-pgsql

Dies wird eine Bibliothek libmodphp5.a, eine mod_php5.c und einige zugehörige Dateien erzeugen und diese in das Verzeichnis src/modules/php5 des Apache Quellcodes kopieren. Kompilieren Sie danach Apache mit --activate-module=src/modules/php5/libphp5.a und das Apache Build System wird eine libphp5.a erzeugen und statisch in die Binärdatei httpd einbinden (ersetzen Sie php5 durch php4 für PHP 4). Unterstützung für PostgreSQL wird in diese httpd Binärdatei mit eingebaut, weshalb das Endergebnis eine einzige Datei namens httpd ist, welche den gesamten Apache und PHP beinhaltet.

./configure --with-apache=/path/to/apache_source --with-pgsql=shared

Genau wie oben, aber anstatt die Unterstützung für PostgreSQL direkt in httpd mit einzubinden wird eine gemeinsam verwendete Bibliothek namens pgsql.so erzeugt, die man mittels der php.ini Datei oder direkt über dl() in PHP einbinden kann.

Wenn Sie aus den verschiedenen Möglichkeiten auswählen, PHP zu kompilieren, sollten Sie die Vor- und Nachteile der jeweiligen Methoden bedenken. Das Erzeugen einer gemeinsam verwendeten Bibliothek resultiert darin, dass man Apache getrennt kompilieren kann und nicht alles erneut kompilieren muss, wenn man etwas zu PHP hinzufügt oder ändert. Das direkte Einbauen in Apache (statisch) bedeutet, dass PHP schneller lädt und schneller läuft. Für weitere Informationen konsultieren Sie die Apache » Webseite zur DSO-Unterstützung.

Hinweis: Apaches mitgelieferte httpd.conf enthält derzeit einen Abschnitt, der wie folgt aussieht:

User nobody
Group "#-1"

Wenn man dies nicht auf "Group nogroup" oder etwas ähnliches ("Group daemon" ist auch üblich) ändert, wird PHP nicht imstande sein, Dateien zu öffnen.

Hinweis: Stellen Sie sicher, dass Sie die installierte Version von apxs angeben, wenn Sie --with-apxs=/path/to/apxs verwenden. Sie dürfen NICHT die apxs-Version angeben, die dem Apache Quellcode beiliegt, sondern jene, die tatsächlich auf Ihrem System installiert ist.



Apache 2.0 auf Unixsystemen

Dieser Abschnitt enthält Hinweise und Tipps, die sich auf die Installation von PHP speziell für Apache 2.0 auf Unixsystemen beziehen.

Warnung

Wir empfehlen, in einer Produktionsumgebung kein Threaded MPM mit Apache2 zu verwenden. Verwenden Sie stattdessen das Prefork MPM oder Apache1. Für weitere Informationen und die Gründe lesen Sie bitte den entsprechenden FAQ-Eintrag über die Verwendung von Apache2 mit Threaded MPM.

Es wird empfohlen, einen Blick auf die » Apache Dokumentation zu werfen, um ein grundlegendes Verständnis des Apache 2.0 Servers zu erhalten.

Hinweis: PHP and Apache 2.0.x compatibility notes
The following versions of PHP are known to work with the most recent version of Apache 2.0.x:

These versions of PHP are compatible to Apache 2.0.40 and later.
Apache 2.0 SAPI-support started with PHP 4.2.0. PHP 4.2.3 works with Apache 2.0.39, don't use any other version of Apache with PHP 4.2.3. However, the recommended setup is to use PHP 4.3.0 or later with the most recent version of Apache2.
All mentioned versions of PHP will work still with Apache 1.3.x.

Laden Sie die aktuellste Version von » Apache 2.0 und eine passende Version von den oben angegebenen Quellen herunter. Dieser Schnelleinstieg behandelt nur die Grundlagen, um mit Apache 2.0 und PHP einzusteigen. Für mehr Informationen lesen Sie bitte die » Apache Dokumentation. Versionsnummern wurden hier ausgelassen, um sicherzustellen, dass die Anweisungen nicht inkorrekt sind. Sie müssen die Zeichenkette 'NN' mit den zu Ihren Dateien passenden Werten ersetzen.

Beispiel #1 Installationsanweisungen (Apache 2 Shared Module Version)

1.  gzip -d httpd-2_0_NN.tar.gz
2.  tar xvf httpd-2_0_NN.tar
3.  gunzip php-NN.tar.gz
4.  tar -xvf php-NN.tar
5.  cd httpd-2_0_NN
6.  ./configure --enable-so
7.  make
8.  make install

    Nun steht Ihnen Apache 2.0.NN unter /usr/local/apache2 zur Verfügung,
    konfiguriert mit Unterstützung für nachladbare Module und dem
    Standard MPM Prefork. Um diese Installation zu testen, verwenden Sie die
    übliche Prozedur, den Apacheserver zu starten, also z.B.:
    /usr/local/apache2/bin/apachectl start
    Stoppen Sie nun den Server, um mit der Konfiguration von PHP fortzusetzen:
    /usr/local/apache2/bin/apachectl stop.

9.  cd ../php-NN

10. Konfigurieren Sie nun Ihr PHP. Dies ist die Stelle, an der Sie Ihr
    PHP mit verschiedenen Optionen, wie etwa installierten Erweiterungen,
    anpassen können. Rufen Sie ./configure --help auf, um eine Liste
    der verfügbaren Optionen zu erhalten. In unserem Beispiel werden
    wir eine einfache Konfiguration mit Unterstützung für Apache 2
    und MySQL erzeugen. Ihr Pfad zu apxs könnte sich unterscheiden,
    tatsächlich könnte das Programm auf Ihrem System auch apxs2 heißen.

      ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql

11. make
12. make install

    Wenn Sie sich entscheiden, Ihre Konfigurationsoptionen nach der
    Installation zu ändern, müssen Sie nur die letzten drei Schritte
    wiederholen. Sie müssen nur Apache neustarten, damit das neue
    Modul verwendet wird. Eine erneute Kompilierung von Apache ist
    nicht notwendig.

    Beachten Sie, dass, wenn nicht anders erwähnt, 'make install' ebenso
    PEAR und verschiedene PHP Werkzeuge wie phpize, PHP CLI und anderes
    installieren wird.

13. Ihre php.ini einrichten

    cp php.ini-dist /usr/local/lib/php.ini

    Sie können Ihre .ini-Datei ändern, um verschiedene PHP-Optionen zu setzen.
    Wenn Sie die php.ini-Datei an einer anderen Stelle bevorzugen, verwenden
    Sie --with-config-file-path=/some/path in Schritt 10.

    Wenn Sie sich stattdessen für php.ini-recommended entscheiden, stellen Sie
    sicher, dass Sie die darin enthaltene Liste von Änderungen lesen, da diese
    das Verhalten von PHP beeinflussen.

14. Bearbeiten Sie Ihre httpd.conf, um das PHP Modul zu laden. Der Pfad
    auf der rechten Seite der LoadModule-Anweisung muss auf den Ort des
    PHP-Moduls auf Ihrem System zeigen. Das obige make install könnte dies
    bereits für Sie hinzugefügt haben, aber prüfen Sie dies.

    Für PHP 4:

      LoadModule php4_module modules/libphp4.so

    Für PHP 5:

      LoadModule php5_module modules/libphp5.so

15. Weisen Sie Apache an, bestimmte Dateiendungen als PHP Skripte zu behandeln.
    Zum Beispiel werden wir den Apache Dateien mit der Endung .php als PHP
    ausführen lassen. Anstatt nur die Apachedirektive AddType zu verwenden,
    wollen wir zusätzlich verhindern, dass potentiell gefährliche hochgeladene
    und erzeugte Dateien wie exploit.php.jpg als PHP-Dateien ausgeführt werden.
    Wenn Sie dieses Beispiel verwenden, können Sie jede Dateiendung als PHP
    interpretieren lassen, wenn Sie sie einfach hinzufügen. Wir demonstrieren
    dies, indem wir .phtml einfügen.

      <FilesMatch \.php$>
          SetHandler application/x-httpd-php
      </FilesMatch>

    Oder wenn wir erlauben wollen, dass .php, .php2, .php3, .php4, .php5, .php6
    und .phtml und sonst nichts als PHP interpretiert werden, könnten wird
    ein Statement wie dieses verwenden:

      <FilesMatch "\.ph(p[2-6]?|tml)$">
          SetHandler application/x-httpd-php
      </FilesMatch>

    Und um .phps-Dateien als PHP-Quelldateien interpretieren zu lassen, fügen
    wir die folgende Anweisung hinzu:

      <FilesMatch "\.phps$">
          SetHandler application/x-httpd-php-source
      </FilesMatch>

16. Verwenden Sie die übliche Prozedur, um den Apache Server zu starten, z.B.:

      /usr/local/apache2/bin/apachectl start

          - ODER -

      service httpd restart

Wenn Sie den obigen Anweisungen folgen, werden Sie einen laufenden Apache2 mit Unterstützung für PHP als SAPI-Modul erhalten. Natürlich existieren für Apache und PHP viele weitere Konfigurationseinstellungen. Verwenden Sie ./configure --help im jeweiligen Quellcodeverzeichnis, um weitere Informationen zu erhalten. Falls Sie eine Multithreaded-Version von Apache2 bauen wollen, müssen Sie das Standard MPM-Modul prefork entweder durch worker oder perchild ersetzen. Fügen Sie dazu in obigem Schritt 6 an Ihre Konfigurationszeile entweder die Option --with-mpm=worker oder --with-mpm=perchild an. Denken Sie an die daraus reultierenden Konsequenzen und machen Sie sich klar, was Sie damit tun. Für mehr Informationen werfen Sie einen Blick auf die Apache Dokumantation zum Thema » MPM-Module.

Hinweis: Falls Sie Content Negotiation verwenden wollen, lesen Sie die Apache MultiViews FAQ.

Hinweis: Um eine Multithreaded Version von Apache zu erzeugen, muss Ihr System Threads unterstützen. Dies impliziert, dass Sie PHP mit der experimentellen Zend Thread Safety (ZTS) bauen. Deshalb könnten nicht alle Erweiterungen verfügbar sein. Die empfohlene Einstellung ist es, Apache mit dem prefork -MPM-Modul zu bauen.



Lighttpd 1.4 on Unix systems

This section contains notes and hints specific to Lighttpd 1.4 installs of PHP on Unix systems.

Please use the » Lighttpd trac to learn how to install Lighttpd properly before continuing.

Fastcgi is the preferred SAPI to connect PHP and Lighttpd. Fastcgi is automagically enabled in php-cgi in PHP 5.3, but for older versions configure PHP with --enable-fastcgi. To confirm that PHP has fastcgi enabled, php -v should contain PHP 5.2.5 (cgi-fcgi) Before PHP 5.2.3, fastcgi was enabled on the php binary (there was no php-cgi).

Letting Lighttpd spawn php processes

To configure Lighttpd to connect to php and spawn fastcgi processes, edit lighttpd.conf. Sockets are preferred to connect to fastcgi processes on the local system.

Beispiel #1 Partial lighttpd.conf

server.modules += ( "mod_fastcgi" )

fastcgi.server = ( ".php" =>
  ((
    "socket" => "/tmp/php.socket",
    "bin-path" => "/usr/local/bin/php-cgi",
    "bin-environment" => (
      "PHP_FCGI_CHILDREN" => "16",
      "PHP_FCGI_MAX_REQUESTS" => "10000"
    ),
    "min-procs" => 1,
    "max-procs" => 1,
    "idle-timeout" => 20
  ))
)

The bin-path directive allows lighttpd to spawn fastcgi processes dynamically. PHP will spawn children according to the PHP_FCGI_CHILDREN environment variable. The "bin-environment" directive sets the environment for the spawned processes. PHP will kill a child process after the number of requests specified by PHP_FCGI_MAX_REQUESTS is reached. The directives "min-procs" and "max-procs" should generally be avoided with PHP. PHP manages its own children and opcode caches like APC will only share among children managed by PHP. If "min-procs" is set to something greater than 1, the total number of php responders will be multiplied PHP_FCGI_CHILDREN (2 min-procs * 16 children gives 32 responders).

Spawning with spawn-fcgi

Lighttpd provides a program called spawn-fcgi to ease the process of spawning fastcgi processes easier.

Spawning php-cgi

It is possible to spawn processes without spawn-fcgi, though a bit of heavy-lifting is required. Setting the PHP_FCGI_CHILDREN environment var controls how many children PHP will spawn to handle incoming requests. Setting PHP_FCGI_MAX_REQUESTS will determine how long (in requests) each child will live. Here's a simple bash script to help spawn php responders.

Beispiel #2 Spawning FastCGI Responders

#!/bin/sh

# Location of the php-cgi binary
PHP=/usr/local/bin/php-cgi

# PID File location
PHP_PID=/tmp/php.pid

# Binding to an address
#FCGI_BIND_ADDRESS=10.0.1.1:10000
# Binding to a domain socket
FCGI_BIND_ADDRESS=/tmp/php.sock

PHP_FCGI_CHILDREN=16
PHP_FCGI_MAX_REQUESTS=10000

env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \
       PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \
       $PHP -b $FCGI_BIND_ADDRESS &

echo $! > "$PHP_PID"

Connecting to remote FCGI instances

Fastcgi instances can be spawned on multiple remote machines in order to scale applications.

Beispiel #3 Connecting to remote php-fastcgi instances

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)


Caudium

PHP can be built as a Pike module for the » Caudium webserver. Follow the simple instructions below to install PHP for Caudium.

Beispiel #1 Caudium Installation Instructions

1.  Make sure you have Caudium installed prior to attempting to
    install PHP 4. For PHP 4 to work correctly, you will need Pike
    7.0.268 or newer. For the sake of this example we assume that
    Caudium is installed in /opt/caudium/server/.
2.  Change directory to php-x.y.z (where x.y.z is the version number).
3.  ./configure --with-caudium=/opt/caudium/server
4.  make
5.  make install
6.  Restart Caudium if it's currently running.
7.  Log into the graphical configuration interface and go to the
    virtual server where you want to add PHP 4 support.
8.  Click Add Module and locate and then add the PHP 4 Script Support module.
9.  If the documentation says that the 'PHP 4 interpreter isn't
    available', make sure that you restarted the server. If you did
    check /opt/caudium/logs/debug/default.1 for any errors related to
    PHP4.so. Also make sure that 
    caudium/server/lib/[pike-version]/PHP4.so
    is present.
10. Configure the PHP Script Support module if needed.

You can of course compile your Caudium module with support for the various extensions available in PHP 4. See the reference pages for extension specific configure options.

Hinweis: When compiling PHP 4 with MySQL support you must make sure that the normal MySQL client code is used. Otherwise there might be conflicts if your Pike already has MySQL support. You do this by specifying a MySQL install directory the --with-mysql option.



fhttpd related notes

To build PHP as an fhttpd module, answer "yes" to "Build as an fhttpd module?" (the --with-fhttpd=DIR option to configure) and specify the fhttpd source base directory. The default directory is /usr/local/src/fhttpd. If you are running fhttpd, building PHP as a module will give better performance, more control and remote execution capability.

Hinweis: Support for fhttpd is no longer available as of PHP 4.3.0.



Sun, iPlanet and Netscape servers on Sun Solaris

This section contains notes and hints specific to Sun Java System Web Server, Sun ONE Web Server, iPlanet and Netscape server installs of PHP on Sun Solaris.

From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to generate custom directory listings and error pages. Additional functions for Apache compatibility are also available. For support in current web servers read the note about subrequests.

You can find more information about setting up PHP for the Netscape Enterprise Server (NES) here: » http://benoit.noss.free.fr/php/install-php4.html

To build PHP with Sun JSWS/Sun ONE WS/iPlanet/Netscape web servers, enter the proper install directory for the --with-nsapi=[DIR] option. The default directory is usually /opt/netscape/suitespot/. Please also read /php-xxx-version/sapi/nsapi/nsapi-readme.txt.

  1. Install the following packages from » http://www.sunfreeware.com/ or another download site:

    • autoconf-2.13
    • automake-1.4
    • bison-1_25-sol26-sparc-local
    • flex-2_5_4a-sol26-sparc-local
    • gcc-2_95_2-sol26-sparc-local
    • gzip-1.2.4-sol26-sparc-local
    • m4-1_4-sol26-sparc-local
    • make-3_76_1-sol26-sparc-local
    • mysql-3.23.24-beta (if you want mysql support)
    • perl-5_005_03-sol26-sparc-local
    • tar-1.13 (GNU tar)

  2. Make sure your path includes the proper directories PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin and make it available to your system export PATH .
  3. gunzip php-x.x.x.tar.gz (if you have a .gz dist, otherwise go to 4).
  4. tar xvf php-x.x.x.tar
  5. Change to your extracted PHP directory: cd ../php-x.x.x
  6. For the following step, make sure /opt/netscape/suitespot/ is where your netscape server is installed. Otherwise, change to the correct path and run:

    ./configure --with-mysql=/usr/local/mysql \
    --with-nsapi=/opt/netscape/suitespot/ \
    --enable-libgcc

  7. Run make followed by make install.

After performing the base install and reading the appropriate readme file, you may need to perform some additional configuration steps.

Configuration Instructions for Sun/iPlanet/Netscape

Firstly you may need to add some paths to the LD_LIBRARY_PATH environment for the server to find all the shared libs. This can best done in the start script for your web server. The start script is often located in: /path/to/server/https-servername/start. You may also need to edit the configuration files that are located in: /path/to/server/https-servername/config/.

  1. Add the following line to mime.types (you can do that by the administration server):

    type=magnus-internal/x-httpd-php exts=php
    

  2. Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6) and add the following, shlib will vary depending on your system, it will be something like /opt/netscape/suitespot/bin/libphp4.so. You should place the following lines after mime types init.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]
    

    (PHP >= 4.3.3) The php_ini parameter is optional but with it you can place your php.ini in your web server config directory.

  3. Configure the default object in obj.conf (for virtual server classes [version 6.0+] in their vserver.obj.conf):

    <Object name="default">
    .
    .
    .
    .#NOTE this next line should happen after all 'ObjectType' and before all 'AddLog' lines
    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    .
    .
    </Object>
    

    (PHP >= 4.3.3) As additional parameters you can add some special php.ini-values, for example you can set a docroot="/path/to/docroot" specific to the context php4_execute is called. For boolean ini-keys please use 0/1 as value, not "On","Off",... (this will not work correctly), e.g. zlib.output_compression=1 instead of zlib.output_compression="On"

  4. This is only needed if you want to configure a directory that only consists of PHP scripts (same like a cgi-bin directory):

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    

    After that you can configure a directory in the Administration server and assign it the style x-httpd-php. All files in it will get executed as PHP. This is nice to hide PHP usage by renaming files to .html.

  5. Setup of authentication: PHP authentication cannot be used with any other authentication. ALL AUTHENTICATION IS PASSED TO YOUR PHP SCRIPT. To configure PHP Authentication for the entire server, add the following line to your default object:

    <Object name="default">
    AuthTrans fn=php4_auth_trans
    .
    .
    .
    </Object>
    

  6. To use PHP Authentication on a single directory, add the following:

    <Object ppath="d:\path\to\authenticated\dir\*">
    AuthTrans fn=php4_auth_trans
    </Object>
    

Hinweis: The stacksize that PHP uses depends on the configuration of the web server. If you get crashes with very large PHP scripts, it is recommended to raise it with the Admin Server (in the section "MAGNUS EDITOR").

CGI environment and recommended modifications in php.ini

Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE WS/iPlanet/Netscape is a multithreaded web server. Because of that all requests are running in the same process space (the space of the web server itself) and this space has only one environment. If you want to get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the correct way to try this in the old PHP way with getenv() or a similar way (register globals to environment, $_ENV). You would only get the environment of the running web server without any valid CGI variables!

Hinweis: Why are there (invalid) CGI variables in the environment?
Answer: This is because you started the web server process from the admin server which runs the startup script of the web server, you wanted to start, as a CGI script (a CGI script inside of the admin server!). This is why the environment of the started web server has some CGI environment variables in it. You can test this by starting the web server not from the administration server. Use the command line as root user and start it manually - you will see there are no CGI-like environment variables.

Simply change your scripts to get CGI variables in the correct way for PHP 4.x by using the superglobal $_SERVER. If you have older scripts which use $HTTP_HOST, etc., you should turn on register_globals in php.ini and change the variable order too (important: remove "E" from it, because you do not need the environment here):

variables_order = "GPCS"
register_globals = On

Special use for error pages or self-made directory listings (PHP >= 4.3.3)

You can use PHP to generate the error pages for "404 Not Found" or similar. Add the following line to the object in obj.conf for every error page you want to overwrite:

Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]

where XXX is the HTTP error code. Please delete any other Error directives which could interfere with yours. If you want to place a page for all errors that could exist, leave the code parameter out. Your script can get the HTTP status code with $_SERVER['ERROR_TYPE'].

Another possibility is to generate self-made directory listings. Just create a PHP script which displays a directory listing and replace the corresponding default Service line for type="magnus-internal/directory" in obj.conf with the following:

Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]

For both error and directory listing pages the original URI and translated URI are in the variables $_SERVER['PATH_INFO'] and $_SERVER['PATH_TRANSLATED'].

Note about nsapi_virtual() and subrequests (PHP >= 4.3.3)

The NSAPI module now supports the nsapi_virtual() function (alias: virtual()) to make subrequests on the web server and insert the result in the web page. This function uses some undocumented features from the NSAPI library. On Unix the module automatically looks for the needed functions and uses them if available. If not, nsapi_virtual() is disabled.

Hinweis: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!



CGI and command line setups

The default is to build PHP as a CGI program. This creates a command line interpreter, which can be used for CGI processing, or for non-web-related PHP scripting. If you are running a web server PHP has module support for, you should generally go for that solution for performance reasons. However, the CGI version enables users to run different PHP-enabled pages under different user-ids.

Warnung

Wenn Sie das CGI-Setup verwenden, ist Ihr Server für einige mögliche Angriffe anfällig. Wie Sie sich vor diesen Angriffen schützen können, entnehmen Sie bitte dem Kapitel über CGI-Sicherheit.

As of PHP 4.3.0, some important additions have happened to PHP. A new SAPI named CLI also exists and it has the same name as the CGI binary. What is installed at {PREFIX}/bin/php depends on your configure line and this is described in detail in the manual section named Using PHP from the command line. For further details please read that section of the manual.

Testing

If you have built PHP as a CGI program, you may test your build by typing make test. It is always a good idea to test your build. This way you may catch a problem with PHP on your platform early instead of having to struggle with it later.

Using Variables

Some server supplied environment variables are not defined in the current » CGI/1.1 specification. Only the following variables are defined there: AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING, REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD, SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL, and SERVER_SOFTWARE. Everything else should be treated as 'vendor extensions'.



HP-UX specific installation notes

This section contains notes and hints specific to installing PHP on HP-UX systems.

There are two main options for installing PHP on HP-UX systems. Either compile it, or install a pre-compiled binary.

Official pre-compiled packages are located here: » http://software.hp.com/

Until this manual section is rewritten, the documentation about compiling PHP (and related extensions) on HP-UX systems has been removed. For now, consider reading the following external resource: » Building Apache and PHP on HP-UX 11.11



OpenBSD installation notes

This section contains notes and hints specific to installing PHP on » OpenBSD 3.6.

Using Binary Packages

Using binary packages to install PHP on OpenBSD is the recommended and simplest method. The core package has been separated from the various modules, and each can be installed and removed independently from the others. The files you need can be found on your OpenBSD CD or on the FTP site.

The main package you need to install is php4-core-4.3.8.tgz, which contains the basic engine (plus gettext and iconv). Next, take a look at the module packages, such as php4-mysql-4.3.8.tgz or php4-imap-4.3.8.tgz. You need to use the phpxs command to activate and deactivate these modules in your php.ini.

Beispiel #1 OpenBSD Package Install Example

# pkg_add php4-core-4.3.8.tgz
# /usr/local/sbin/phpxs -s
# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
  (add in mysql)
# pkg_add php4-mysql-4.3.8.tgz
# /usr/local/sbin/phpxs -a mysql
  (add in imap)
# pkg_add php4-imap-4.3.8.tgz
# /usr/local/sbin/phpxs -a imap
  (remove mysql as a test)
# pkg_delete php4-mysql-4.3.8
# /usr/local/sbin/phpxs -r mysql
  (install the PEAR libraries)
# pkg_add php4-pear-4.3.8.tgz

Read the » packages(7) manual page for more information about binary packages on OpenBSD.

Using Ports

You can also compile up PHP from source using the » ports tree. However, this is only recommended for users familiar with OpenBSD. The PHP 4 port is split into two sub-directories: core and extensions. The extensions directory generates sub-packages for all of the supported PHP modules. If you find you do not want to create some of these modules, use the no_* FLAVOR. For example, to skip building the imap module, set the FLAVOR to no_imap.

Common Problems

  • The default install of Apache runs inside a » chroot(2) jail, which will restrict PHP scripts to accessing files under /var/www. You will therefore need to create a /var/www/tmp directory for PHP session files to be stored, or use an alternative session backend. In addition, database sockets need to be placed inside the jail or listen on the localhost interface. If you use network functions, some files from /etc such as /etc/resolv.conf and /etc/services will need to be moved into /var/www/etc. The OpenBSD PEAR package automatically installs into the correct chroot directories, so no special modification is needed there. More information on the OpenBSD Apache is available in the » OpenBSD FAQ.
  • The OpenBSD 3.6 package for the » gd extension requires XFree86 to be installed. If you do not wish to use some of the font features that require X11, install the php4-gd-4.3.8-no_x11.tgz package instead.

Older Releases

Older releases of OpenBSD used the FLAVORS system to compile up a statically linked PHP. Since it is hard to generate binary packages using this method, it is now deprecated. You can still use the old stable ports trees if you wish, but they are unsupported by the OpenBSD team. If you have any comments about this, the current maintainer for the port is Anil Madhavapeddy (avsm at openbsd dot org).



Solaris specific installation tips

This section contains notes and hints specific to installing PHP on Solaris systems.

Required software

Solaris installs often lack C compilers and their related tools. Read this FAQ for information on why using GNU versions for some of these tools is necessary. The required software is as follows:

  • gcc (recommended, other C compilers may work)
  • make
  • flex
  • bison
  • m4
  • autoconf
  • automake
  • perl
  • gzip
  • tar
  • GNU sed

In addition, you will need to install (and possibly compile) any additional software specific to your configuration, such as Oracle or MySQL.

Using Packages

You can simplify the Solaris install process by using pkgadd to install most of your needed components.



Debian GNU/Linux Installationshinweise

Dieser Abschnitt beinhaltet Hinweise und Tipps die sich auf die Installation von PHP speziell auf » Debian GNU/Linux beziehen.

APT verwenden

Während Sie einfach den PHP Quellcode herunterladen und selbst kompilieren können ist die einfachste und sauberste Methode der Installation die Verwendung von Debians Paketmanagementsystem. Falls Sie nicht mit dem Bau von Software unter Linux vertraut sind, ist dies die beste Möglichkeit.

Die erste Entscheidung, die Sie treffen müssen, ist, ob Sie Apache 1.3.x oder Apache 2.x installieren wollen. Die entsprechenden PHJP Pakete sind dementsprechend libapache-mod-php* und libapache2-mod-php* benannt. Die unten angegebenen Schritte werden Apache 1.3.x verwenden. Bitte beachten Sie, dass zum Zeitpunkt des Schreibens kein offizielles PHP 5 Paket für Debian existiert. Daher werden die unten angegebenen Schritte PHP 4 installieren.

PHP ist in Debian ebenfalls als CGI und CLI varianten verfügbar, entsprechend php4-cgi und php4-cli benannt. Wenn Sie diese benötigen, müssen Sie nur die folgenden Schritte mit geänderten Paketnamen wiederholen. Ein weiteres spezielles Paket, das Sie möglicherweise installieren wollen, ist php4-pear. Dieses enthält eine minimale PEAR Installation und das Kommandozeilenprogramm pear.

Wenn Sie aktuellere Pakete als die Debian stable Pakete benötigen oder falls einige PHP Module im offiziellen Repository fehlen, sollten Sie vielleicht einen Blick auf » http://www.apt-get.org/ werfen. Eines der gefundenen Ergebnisse sollte » Dotdeb sein. Dieses inoffizielle Repository wird von » Guillaume Plessis verwaltet und enthält die aktuellsten Versionen von PHP 4 und PHP 5. Um es zu verwenden, müssen Sie nur die folgenden zwei Zeilen zu Ihrer /etc/apt/sources.list hinzufügen und apt-get update ausführen:

Beispiel #1 Die beiden Dotdeb Zeilen

deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

Das Letzte, was Sie bedenken sollten ist, ob Ihre Paketliste aktuell ist. Wenn Sie diese nicht in der letzten Zeit aktualisiert haben, müssen Sie apt-get update vor allem anderen ausführen. Auf diese Weise werden Sie die aktuellsten stabilen Versionen der Apache und PHP Pakete verwenden.

Jetzt, da alles eingerichtet ist, können Sie das folgende Beispiel verwenden, um Apache und PHP zu installieren:

Beispiel #2 Debian Installationsbeispiel mit Apach 1.3.x

# apt-get install libapache-mod-php4

APT wird automatisch das PHP 4 Modul für Apache 1.3 und alle Abhängigkeiten dessen installieren und danach aktivieren. Wenn Sie nicht gefragt werden, Apache während des Installationsvorgangs neu zu starten, müssen Sie dies von Hand erledigen:

Beispiel #3 Apache anhalten und starten sobald PHP 4 installiert ist

# /etc/init.d/apache stop
# /etc/init.d/apache start

Bessere Kontrolle über die Konfiguration

Im letzten Abschnitt wurde PHP nur mit den Basismodulen installiert. Dies könnte nicht das sein, was Sie benötigen und Sie werden bald bemerken, dass Sie mehr Module wie MySQL, cURL, GD, usw benötigen.

Wenn Sie PHP selbst aus dem Quellcode kompilieren, müssen Sie die Module mit dem configure-Befehl aktivieren. Mit APT müssen Sie nur zusätzliche Pakete installieren. Diese sind alle 'php4-*' benannt (oder 'php5-*', wenn Sie PHP 5 aus einem Repository eines Drittanbieters installiert haben).

Beispiel #4 Eine Liste der zusätzlichen PHP Pakete beziehen

# dpkg -l 'php4-*'

Wie Sie aus der letzten Ausgabe entnehmen können gibt es eine ganze Reihe von PHP Modulen, die Sie installieren können (ausgenommen die php4-cgi, php4-cli oder php4-pear Spezialpakete). Sehen Sie sich diese genau an und entscheiden Sie, was Sie benötigen. Wenn Sie ein Modul auswählen und die notwendigen Bibliotheken nicht installiert sind, so wird APT automatisch alle Abhängigkeiten installieren.

Wenn Sie wählen, MySQL, cURL und GD-Unterstützung zu PHP hinzuzufügen sieht der Befehl etwa so aus:

Beispiel #5 PHP mit MySQL, cURL und GD installieren

# apt-get install php4-mysql php4-curl php4-gd

APT wird automatisch die passenden Zeilen zu Ihren verschiedenen php.ini hinzufügen (/etc/php4/apache/php.ini, /etc/php4/cgi/php.ini, usw).

Beispiel #6 Diese Zeilen aktivieren MySQL, cURL und GD in PHP

extension=mysql.so
extension=curl.so
extension=gd.so

Sie müssen nur wie vorher Apache beenden und neu starten, um die Module zu aktivieren.

Üblcihe Probleme

  • Wenn Sie den PHP Quellcode statt die Ausgabe des Skriptes sehen hat APT wahrscheinlich /etc/apache/conf.d/php4 nicht in Ihrer Apache 1.3 Konfiguration eingebunden. Stellen Sie bitte sicher, dass die folgende Zeile in Ihrer /etc/apache/httpd.conf Datei vorhanden ist und starten Sie Apache neu:

    Beispiel #7 Diese Zeile aktiviert PHP 4 in Apache

    # Include /etc/apache/conf.d/
  • Wenn Sie zusätzliche Module installiert haben und deren Funktionen nicht in Ihren Skripten zur Verfügung stehen, stellen Sie bitte sicher, dass die passende Zeile in Ihrer php.ini wie vorher gesehen vorhanden ist. APT könnte während der Installation zusätzlicher Module aufgrund einer verwirrenden debconf Konfiguration daran scheitern.



Installation unter Mac OS X

Inhaltsverzeichnis

Diese Kapitel beschreibt die Installtion von PHP im Hinblick auf Mac OS X. Es gibt zwei unterschiedliche Versionen für Mac OS X, Client und Server. Die Anleitung geht auf beide Versionen ein. PHP ist nicht verfügbar für MacOS 9 oder ältere Versionen.


Verwendung von Paketen

Es gibt verschiedene vorkompilierte und gepackte Versionen von PHP für Mac OS X. Sie können zum Aufsetzen von Standardkonfigurationen verwendet werden. Sobald Sie spezielle Funktionen benötigen (z.B. unterschiedliche Datenbanktreiber), werden Sie sich Ihr eigenes PHP - eventuell auch einen eigenen Webserver - kompilieren müssen. Wenn Sie nicht vertraut mit dem Kompilieren eigener Software sind, macht es Sinn zu prüfen, ob nicht bereits jemand ein gepacktes und vorkompiliertes System bereitstellt, dass Ihren Anforderungen entspricht.

Die folgenden Quellen bieten einfach zu installierende Pakete für PHP für Mac OS X an:



Das enthaltene PHP verwenden

Seit der Version 10.0.0 ist PHP standardmäßig in MacOS X enthalten. Um PHP mit dem Standard-Webserver zu verwenden, müssen nur ein paar Zeilen in der Apache Konfigurationsdatei httpd.conf auskommentiert werden. CGI und/oder CLI sind standardmäßig aktiviert (zugänglich über das Terminal-Programm).

Die folgende Anleitung, um PHP zu aktivieren, ermöglicht ein einfaches und schnelles Aufsetzen einer lokalen Entwicklungsumgebung. Es wird dringend empfohlen PHP immer auf dem neusten Stand zu halten. Wie für die meisten Anwendungen werden auch für PHP regelmäßig neue Version erstellt, um Fehler zu beseitigen und um den Funktionsumfang zu erweitern. Für weitere Informationen sollten Sie die entsprechende MacOS X Installations-Dokumentation lesen. Die folgende Anleitung richtet sich an Anfänger, um eine Standardkonfiguration aufzusetzen. Alle Benutzer sollten angespornt sein neuere Paket-Versionen zu installieren oder selbst zu kompilieren.

Die normale Installation beinhaltet die Aktivierung des mitgelieferten mod_php's für den Apache-Webserver (Standard-Webserver, der über die Systemeinstellungen von MacOS X zugänglich ist) und umfaßt folgende Schritte:

  1. Öffnen Sie die Apache Konfigurationsdatei. Normalerweise finden Sie diese unter: /etc/httpd/httpd.conf Über den Finder oder Spotlight wird die Datei nur schwer zu finden sein, da sie privat ist und den Rechten des root-Benutzers unterliegt.

    Hinweis: Ein Weg, um die Datei zu öffnen, ist einen Unix-basierten Texteditor im Terminal, z.B. nano, zu verwenden. Da die Datei dem Benutzer root gehört, sollten Sie den sudo-Befehl zum Öffnen (mit Root-Rechten) verwenden. Z.B. können Sie folgendes im Terminal-Programm eingeben (danach werden Sie nach dem Passwort gefragt): sudo nano /etc/httpd/httpd.conf Nennenswerte Befehle für nano: ^w (suchen), ^o (speichern), und ^x (schließen) wobei ^ für die Strg-Taste steht.

  2. Mit einem Texteditor müssen Sie nur die Zeilen, die ähnlich wie die folgenden aussehen, einkommentieren (durch entfernen von #). Die beiden Zeilen sind nicht selten von einander getrennt, daher finden Sie beide in der Datei:

    # LoadModule php4_module libexec/httpd/libphp4.so
    
    # AddModule mod_php4.c
    
    Beachten Sie die Dateipfade. Wenn Sie zukünftig PHP selbst kompilieren, sollten die beiden Dateien ersetzt oder wieder auskommentiert werden.

  3. Stellen Sie sicher, dass die gewünschten Dateiendungen durch PHP geparst werden (z.B.: .php .html und .inc)

    Durch die bereits in der Datei httpd.conf (ab MacOS Panther), enthaltenen Angaben, werden Dateien mit der Endung .php nach dem Aktivieren von PHP automatisch geparst.

    <IfModule mod_php4.c>
        # Wenn PHP aktiviert wurde, werden .php und .phps Dateien berücksichtigt.
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        # Da die meisten Benutzer index.php verwenden möchten, aktivieren
        # wir ebenso automatisch die index.php
        <IfModule mod_dir.c>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>
    

  4. Stellen Sie sicher, dass durch DirectoryIndex die gewünschten richtigen Index-Dateien geladen werden. Das kann ebenfalls in httpd.conf definiert werden. Normalerweise wird index.php und index.html verwendet. Standardmäßig ist index.php aktiviert, wie oben bereits gezeigt. Passen Sie es wie gewünscht an.
  5. Pfad zur php.ini setzen oder den Standard verwenden Der Standardpfad unter MacOS X ist /usr/local/php/php.ini was durch einen Aufruf von phpinfo() belegt werden sollte. Wenn keine php.ini angegeben ist, verwendet PHP die Standardwerte. Lesen Sie dazu die entsprechenden FAQs: finding php.ini.
  6. Setzen des DocumentRoot's Das ist das Wurzelverzeichnis für alle Web-Dateien. Dateien in diesem Verzeichnis werden durch den Webserver ausgeliefert. PHP-Dateien werden zuvor geparst bevor sie an einen Browser ausgeliefert werden. Der standardmäßig gesetzte Pfad ist /Library/WebServer/Documents und kann in der httpd.conf auf einen beliebigen Pfad gesetzt werden. Alternativ ist der standardmäßige Pfad zum DocumentRoot für die einzelnen Benutzer: /Users/IHR_BENUTZER_NAME/Sites
  7. Erstellen Sie eine phpinfo() Datei

    Die phpinfo()-Funktion zeigt Informationen von PHP an. Erstellen Sie eine Datei im Verzeichnis DocumentRoot mit dem folgendne Inhalt:

    <?php phpinfo(); ?>

  8. Starten Sie den Apache neu und laden Sie die eben erzeugte PHP-Datei Um neu zu starten, können Sie entweder sudo apachectl graceful im Terminal aufrufen oder die Stop/Start Option des "Personal Web Server" in den MacOS X Systemeinstellungen verwenden. Standardmäßig sollte folgende URL zum laden von lokalen Dateien im Webbrowser genügen: http://localhost/info.php Alternativ, um Dateien aus dem DocumentRoot eines lokalen Benutzers zu laden: http://localhost/~IHR_BENUTZER_NAME/info.php

Entsprechend enden CLI (oder CGI in älteren Versionen) mit php und verwenden /usr/bin/php. Öffnen Sie das Terminal, lesen Sie das Kapitel PHP auf der Kommandozeile des PHP-Handbuchs und führen Sie php -v aus, um die PHP Version des PHP Binärprogramms zu sehen. Ein Aufruf von phpinfo() enthält diese Informationen ebenfalls.



Kompilieren für OS X Server

Mac OS X Server Installation

  1. Holen Sie sich die aktuellsten Versionen von Apache und PHP.
  2. Entpacken Sie diese, und starten Sie das configure Programm für Apache.

    ./configure --exec-prefix=/usr \
    --localstatedir=/var \
    --mandir=/usr/share/man \
    --libexecdir=/System/Library/Apache/Modules \
    --iconsdir=/System/Library/Apache/Icons \
    --includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
    --enable-shared=max \
    --enable-module=most \
    --target=apache

  3. Wenn Sie möchten, dass der Kompilierer einige Optimierungen vornimmt, können Sie z.B. die folgende Zeile hinzufügen:

    setenv OPTIM=-O2

  4. Als nächstes wechseln Sie in das PHP 4 Quellverzeichnis und konfigurieren es.

    ./configure --prefix=/usr \
        --sysconfdir=/etc \
        --localstatedir=/var \
        --mandir=/usr/share/man \
        --with-xml \
        --with-apache=/src/apache_1.3.12

    Stellen Sie sicher, dass eventuell zusätzlich benötigte Erweiterungen (MySQL, GD, usw.) an dieser Stelle hinzugefügt werden. Zum Hinzufügen des Apaches kann die Option --with-apache mit Angabe des Pfades zu den Quelldateien, z.B. /src/apache_1.3.12, verwendet werden.

  5. Geben Sie make und make install ein. Diese Aufrufe füget ein Verzeichnis src/modules/php4 in den Quelldateien des Apaches ein.
  6. Jetzt muß der Apache konfiguriert werden, um PHP 4 mit einzubinden.

    ./configure --exec-prefix=/usr \
    --localstatedir=/var \
    --mandir=/usr/share/man \
    --libexecdir=/System/Library/Apache/Modules \
    --iconsdir=/System/Library/Apache/Icons \
    --includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
    --enable-shared=max \
    --enable-module=most \
    --target=apache \
    --activate-module=src/modules/php4/libphp4.a

    Es kann sein, dass Sie eine Meldung erhalten, dass libmodphp4.a veraltet ist. In diesem Fall sollten sie im Apache Quellverzeichnis in das Verzeichnis src/modules/php4 wechseln und den folgenden Befehl aufrufen: ranlib libmodphp4.a. Danach gehen Sie zurück ins Wurzelverzeichnis des Apache Quellverzeichnisses und starten erneut den configure Aufruf, dass wird die Verlinkungstabelle auf den neusten Stand bringen. Rufen Sie jetzt make und make install erneut auf.

  7. Kopieren sie die Datei php.ini-dist aus Ihrem PHP 4 Quellverzeichnis unter bin und benennen Sie diese um: cp php.ini-dist /usr/local/bin/php.ini oder (wenn Sie kein local-Verzeichnis haben) cp php.ini-dist /usr/bin/php.ini .



Kompilieren unter MacOS X Client

Die folgende Anleitung erklärt, wie ein PHP Modul im Apache Webserver - bereits in Mac OS X enthalten - installiert werden kann. Das Modul beinhaltet bereits Unterstützung für die Datenbanksysteme MySQL und PostgreSQL. Diese Anleitung wurde bereitgestellt von » Marc Liyanage.

Warnung

Seien Sie vorsichtig während der Installation. Sie könnten dadurch den Apache Webserver zerstören.

Installieren Sie wie folgt:

  1. Öffnen Sie ein Terminal-Fenster.
  2. Tippen Sie wget http://www.diax.ch/users/liyanage/software/macosx/libphp4.so.gz , und warten Sie, bis der Download beendet ist.
  3. Tippen Sie gunzip libphp4.so.gz .
  4. Tippen Sie sudo apxs -i -a -n php4 libphp4.so
  5. Jetzt tippen Sie sudo open -a TextEdit /etc/httpd/httpd.conf . TextEdit wird sich öffnen und die Konfigurationsdatei des Webservers anzeigen. Suchen Sie nach den folgenden zwei Zeilen gegen Ende der Datei: (Benutzen Sie die Suchen-Funktion)

    #AddType application/x-httpd-php .php 
    #AddType application/x-httpd-php-source .phps

    Entfernen sie das Doppelkreuz (#) und speichern Sie die Datei. Sie können TextEdit wieder schließen.

  6. Zuletzt tippen Sie sudo apachectl graceful um den Webserver neu zu starten.

PHP sollte nun zur Verfügung stehen. Sie können es testen indem Sie eine Datei test.php mit dem Inhalt <?php phpinfo() ?> in Ihrem Home-Verzeichnis in den Ordner Sites legen und die URL 127.0.0.1/~your_username/test.php in Ihrem Webbrowser eingeben. Sie sollten nun eine Informationsübersicht des PHP-Moduls sehen.




Installation on Windows systems

Inhaltsverzeichnis

This section applies to Windows 98/Me and Windows NT/2000/XP/2003. PHP will not work on 16 bit platforms such as Windows 3.1 and sometimes we refer to the supported Windows platforms as Win32. Windows 95 is no longer supported as of PHP 4.3.0.

Hinweis: Windows 98/ME/NT4 is no longer supported as of PHP 5.3.0.

Hinweis: Windows 95 is no longer supported as of PHP 4.3.0.

There are two main ways to install PHP for Windows: either manually or by using the installer.

If you have Microsoft Visual Studio, you can also build PHP from the original source code.

Once you have PHP installed on your Windows system, you may also want to load various extensions for added functionality.

Warnung

There are several all-in-one installers over the Internet, but none of those are endorsed by PHP.net, as we believe that using one of the official windows packages from » http://www.php.net/downloads.php is the best choice to have your system secure and optimized.


Windows Installer (PHP 5.1.0 and earlier)

The Windows PHP installer is available from the downloads page at » http://www.php.net/downloads.php. This installs the CGI version of PHP and for IIS, PWS, and Xitami, it configures the web server as well. The installer does not include any extra external PHP extensions (php_*.dll) as you'll only find those in the Windows Zip Package and PECL downloads.

Hinweis: While the Windows installer is an easy way to make PHP work, it is restricted in many aspects as, for example, the automatic setup of extensions is not supported. Use of the installer isn't the preferred method for installing PHP.

First, install your selected HTTP (web) server on your system, and make sure that it works.

Run the executable installer and follow the instructions provided by the installation wizard. Two types of installation are supported - standard, which provides sensible defaults for all the settings it can, and advanced, which asks questions as it goes along.

The installation wizard gathers enough information to set up the php.ini file, and configure certain web servers to use PHP. One of the web servers the PHP installer does not configure for is Apache, so you'll need to configure it manually.

Once the installation has completed, the installer will inform you if you need to restart your system, restart the server, or just start using PHP.

Warnung

Be aware, that this setup of PHP is not secure. If you would like to have a secure PHP setup, you'd better go on the manual way, and set every option carefully. This automatically working setup gives you an instantly working PHP installation, but it is not meant to be used on online servers.



Windows Installer (PHP 5.2 and later)

The Windows PHP installer for later versions of PHP is built using MSI technology using the Wix Toolkit (» http://wix.sourceforge.net/). It will install and configure PHP and all the built-in and PECL extensions, as well as configure many of the popular web servers such as IIS, Apache, and Xitami.

First, install your selected HTTP (web) server on your system, and make sure that it works. Then proceed with one of the following install types.

Normal Install

Run the MSI installer and follow the instructions provided by the installation wizard. You will be prompted to select the Web Server you wish to configure first, along with any configuration details needed.

You will then be prompted to select which features and extensions you wish to install and enable. By selecting "Will be installed on local hard drive" in the drop-down menu for each item you can trigger whether to install the feature or not. By selecting "Entire feature will be installed on local hard drive", you will be able to install all sub-features of the included feature ( for example by selecting this options for the feature "PDO" you will install all PDO Drivers ).

Warnung

It is not recommended to install all extensions by default, since many other them require dependencies from outside PHP in order to function properly. Instead, use the Installation Repair Mode that can be triggered thru the 'Add/Remove Programs' control panel to enable or disable extensions and features after installation.

The installer then sets up PHP to be used in Windows and the php.ini file, and configures certain web servers to use PHP. The installer will currently configure IIS, Apache, Xitami, and Sambar Server; if you are using a different web server you'll need to configure it manually.

Silent Install

The installer also supports a silent mode, which is helpful for Systems Administrators to deploy PHP easily. To use silent mode:

       
msiexec.exe /i php-VERSION-win32-install.msi /q

You can control the install directory by passing it as a parameter to the install. For example, to install to e:\php:

       
msiexec.exe /i php-VERSION-win32-install.msi /q INSTALLDIR=e:\php
You can also use the same syntax to specify the Apache Configuration Directory (APACHEDIR), the Sambar Server directory (SAMBARDIR), and the Xitami Server directory (XITAMIDIR).

You can also specify what features to install. For example, to install the mysqli extension and the CGI executable:

       
msiexec.exe /i php-VERSION-win32-install.msi /q ADDLOCAL=cgi,ext_php_mysqli

The current list of Features to install is as follows:

 
MainExecutable - php.exe executable ( no longer available as of PHP 5.2.10/5.3.0; it is now included by default )
ScriptExecutable - php-win.exe executable
ext_php_* - the various extensions ( for example: ext_php_mysql for MySQL )
apache13 - Apache 1.3 module
apache20 - Apache 2.0 module
apache22 - Apache 2,2 module
apacheCGI - Apache CGI executable
iis4ISAPI - IIS ISAPI module
iis4CGI - IIS CGI executable
iis4FastCGI - IIS CGI executable
NSAPI - Sun/iPlanet/Netscape server module
netserve - NetServe Web Server CGI executable
Xitami - Xitami CGI executable
Sambar - Sambar Server ISAPI module
CGI - php-cgi.exe executable
PEAR - PEAR installer
Manual - PHP Manual in CHM Format

For more information on installing MSI installers from the command line, visit » http://msdn.microsoft.com/en-us/library/aa367988.aspx

Upgrading PHP with the Install

To upgrade, run the installer either graphically or from the command line as normal. The installer will read your current install options, remove your old installation, and reinstall PHP with the same options as before. It is recommended that you use this method of keeping PHP updated instead of manually replacing the files in the installation directory.



Manual Installation Steps

This section contains instructions for manually installing and configuring PHP on Microsoft Windows. For the instructions on how to use PHP installer to setup and configure PHP and a web server on Windows refer to Windows Installer (PHP 5.2 and later).

Selecting and downloading the PHP distribution package

Download the PHP zip binary distribution from » PHP for Windows: Binaries and Sources. There are several different versions of the zip package - chose the version that is suitable for the web server being used:

  • If PHP is used with IIS then choose PHP 5.3 VC9 Non Thread Safe or PHP 5.2 VC6 Non Thread Safe;

  • If PHP is used with Apache 1 or Apache 2 then choose PHP 5.3 VC6 or PHP 5.2 VC6.

Hinweis: VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the » Microsoft 2008 C++ Runtime (x86) or the » Microsoft 2008 C++ Runtime (x64) installed.

The PHP package structure and content

Unpack the content of the zip archive into a directory of your choice, for example C:\PHP\. The directory and file structure extracted from the zip will look as below:

Beispiel #1 PHP 5 package structure


c:\php
   |
   +--dev
   |  |
   |  |-php5ts.lib                 -- php5.lib in non thread safe version
   |
   +--ext                          -- extension DLLs for PHP
   |  |
   |  |-php_bz2.dll
   |  |
   |  |-php_cpdf.dll
   |  |
   |  |-...
   |
   +--extras                       -- empty 
   |
   +--pear                         -- initial copy of PEAR
   |
   |
   |-go-pear.bat                   -- PEAR setup script
   |
   |-...
   |
   |-php-cgi.exe                   -- CGI executable
   |
   |-php-win.exe                   -- executes scripts without an opened command prompt
   |
   |-php.exe                       -- Command line PHP executable (CLI)
   |
   |-...
   |
   |-php.ini-development           -- default php.ini settings
   |
   |-php.ini-production            -- recommended php.ini settings
   |
   |-php5apache2_2.dll             -- does not exist in non thread safe version
   |
   |-php5apache2_2_filter.dll      -- does not exist in non thread safe version
   |
   |-...
   |
   |-php5ts.dll                    -- core PHP DLL ( php5.dll in non thread safe version)
   | 
   |-...

Below is the list of the modules and executables included in the PHP zip distribution:

  • go-pear.bat - the PEAR setup script. Refer to » Installation (PEAR) for more details.

  • php-cgi.exe - CGI executable that can be used when running PHP on IIS via CGI or FastCGI.

  • php-win.exe - the PHP executable for executing PHP scripts without using a command line window (for example PHP applications that use Windows GUI).

  • php.exe - the PHP executable for executing PHP scripts within a command line interface (CLI).

  • php5apache2_2.dll - Apache 2.2.X module.

  • php5apache2_2_filter.dll - Apache 2.2.X filter.

Changing the php.ini file

After the php package content has been extracted, copy the php.ini-production into php.ini in the same folder. If necessary, it is also possible to place the php.ini into any other location of your choice but that will require additional configuration steps as described in PHP Configuration.

The php.ini file tells PHP how to configure itself, and how to work with the environment that it runs in. Here are a number of settings for the php.ini file that help PHP work better with Windows. Some of these are optional. There are many other directives that may be relevant to your environment - refer to the list of php.ini directives for more information.

Required directives:

  • extension_dir = <path to extension directory> - The extension_dir needs to point to the directory where PHP extensions files are stored. The path can be absolute (i.e. "C:\PHP\ext") or relative (i.e. ".\ext"). Extensions that are listed lower in the php.ini file need to be located in the extension_dir.

  • extension = xxxxx.dll - For each extension you wish to enable, you need a corresponding "extension=" directive that tells PHP which extensions in the extension_dir to load at startup time.

  • log_errors = On - PHP has an error logging facility that can be used to send errors to a file, or to a service (i.e. syslog) and works in conjunction with the error_log directive below. When running under IIS, the log_errors should be enabled, with a valid error_log.

  • error_log = <path to the error log file> - The error_log needs to specify the absolute, or relative path to the file where PHP errors should be logged. This file needs to be writable for the web server. The most common places for this file are in various TEMP directories, for example "C:\inetpub\temp\php-errors.log".

  • cgi.force_redirect = 0 - This directive is required for running under IIS. It is a directory security facility required by many other web servers. However, enabling it under IIS will cause the PHP engine to fail on Windows.

  • cgi.fix_pathinfo = 1 - This lets PHP access real path info following the CGI Spec. The IIS FastCGI implementation needs this set.

  • fastcgi.impersonate = 1 - FastCGI under IIS supports the ability to impersonate security tokens of the calling client. This allows IIS to define the security context that the request runs under.

  • fastcgi.logging = 0 - FastCGI logging should be disabled on IIS. If it is left enabled, then any messages of any class are treated by FastCGI as error conditions which will cause IIS to generate an HTTP 500 exception.

Optional directives

  • max_execution_time = ## - This directive tells PHP the maximum amount of time that it can spend executing any given script. The default for this is 30 seconds. Increase the value of this directive if PHP application take long time to execute.

  • memory_limit = ###M - The amount of memory available for the PHP process, in Megabytes. The default is 128, which is fine for most PHP applications. Some of the more complex ones might need more.

  • display_errors = Off - This directive tells PHP whether to include any error messages in the stream that it returns to the Web server. If this is set to "On", then PHP will send whichever classes of errors that you define with the error_reporting directive back to web server as part of the error stream. For security reasons it is recommended to set it to "Off" on production servers in order not to reveal any security sensitive information that is often included in the error messages.

  • open_basedir = <paths to directories, separated by semicolon>, e.g. openbasedir="C:\inetpub\wwwroot;C:\inetpub\temp". This directive specified the directory paths where PHP is allowed to perform file system operations. Any file operation outside of the specified paths will result in an error. This directive is especially useful for locking down the PHP installation in shared hosting environments to prevent PHP scripts from accessing any files outside of the web site's root directory.

  • upload_max_filesize = ###M and post_max_size = ###M - The maximum allowed size of an uploaded file and post data respectively. The values of these directives should be increased if PHP applications need to perform large uploads, such as for example photos or video files.

PHP is now setup on your system. The next step is to choose a web server, and enable it to run PHP. Choose a web server from the table of contents.

In addition to running PHP via a web server, PHP can run from the command line just like a .BAT script. See Command Line PHP on Microsoft Windows for further details.



ActiveScript

This section contains notes specific to the ActiveScript installation.

ActiveScript is a Windows only SAPI that enables you to use PHP script in any ActiveScript compliant host, like Windows Script Host, ASP/ASP.NET, Windows Script Components or Microsoft Scriptlet control.

As of PHP 5.0.1, ActiveScript has been moved to the » PECL repository. Sie können die DLL für diese PECL-Extension entweder von » PHP-Downloads oder von » http://pecl4win.php.net/ herunterladen.

Hinweis: You should read the manual installation steps first!

After installing PHP, you should download the ActiveScript DLL (php5activescript.dll) and place it in the main PHP folder (e.g. C:\php).

After having all the files needed, you must register the DLL on your system. To achieve this, open a Command Prompt window (located in the Start Menu). Then go to your PHP directory by typing something like cd C:\php. To register the DLL just type regsvr32 php5activescript.dll.

To test if ActiveScript is working, create a new file, named test.wsf (the extension is very important) and type:

<job id="test">
 
 <script language="PHPScript">
  $WScript->Echo("Hello World!");
 </script>
 
</job>

Save and double-click on the file. If you receive a little window saying "Hello World!" you're done.

Hinweis: In PHP 4, the engine was named 'ActivePHP', so if you are using PHP 4, you should replace 'PHPScript' with 'ActivePHP' in the above example.

Hinweis: ActiveScript doesn't use the default php.ini file. Instead, it will look only in the same directory as the .exe that caused it to load. You should create php-activescript.ini and place it in that folder, if you wish to load extensions, etc.



Microsoft IIS

This section contains PHP installation instructions specific to Microsoft Internet Information Services (IIS).



Microsoft IIS 5.1 and IIS 6.0

This section contains instructions for manually setting up Internet Information Services (IIS) 5.1 and IIS 6.0 to work with PHP on Microsoft Windows XP and Windows Server 2003. For instructions on setting up IIS 7.0 and later versions on Windows Vista, Windows Server 2008, Windows 7 and Windows Server 2008 R2 refer to Microsoft IIS 7.0 and later.

Configuring IIS to process PHP requests

Download and install PHP in accordance to the instructions described in manual installation steps

Hinweis: Non-thread-safe build of PHP is recommended when using IIS. The non-thread-safe builds are available at » PHP for Windows: Binaries and Sources Releases.

Configure the CGI- and FastCGI-specific settings in php.ini file as shown below:

Beispiel #1 CGI and FastCGI settings in php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Download and install the » Microsoft FastCGI Extension for IIS 5.1 and 6.0. The extension is available for 32-bit and 64-bit platforms - select the right download package for your platform.

Configure the FastCGI extension to handle PHP-specific requests by running the command shown below. Replace the value of the "-path" parameter with the absolute file path to the php-cgi.exe file.

Beispiel #2 Configuring FastCGI extension to handle PHP requests

cscript %windir%\system32\inetsrv\fcgiconfig.js -add -section:"PHP" ^
-extension:php -path:"C:\PHP\php-cgi.exe"

This command will create an IIS script mapping for *.php file extension, which will result in all URLs that end with .php being handled by FastCGI extension. Also, it will configure FastCGI extension to use the executable php-cgi.exe to process the PHP requests.

Hinweis: At this point the required installation and configuration steps are completed. The remaining instructions below are optional but highly recommended for achieving optimal functionality and performance of PHP on IIS.

Impersonation and file system access

It is recommended to enable FastCGI impersonation in PHP when using IIS. This is controlled by the fastcgi.impersonate directive in php.ini file. When impersonation is enabled, PHP will perform all the file system operations on behalf of the user account that has been determined by IIS authentication. This ensures that even if the same PHP process is shared across different IIS web sites, the PHP scripts in those web sites will not be able to access each others' files as long as different user accounts are used for IIS authentication on each web site.

For example IIS 5.1 and IIS 6.0, in its default configuration, has anonymous authentication enabled with built-in user account IUSR_<MACHINE_NAME> used as a default identity. This means that in order for IIS to execute PHP scripts, it is necessary to grant IUSR_<MACHINE_NAME> account read permission on those scripts. If PHP applications need to perform write operations on certain files or write files into some folders then IUSR_<MACHINE_NAME> account should have write permission to those.

To determine which user account is used by IIS anonymous authentication, follow these steps:

  1. In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";

  2. Expand the list of web sites under the "Web Sites" node in the tree view, right-click on a web site that is being used and select "Properties";

  3. Click the "Directory Security" tab;

  4. Take note of a "User name:" field in the "Authentication Methods" dialog

To modify the permissions settings on files and folders, use the Windows Explorer user interface or icacls command.

Beispiel #3 Configuring file access permissions

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Set index.php as a default document in IIS

The IIS default documents are used for HTTP requests that do not specify a document name. With PHP applications, index.php usually acts as a default document. To add index.php to the list of IIS default documents, follow these steps:

  1. In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";

  2. Right-click on the "Web Sites" node in the tree view and select "Properties";

  3. Click the "Documents" tab;

  4. Click the "Add..." button and enter "index.php" for the "Default content page:".

FastCGI and PHP Recycling configuration

Configure IIS FastCGI extension settings for recycling of PHP processes by using the commands shown below. The FastCGI setting instanceMaxRequests controls how many requests will be processed by a single php-cgi.exe process before FastCGI extension shuts it down. The PHP environment variable PHP_FCGI_MAX_REQUESTS controls how many requests a single php-cgi.exe process will handle before it recycles itself. Make sure that the value specified for FastCGI InstanceMaxRequests setting is less than or equal to the value specified for PHP_FCGI_MAX_REQUESTS.

Beispiel #4 Configuring FastCGI and PHP recycling

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-InstanceMaxRequests:10000

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

Configuring FastCGI timeout settings

Increase the timeout settings for FastCGI extension if there are applications that have long running PHP scripts. The two settings that control timeouts are ActivityTimeout and RequestTimeout. Refer to » Configuring FastCGI Extension for IIS 6.0 for more information about those settings.

Beispiel #5 Configuring FastCGI timeout settings

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-ActivityTimeout:90

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-RequestTimeout:90

Changing the Location of php.ini file

PHP searches for php.ini file in several locations and it is possible to change the default locations of php.ini file by using PHPRC environment variable. To instruct PHP to load the configuration file from a custom location run the command shown below. The absolute path to the directory with php.ini file should be specified as a value of PHPRC environment variable.

Beispiel #6 Changing the location of php.ini file

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-EnvironmentVars:PHPRC:"C:\Some\Directory\"



Microsoft IIS 7.0 and later

This section contains instructions for manually setting up Internet Information Services (IIS) 7.0 and later to work with PHP on Microsoft Windows Vista SP1, Windows 7, Windows Server 2008 and Windows Server 2008 R2. For instructions on setting up IIS 5.1 and IIS 6.0 on Windows XP and Windows Server 2003 refer to Microsoft IIS 5.1 and IIS 6.0.

Enabling FastCGI support in IIS

FastCGI module is disabled in default installation of IIS. The steps to enable it differ based on the version of Windows being used.

To enable FastCGI support on Windows Vista SP1 and Windows 7:

  1. In the Windows Start Menu choose "Run:", type "optionalfeatures.exe" and click "Ok";

  2. In the "Windows Features" dialog expand "Internet Information Services", "World Wide Web Services", "Application Development Features" and then enable the "CGI" checkbox;

  3. Click OK and wait until the installation is complete.

To enable FastCGI support on Windows Server 2008 and Windows Server 2008 R2:

  1. In the Windows Start Menu choose "Run:", type "CompMgmtLauncher" and click "Ok";

  2. If the "Web Server (IIS)" role is not present under the "Roles" node, then add it by clicking "Add Roles";

  3. If the "Web Server (IIS)" role is present, then click "Add Role Services" and then enable the "CGI" checkbox under "Application Development" group;

  4. Click "Next" and then "Install" and wait for the installation to complete.

Configuring IIS to process PHP requests

Download and install PHP in accordance to the instructions described in manual installation steps

Hinweis: Non-thread-safe build of PHP is recommended when using IIS. The non-thread-safe builds are available at » PHP for Windows: Binaries and Sources Releases.

Configure the CGI- and FastCGI-specific settings in php.ini file as shown below:

Beispiel #1 CGI and FastCGI settings in php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Configure IIS handler mapping for PHP by using either IIS Manager user interface or a command line tool.

Using IIS Manager user interface to create a handler mapping for PHP

Follow these steps to create an IIS handler mapping for PHP in IIS Manager user interface:

  1. In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";

  2. In the IIS Manager user interface select the server node in the "Connections" tree view;

  3. In the "Features View" page open the "Handler Mappings" feature;

  4. In the "Actions" pane click "Add Module Mapping...";

  5. In the "Add Module Mapping" dialog enter the following:

    • Request path: *.php
    • Module: FastCgiModule
    • Executable: C:\[Path to PHP installation]\php-cgi.exe
    • Name: PHP_via_FastCGI

  6. Click "Request Restrictions" button and then configure the mapping to invoke handler only if request is mapped to a file or a folder;

  7. Click OK on all the dialogs to save the configuration.

Using command line tool to create a handler mapping for PHP

Use the command shown below to create an IIS FastCGI process pool which will use php-cgi.exe executable for processing PHP requests. Replace the value of the fullPath parameter with the absolute file path to the php-cgi.exe file.

Beispiel #2 Creating IIS FastCGI process pool

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI ^
/+[fullPath='c:\PHP\php-cgi.exe']

Configure IIS to handle PHP specific requests by running the command shown below. Replace the value of the scriptProcessor parameter with the absolute file path to the php-cgi.exe file.

Beispiel #3 Creating handler mapping for PHP requests

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers ^
/+[name='PHP_via_FastCGI', path='*.php',verb='*',modules='FastCgiModule',^
scriptProcessor='c:\PHP\php-cgi.exe',resourceType='Either']

This command creates an IIS handler mapping for *.php file extension, which will result in all URLs that end with .php being handled by FastCGI module.

Hinweis: At this point the required installation and configuration steps are completed. The remaining instructions below are optional but highly recommended for achieving optimal functionality and performance of PHP on IIS.

Impersonation and file system access

It is recommended to enable FastCGI impersonation in PHP when using IIS. This is controlled by the fastcgi.impersonate directive in php.ini file. When impersonation is enabled, PHP will perform all the file system operations on behalf of the user account that has been determined by IIS authentication. This ensures that even if the same PHP process is shared across different IIS web sites, the PHP scripts in those web sites will not be able to access each other's files as long as different user accounts are used for IIS authentication on each web site.

For example IIS 7, in its default configuration, has anonymous authentication enabled with built-in user account IUSR used as a default identity. This means that in order for IIS to execute PHP scripts, it is necessary to grant IUSR account read permission on those scripts. If PHP applications need to perform write operations on certain files or write files into some folders then IUSR account should have write permission to those.

To determine what user account is used as an anonymous identity in IIS 7 use the following command. Replace the "Default Web Site" with the name of IIS web site that you use. In the output XML configuration element look for the userName attribute.

Beispiel #4 Determining the account used as IIS anonymous identity

%windir%\system32\inetsrv\appcmd.exe list config "Default Web Site" ^
/section:anonymousAuthentication

<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" userName="IUSR" />
    </authentication>
   </security>
</system.webServer>

Hinweis: If userName attribute is not present in the anonymousAuthentication element, or is set to an empty string, then it means that the application pool identity is used as an anonymous identity for that web site.

To modify the permissions settings on files and folders, use the Windows Explorer user interface or icacls command.

Beispiel #5 Configuring file access permissions

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Set index.php as a default document in IIS

The IIS default documents are used for HTTP requests that do not specify a document name. With PHP applications, index.php usually acts as a default document. To add index.php to the list of IIS default documents, use this command:

Beispiel #6 Set index.php as a default document in IIS

%windir%\system32\inetsrv\appcmd.exe set config ^
-section:system.webServer/defaultDocument /+"files.[value='index.php']" ^
/commit:apphost

FastCGI and PHP Recycling configuration

Configure IIS FastCGI settings for recycling of PHP processes by using the commands shown below. The FastCGI setting instanceMaxRequests controls how many requests will be processed by a single php-cgi.exe process before IIS shuts it down. The PHP environment variable PHP_FCGI_MAX_REQUESTS controls how many requests a single php-cgi.exe process will handle before it recycles itself. Make sure that the value specified for FastCGI InstanceMaxRequests setting is less than or equal to the value specified for PHP_FCGI_MAX_REQUESTS.

Beispiel #7 Configuring FastCGI and PHP recycling

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='c:\php\php-cgi.exe'].instanceMaxRequests:10000

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.^
[name='PHP_FCGI_MAX_REQUESTS',value='10000']"

Configuring FastCGI timeout settings

Increase the timeout settings for FastCGI if it is expected to have long running PHP scripts. The two settings that control timeouts are activityTimeout and requestTimeout. Use the commands below to change the timeout settings. Make sure to replace the value in the fullPath parameter to contain the absolute path to the php-cgi.exe file.

Beispiel #8 Configuring FastCGI and PHP recycling

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].activityTimeout:"90"  /commit:apphost

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].requestTimeout:"90"  /commit:apphost

Changing the Location of php.ini file

PHP searches for php.ini file in several locations and it is possible to change the default locations of php.ini file by using PHPRC environment variable. To instruct PHP to load the configuration file from a custom location run the command shown below. The absolute path to the directory with php.ini file should be specified as a value of PHPRC environment variable.

Beispiel #9 Changing the location of php.ini file

appcmd.exe set config  -section:system.webServer/fastCgi ^
/+"[fullPath='C:\php\php.exe',arguments=''].environmentVariables.^
[name='PHPRC',value='C:\Some\Directory\']" /commit:apphost



Apache 1.3.x on Microsoft Windows

This section contains notes and hints specific to Apache 1.3.x installs of PHP on Microsoft Windows systems. There are also instructions and notes for Apache 2 on a separate page.

Hinweis: Please read the manual installation steps first!

There are two ways to set up PHP to work with Apache 1.3.x on Windows. One is to use the CGI binary (php.exe for PHP 4 and php-cgi.exe for PHP 5), the other is to use the Apache Module DLL. In either case you need to edit your httpd.conf to configure Apache to work with PHP, and then restart the server.

It is worth noting here that now the SAPI module has been made more stable under Windows, we recommend it's use above the CGI binary, since it is more transparent and secure.

Although there can be a few variations of configuring PHP under Apache, these are simple enough to be used by the newcomer. Please consult the Apache Documentation for further configuration directives.

After changing the configuration file, remember to restart the server, for example, NET STOP APACHE followed by NET START APACHE, if you run Apache as a Windows Service, or use your regular shortcuts.

Hinweis: Beachten Sie bitte, dass Sie bei Pfadangaben in der Apachekonfigurationsdatei unter Windows alle Backslashes, wie z.B. c:\directory\file.ext, in Schrägstriche umwandeln müssen: c:/directory/file.ext. Bei Verzeichnisnamen kann weiterhin ein abschließender Schrägstrich nötig sein.

Installing as an Apache module

You should add the following lines to your Apache httpd.conf file:

Beispiel #1 PHP as an Apache 1.3.x module

This assumes PHP is installed to c:\php. Adjust the path if this is not the case.

For PHP 4:

# Add to the end of the LoadModule section
# Don't forget to copy this file from the sapi directory!
LoadModule php4_module "C:/php/php4apache.dll"

# Add to the end of the AddModule section
AddModule mod_php4.c

For PHP 5:

# Add to the end of the LoadModule section
LoadModule php5_module "C:/php/php5apache.dll"

# Add to the end of the AddModule section
AddModule mod_php5.c

For both:

# Add this line inside the <IfModule mod_mime.c> conditional brace
AddType application/x-httpd-php .php

# For syntax highlighted .phps files, also add
AddType application/x-httpd-php-source .phps

Installing as a CGI binary

If you unzipped the PHP package to C:\php\ as described in the Manual Installation Steps section, you need to insert these lines to your Apache configuration file to set up the CGI binary:

Beispiel #2 PHP and Apache 1.3.x as CGI

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php

# For PHP 4
Action application/x-httpd-php "/php/php.exe"

# For PHP 5
Action application/x-httpd-php "/php/php-cgi.exe"

# specify the directory where php.ini is
SetEnv PHPRC C:/php

Note that the second line in the list above can be found in the actual versions of httpd.conf, but it is commented out. Remember also to substitute the c:/php/ for your actual path to PHP.

Warnung

Wenn Sie das CGI-Setup verwenden, ist Ihr Server für einige mögliche Angriffe anfällig. Wie Sie sich vor diesen Angriffen schützen können, entnehmen Sie bitte dem Kapitel über CGI-Sicherheit.

If you would like to present PHP source files syntax highlighted, there is no such convenient option as with the module version of PHP. If you chose to configure Apache to use PHP as a CGI binary, you will need to use the highlight_file() function. To do this simply create a PHP script file and add this code: <?php highlight_file('some_php_script.php'); ?>.



Apache 2.0.x on Microsoft Windows

This section contains notes and hints specific to Apache 2.0.x installs of PHP on Microsoft Windows systems. We also have instructions and notes for Apache 1.3.x users on a separate page.

Hinweis: You should read the manual installation steps first!

Hinweis: Apache 2.2.x Support
Users of Apache 2.2.x may use the documentation below except the appropriate DLL file is named php5apache2_2.dll and it only exists as of PHP 5.2.0. See also » http://snaps.php.net/

Warnung

Wir empfehlen, in einer Produktionsumgebung kein Threaded MPM mit Apache2 zu verwenden. Verwenden Sie stattdessen das Prefork MPM oder Apache1. Für weitere Informationen und die Gründe lesen Sie bitte den entsprechenden FAQ-Eintrag über die Verwendung von Apache2 mit Threaded MPM.

You are highly encouraged to take a look at the » Apache Documentation to get a basic understanding of the Apache 2.0.x Server. Also consider to read the » Windows specific notes for Apache 2.0.x before reading on here.

Hinweis: PHP and Apache 2.0.x compatibility notes
The following versions of PHP are known to work with the most recent version of Apache 2.0.x:

These versions of PHP are compatible to Apache 2.0.40 and later.
Apache 2.0 SAPI-support started with PHP 4.2.0. PHP 4.2.3 works with Apache 2.0.39, don't use any other version of Apache with PHP 4.2.3. However, the recommended setup is to use PHP 4.3.0 or later with the most recent version of Apache2.
All mentioned versions of PHP will work still with Apache 1.3.x.

Warnung

Apache 2.0.x is designed to run on Windows NT 4.0, Windows 2000 or Windows XP. At this time, support for Windows 9x is incomplete. Apache 2.0.x is not expected to work on those platforms at this time.

Download the most recent version of » Apache 2.0.x and a fitting PHP version. Follow the Manual Installation Steps and come back to go on with the integration of PHP and Apache.

There are two ways to set up PHP to work with Apache 2.0.x on Windows. One is to use the CGI binary the other is to use the Apache module DLL. In either case you need to edit your httpd.conf to configure Apache to work with PHP and then restart the server.

Hinweis: Beachten Sie bitte, dass Sie bei Pfadangaben in der Apachekonfigurationsdatei unter Windows alle Backslashes, wie z.B. c:\directory\file.ext, in Schrägstriche umwandeln müssen: c:/directory/file.ext. Bei Verzeichnisnamen kann weiterhin ein abschließender Schrägstrich nötig sein.

Installing as a CGI binary

You need to insert these three lines to your Apache httpd.conf configuration file to set up the CGI binary:

Beispiel #1 PHP and Apache 2.0 as CGI

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php

# For PHP 4
Action application/x-httpd-php "/php/php.exe"

# For PHP 5
Action application/x-httpd-php "/php/php-cgi.exe"

Warnung

Wenn Sie das CGI-Setup verwenden, ist Ihr Server für einige mögliche Angriffe anfällig. Wie Sie sich vor diesen Angriffen schützen können, entnehmen Sie bitte dem Kapitel über CGI-Sicherheit.

Installing as an Apache module

You need to insert these two lines to your Apache httpd.conf configuration file to set up the PHP module for Apache 2.0:

Beispiel #2 PHP and Apache 2.0 as Module

# For PHP 4 do something like this:
LoadModule php4_module "c:/php/php4apache2.dll"
# Don't forget to copy the php4apache2.dll file from the sapi directory!
AddType application/x-httpd-php .php

# For PHP 5 do something like this:
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "C:/php"

Hinweis: Remember to substitute your actual path to PHP for the c:/php/ in the above examples. Take care to use either php4apache2.dll or php5apache2.dll in your LoadModule directive and not php4apache.dll or php5apache.dll as the latter ones are designed to run with Apache 1.3.x.

Hinweis: If you want to use content negotiation, read related FAQ.

Warnung

Don't mix up your installation with DLL files from different PHP versions. You have the only choice to use the DLL's and extensions that ship with your downloaded PHP version.



Sun, iPlanet and Netscape servers on Microsoft Windows

This section contains notes and hints specific to Sun Java System Web Server, Sun ONE Web Server, iPlanet and Netscape server installs of PHP on Windows.

From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to generate custom directory listings and error pages. Additional functions for Apache compatibility are also available. For support in current web servers read the note about subrequests.

CGI setup on Sun, iPlanet and Netscape servers

To install PHP as a CGI handler, do the following:

  • Copy php4ts.dll to your systemroot (the directory where you installed Windows)
  • Make a file association from the command line. Type the following two lines:

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • In the Netscape Enterprise Administration Server create a dummy shellcgi directory and remove it just after (this step creates 5 important lines in obj.conf and allow the web server to handle shellcgi scripts).
  • In the Netscape Enterprise Administration Server create a new mime type (Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php).
  • Do it for each web server instance you want PHP to run

More details about setting up PHP as a CGI executable can be found here: » http://benoit.noss.free.fr/php/install-php.html

NSAPI setup on Sun, iPlanet and Netscape servers

To install PHP with NSAPI, do the following:

  • Copy php4ts.dll to your systemroot (the directory where you installed Windows)
  • Make a file association from the command line. Type the following two lines:

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • In the Netscape Enterprise Administration Server create a new mime type (Category: type, Content-Type: magnus-internal/x-httpd-php, File Suffix: php).
  • Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6) and add the following: You should place the lines after mime types init.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="c:/php/sapi/php4nsapi.dll"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialise PHP!" [php_ini="c:/path/to/php.ini"]
    

    (PHP >= 4.3.3) The php_ini parameter is optional but with it you can place your php.ini in your web server configuration directory.

  • Configure the default object in obj.conf (for virtual server classes [Sun Web Server 6.0+] in their vserver.obj.conf): In the <Object name="default"> section, place this line necessarily after all 'ObjectType' and before all 'AddLog' lines:

    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    

    (PHP >= 4.3.3) As additional parameters you can add some special php.ini-values, for example you can set a docroot="/path/to/docroot" specific to the context php4_execute is called. For boolean ini-keys please use 0/1 as value, not "On","Off",... (this will not work correctly), e.g. zlib.output_compression=1 instead of zlib.output_compression="On"

  • This is only needed if you want to configure a directory that only consists of PHP scripts (same like a cgi-bin directory):

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    

    After that you can configure a directory in the Administration server and assign it the style x-httpd-php. All files in it will get executed as PHP. This is nice to hide PHP usage by renaming files to .html.

  • Restart your web service and apply changes
  • Do it for each web server instance you want PHP to run

Hinweis: More details about setting up PHP as an NSAPI filter can be found here: » http://benoit.noss.free.fr/php/install-php4.html

Hinweis: The stacksize that PHP uses depends on the configuration of the web server. If you get crashes with very large PHP scripts, it is recommended to raise it with the Admin Server (in the section "MAGNUS EDITOR").

CGI environment and recommended modifications in php.ini

Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE WS/iPlanet/Netscape is a multithreaded web server. Because of that all requests are running in the same process space (the space of the web server itself) and this space has only one environment. If you want to get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the correct way to try this in the old PHP way with getenv() or a similar way (register globals to environment, $_ENV). You would only get the environment of the running web server without any valid CGI variables!

Hinweis: Why are there (invalid) CGI variables in the environment?
Answer: This is because you started the web server process from the admin server which runs the startup script of the web server, you wanted to start, as a CGI script (a CGI script inside of the admin server!). This is why the environment of the started web server has some CGI environment variables in it. You can test this by starting the web server not from the administration server. Use the command line as root user and start it manually - you will see there are no CGI-like environment variables.

Simply change your scripts to get CGI variables in the correct way for PHP 4.x by using the superglobal $_SERVER. If you have older scripts which use $HTTP_HOST, etc., you should turn on register_globals in php.ini and change the variable order too (important: remove "E" from it, because you do not need the environment here):

variables_order = "GPCS"
register_globals = On

Special use for error pages or self-made directory listings (PHP >= 4.3.3)

You can use PHP to generate the error pages for "404 Not Found" or similar. Add the following line to the object in obj.conf for every error page you want to overwrite:

Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]

where XXX is the HTTP error code. Please delete any other Error directives which could interfere with yours. If you want to place a page for all errors that could exist, leave the code parameter out. Your script can get the HTTP status code with $_SERVER['ERROR_TYPE'].

Another possibility is to generate self-made directory listings. Just create a PHP script which displays a directory listing and replace the corresponding default Service line for type="magnus-internal/directory" in obj.conf with the following:

Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]

For both error and directory listing pages the original URI and translated URI are in the variables $_SERVER['PATH_INFO'] and $_SERVER['PATH_TRANSLATED'].

Note about nsapi_virtual() and subrequests (PHP >= 4.3.3)

The NSAPI module now supports the nsapi_virtual() function (alias: virtual()) to make subrequests on the web server and insert the result in the web page. The problem is, that this function uses some undocumented features from the NSAPI library.

Under Unix this is not a problem, because the module automatically looks for the needed functions and uses them if available. If not, nsapi_virtual() is disabled.

Under Windows limitations in the DLL handling need the use of a automatic detection of the most recent ns-httpdXX.dll file. This is tested for servers till version 6.1. If a newer version of the Sun server is used, the detection fails and nsapi_virtual() is disabled.

If this is the case, try the following: Add the following parameter to php4_init in magnus.conf/obj.conf:

Init fn=php4_init ... server_lib="ns-httpdXX.dll"

where XX is the correct DLL version number. To get it, look in the server-root for the correct DLL name. The DLL with the biggest filesize is the right one.

You can check the status by using the phpinfo() function.

Hinweis: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!



OmniHTTPd Server

This section contains notes and hints specific to » OmniHTTPd on Windows.

Hinweis: You should read the manual installation steps first!

Warnung

Wenn Sie das CGI-Setup verwenden, ist Ihr Server für einige mögliche Angriffe anfällig. Wie Sie sich vor diesen Angriffen schützen können, entnehmen Sie bitte dem Kapitel über CGI-Sicherheit.

You need to complete the following steps to make PHP work with OmniHTTPd. This is a CGI executable setup. SAPI is supported by OmniHTTPd, but some tests have shown that it is not so stable to use PHP as an ISAPI module.

Hinweis: Important for CGI users
Read the faq on cgi.force_redirect for important details. This directive needs to be set to 0.

  1. Install OmniHTTPd server.

  2. Right click on the blue OmniHTTPd icon in the system tray and select Properties

  3. Click on Web Server Global Settings

  4. On the 'External' tab, enter: virtual = .php | actual = c:\php\php.exe (use php-cgi.exe if installing PHP 5), and use the Add button.

  5. On the Mime tab, enter: virtual = wwwserver/stdcgi | actual = .php, and use the Add button.

  6. Click OK

Repeat steps 2 - 6 for each extension you want to associate with PHP.

Hinweis: Some OmniHTTPd packages come with built in PHP support. You can choose at setup time to do a custom setup, and uncheck the PHP component. We recommend you to use the latest PHP binaries. Some OmniHTTPd servers come with PHP 4 beta distributions, so you should choose not to set up the built in support, but install your own. If the server is already on your machine, use the Replace button in Step 4 and 5 to set the new, correct information.



Sambar Server on Microsoft Windows

This section contains notes and hints specific to the » Sambar Server for Windows.

Hinweis: You should read the manual installation steps first!

This list describes how to set up the ISAPI module to work with the Sambar server on Windows.

  • Find the file called mappings.ini (in the config directory) in the Sambar install directory.

  • Open mappings.ini and add the following line under [ISAPI]:

    Beispiel #1 ISAPI configuration of Sambar

    #for PHP 4
    *.php = c:\php\php4isapi.dll
    
    #for PHP 5
    *.php = c:\php\php5isapi.dll
    

    (This line assumes that PHP was installed in c:\php.)

  • Now restart the Sambar server for the changes to take effect.

Hinweis: If you intend to use PHP to communicate with resources which are held on a different computer on your network, then you will need to alter the account used by the Sambar Server Service. The default account used for the Sambar Server Service is LocalSystem which will not have access to remote resources. The account can be amended by using the Services option from within the Windows Control Panel Administation Tools.



Xitami on Microsoft Windows

This section contains notes and hints specific to » Xitami on Windows.

Hinweis: You should read the manual installation steps first!

This list describes how to set up the PHP CGI binary to work with Xitami on Windows.

Hinweis: Important for CGI users
Read the faq on cgi.force_redirect for important details. This directive needs to be set to 0. If you want to use $_SERVER['PHP_SELF'] you have to enable the cgi.fix_pathinfo directive.

Warnung

Wenn Sie das CGI-Setup verwenden, ist Ihr Server für einige mögliche Angriffe anfällig. Wie Sie sich vor diesen Angriffen schützen können, entnehmen Sie bitte dem Kapitel über CGI-Sicherheit.

  • Make sure the web server is running, and point your browser to xitamis admin console (usually http://127.0.0.1/admin), and click on Configuration.

  • Navigate to the Filters, and put the extension which PHP should parse (i.e. .php) into the field File extensions (.xxx).

  • In Filter command or script put the path and name of your PHP CGI executable i.e. C:\php\php.exe for PHP 4, or C:\php\php-cgi.exe for PHP 5.

  • Press the 'Save' icon.

  • Restart the server to reflect changes.



Building from source

This chapter teaches how to compile PHP from sources on windows, using Microsoft's tools. To compile PHP with cygwin, please refer to Installation auf Unix-Systemen.

This chapter is outdated therefore it's temporarily been removed from the manual. For now, consider the following:



Installation of extensions on Windows

After installing PHP and a web server on Windows, you will probably want to install some extensions for added functionality. You can choose which extensions you would like to load when PHP starts by modifying your php.ini. You can also load a module dynamically in your script using dl().

The DLLs for PHP extensions are prefixed with php_.

Many extensions are built into the Windows version of PHP. This means additional DLL files, and the extension directive, are not used to load these extensions. The Windows PHP Extensions table lists extensions that require, or used to require, additional PHP DLL files. Here's a list of built in extensions:

In PHP 4 (updated PHP 4.3.11): BCMath, Caledar, COM, Ctype, FTP, MySQL, ODBC, Overload, PCRE, Session, Tokenizer, WDDX, XML und Zlib

In PHP 5 (updated PHP 5.0.4), the following changes exist. Built in: DOM, LibXML, Iconv, SimpleXML, SPL und SQLite. And the following are no longer built in: MySQL and Overload.

The default location PHP searches for extensions is C:\php4\extensions in PHP 4 and C:\php5 in PHP 5. To change this setting to reflect your setup of PHP edit your php.ini file:

  • You will need to change the extension_dir setting to point to the directory where your extensions lives, or where you have placed your php_*.dll files. For example:

    extension_dir = C:\php\extensions

  • Enable the extension(s) in php.ini you want to use by uncommenting the extension=php_*.dll lines in php.ini. This is done by deleting the leading ; from the extension you want to load.

    Beispiel #1 Enable Bzip2 extension for PHP-Windows

    // change the following line from ...
    ;extension=php_bz2.dll
    
    // ... to
    extension=php_bz2.dll

  • Some of the extensions need extra DLLs to work. Couple of them can be found in the distribution package, in the C:\php\dlls\ folder in PHP 4 or in the main folder in PHP 5, but some, for example Oracle (php_oci8.dll) require DLLs which are not bundled with the distribution package. If you are installing PHP 4, copy the bundled DLLs from C:\php\dlls folder to the main C:\php folder. Don't forget to include C:\php in the system PATH (this process is explained in a separate FAQ entry).

  • Some of these DLLs are not bundled with the PHP distribution. See each extensions documentation page for details. Also, read the manual section titled Installation of PECL extensions for details on PECL. An increasingly large number of PHP extensions are found in PECL, and these extensions require a separate download.

Hinweis: If you are running a server module version of PHP remember to restart your web server to reflect your changes to php.ini.

The following table describes some of the extensions available and required additional dlls.

PHP Extensions
Extension Description Notes
php_bz2.dll bzip2 compression functions None
php_calendar.dll Calendar conversion functions Built in since PHP 4.0.3
php_crack.dll Crack functions None
php_ctype.dll ctype family functions Built in since PHP 4.3.0
php_curl.dll CURL, Client URL library functions Requires: libeay32.dll, ssleay32.dll (bundled)
php_dba.dll DBA: DataBase (dbm-style) Abstraction layer functions None
php_dbase.dll dBase functions None
php_dbx.dll dbx functions  
php_domxml.dll DOM XML functions PHP <= 4.2.0 requires: libxml2.dll (bundled) PHP >= 4.3.0 requires: iconv.dll (bundled)
php_dotnet.dll .NET functions PHP <= 4.1.1
php_exif.dll EXIF functions php_mbstring.dll. And, php_exif.dll must be loaded after php_mbstring.dll in php.ini.
php_fbsql.dll FrontBase functions PHP <= 4.2.0
php_fdf.dll FDF: Forms Data Format functions. Requires: fdftk.dll (bundled)
php_filepro.dll filePro functions Read-only access
php_ftp.dll FTP functions Built-in since PHP 4.0.3
php_gd.dll GD library image functions Removed in PHP 4.3.2. Also note that truecolor functions are not available in GD1, instead, use php_gd2.dll.
php_gd2.dll GD library image functions GD2
php_gettext.dll Gettext functions PHP <= 4.2.0 requires gnu_gettext.dll (bundled), PHP >= 4.2.3 requires libintl-1.dll, iconv.dll (bundled).
php_hyperwave.dll HyperWave functions None
php_iconv.dll ICONV characterset conversion Requires: iconv-1.3.dll (bundled), PHP >=4.2.1 iconv.dll
php_ifx.dll Informix functions Requires: Informix libraries
php_iisfunc.dll IIS management functions None
php_imap.dll IMAP POP3 and NNTP functions None
php_ingres.dll Ingres functions Requires: Ingres libraries
php_interbase.dll InterBase functions Requires: gds32.dll (bundled)
php_java.dll Java functions PHP <= 4.0.6 requires: jvm.dll (bundled)
php_ldap.dll LDAP functions PHP <= 4.2.0 requires libsasl.dll (bundled), PHP >= 4.3.0 requires libeay32.dll, ssleay32.dll (bundled)
php_mbstring.dll Multi-Byte String functions None
php_mcrypt.dll Mcrypt Encryption functions Requires: libmcrypt.dll
php_mhash.dll Mhash functions PHP >= 4.3.0 requires: libmhash.dll (bundled)
php_mime_magic.dll Mimetype functions Requires: magic.mime (bundled)
php_ming.dll Ming functions for Flash None
php_msql.dll mSQL functions Requires: msql.dll (bundled)
php_mssql.dll MSSQL functions Requires: ntwdblib.dll (bundled)
php_mysql.dll MySQL functions PHP >= 5.0.0, requires libmysql.dll (bundled)
php_mysqli.dll MySQLi functions PHP >= 5.0.0, requires libmysql.dll (libmysqli.dll in PHP <= 5.0.2) (bundled)
php_oci8.dll Oracle 8 functions Requires: Oracle 8.1+ client libraries
php_openssl.dll OpenSSL functions Requires: libeay32.dll (bundled)
php_overload.dll Object overloading functions Built in since PHP 4.3.0
php_pdf.dll PDF functions None
php_pgsql.dll PostgreSQL functions None
php_printer.dll Printer functions None
php_shmop.dll Shared Memory functions None
php_snmp.dll SNMP get and walk functions NT only!
php_soap.dll SOAP functions PHP >= 5.0.0
php_sockets.dll Socket functions None
php_sybase_ct.dll Sybase functions Requires: Sybase client libraries
php_tidy.dll Tidy functions PHP >= 5.0.0
php_tokenizer.dll Tokenizer functions Built in since PHP 4.3.0
php_w32api.dll W32api functions None
php_xmlrpc.dll XML-RPC functions PHP >= 4.2.1 requires: iconv.dll (bundled)
php_xslt.dll XSLT functions PHP <= 4.2.0 requires sablot.dll, expat.dll (bundled). PHP >= 4.2.1 requires sablot.dll, expat.dll, iconv.dll (bundled).
php_yaz.dll YAZ functions Requires: yaz.dll (bundled)
php_zip.dll Zip File functions Read only access
php_zlib.dll ZLib compression functions Built in since PHP 4.3.0



Command Line PHP on Microsoft Windows

This section contains notes and hints specific to getting PHP running from the command line for Windows.

Hinweis: You should read the manual installation steps first!

Getting PHP to run from the command line can be performed without making any changes to Windows.

C:\PHP5\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3

But there are some easy steps that can be followed to make this simpler. Some of these steps should already have been taken, but are repeated here to be able to provide a complete step-by-step sequence.

  • Add the location of the PHP executable (php.exe, php-win.exe or php-cli.exe depending upon your PHP version and display preferences) to the PATH environment variable. Read more about how to add your PHP directory to PATH in the corresponding FAQ entry.

  • Add the .PHP extension to the PATHEXT environment variable. This can be done at the same time as amending the PATH environment variable. Follow the same steps as described in the FAQ but amend the PATHEXT environment variable rather than the PATH environment variable.

    Hinweis: The position in which you place the .PHP will determine which script or program is executed when there are matching filenames. For example, placing .PHP before .BAT will cause your script to run, rather than the batch file, if there is a batch file with the same name.

  • Associate the .PHP extension with a file type. This is done by running the following command:

    assoc .php=phpfile
    

  • Associate the phpfile file type with the appropriate PHP executable. This is done by running the following command:

    ftype phpfile="C:\PHP5\php.exe" -f "%1" -- %~2
    

Following these steps will allow PHP scripts to be run from any directory without the need to type the PHP executable or the .PHP extension and all parameters will be supplied to the script for processing.

The example below details some of the registry changes that can be made manually.

Beispiel #1 Registry changes

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php]
@="phpfile"
"Content Type"="application/php"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile]
@="PHP Script"
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
"AlwaysShowExt"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon]
@="C:\\PHP5\\php-win.exe0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell]
@="Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open]
@="&Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command]
@="\"C:\\PHP5\\php.exe\" -f \"%1\" -- %~2"

With these changes the same command can be written as:

"C:\PHP Scripts\script" -arg1 -arg2 -arg3
or, if your "C:\PHP Scripts" path is in the PATH environment variable:
script -arg1 -arg2 -arg3

Hinweis: There is a small problem if you intend to use this techique and use your PHP scripts as commandline filter, like the example below:

dir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3
or
dir | script -arg1 -arg2 -arg3
You may find that the script simply hangs and nothing is output. To get this operational, you need to make another registry change.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"InheritConsoleHandles"=dword:00000001
Further information regarding this issue can be found in this » Microsoft Knowledgebase Article : 321788.




Installation of PECL extensions

Inhaltsverzeichnis


Introduction to PECL Installations

» PECL is a repository of PHP extensions that are made available to you via the » PEAR packaging system. This section of the manual is intended to demonstrate how to obtain and install PECL extensions.

These instructions assume /your/phpsrcdir/ is the path to the PHP source distribution, and that extname is the name of the PECL extension. Adjust accordingly. These instructions also assume a familiarity with the » pear command. The information in the PEAR manual for the pear command also applies to the pecl command.

To be useful, a shared extension must be built, installed, and loaded. The methods described below provide you with various instructions on how to build and install the extensions, but they do not automatically load them. Extensions can be loaded by adding an extension directive. To this php.ini file, or through the use of the dl() function.

When building PHP modules, it's important to have known-good versions of the required tools (autoconf, automake, libtool, etc.) See the » Anonymous SVN Instructions for details on the required tools, and required versions.



Downloading PECL extensions

There are several options for downloading PECL extensions, such as:

  • The pecl install extname command downloads the extensions code automatically, so in this case there is no need for a separate download.
  • » http://pecl.php.net/ The PECL web site contains information about the different extensions that are offered by the PHP Development Team. The information available here includes: ChangeLog, release notes, requirements and other similar details.
  • pecl download extname PECL extensions that have releases listed on the PECL web site are available for download and installation using the » pecl command. Specific revisions may also be specified.
  • SVN Most PECL extensions also reside in SVN. A web-based view may be seen at » http://svn.php.net/viewvc/pecl/. To download straight from SVN, the following sequence of commands may be used:


    $ svn checkout http://svn.php.net/repository/pecl/extname/trunk extname

  • Windows downloads At this time the PHP project does not compile Windows binaries for PECL extensions. However, to compile PHP under Windows see the chapter titled building PHP for Windows.


Installing a PHP extension on Windows

On Windows, you have two ways to load a PHP extension: either compile it into PHP, or load the DLL. Loading a pre-compiled extension is the easiest and preferred way.

To load an extension, you need to have it available as a ".dll" file on your system. All the extensions are automatically and periodically compiled by the PHP Group (see next section for the download).

To compile an extension into PHP, please refer to building from source documentation.

To compile a standalone extension (aka a DLL file), please refer to building from source documentation. If the DLL file is available neither with your PHP distribution nor in PECL, you may have to compile it before you can start using the extension.

Where to find an extension?

PHP extensions are usually called "php_*.dll" (where the star represents the name of the extension) and they are located under the "PHP\ext" ("PHP\extensions" in PHP4) folder.

PHP ships with the extensions most useful to the majority of developers. They are called "core" extensions.

However, if you need functionality not provided by any core extension, you may still be able to find one in PECL. The PHP Extension Community Library (PECL) is a repository for PHP Extensions, providing a directory of all known extensions and hosting facilities for downloading and development of PHP extensions.

If you have developed an extension for your own uses, you might want to think about hosting it on PECL so that others with the same needs can benefit from your time. A nice side effect is that you give them a good chance to give you feedback, (hopefully) thanks, bug reports and even fixes/patches. Before you submit your extension for hosting on PECL, please read http://pecl.php.net/package-new.php.

Which extension to download?

Many times, you will find several versions of each DLL:

  • Different version numbers (at least the first two numbers should match)
  • Different thread safety settings
  • Different processor architecture (x86, x64, ...)
  • Different debugging settings
  • etc.

You should keep in mind that your extension settings should match all the settings of the PHP executable you are using. The following PHP script will tell you all about your PHP settings:

Beispiel #1 phpinfo() call

<?php
phpinfo
();
?>

Or from the command line, run:

drive:\\path\to\php\executable\php.exe -i

Loading an extension

The most common way to load a PHP extension is to include it in your php.ini configuration file. Please note that many extensions are already present in your php.ini and that you only need to remove the semicolon to activate them.

;extension=php_extname.dll
extension=php_extname.dll

However, some web servers are confusing because they do not use the php.ini located alongside your PHP executable. To find out where your actual php.ini resides, look for its path in phpinfo():

Configuration File (php.ini) Path  C:\WINDOWS
Loaded Configuration File   C:\Program Files\PHP\5.2\php.ini

After activating an extension, save php.ini, restart the web server and check phpinfo() again. The new extension should now have its own section.

Resolving problems

If the extension does not appear in phpinfo(), you should check your logs to learn where the problem comes from.

If you are using PHP from the command line (CLI), the extension loading error can be read directly on screen.

If you are using PHP with a web server, the location and format of the logs vary depending on your software. Please read your web server documentation to locate the logs, as it does not have anything to do with PHP itself.

Common problems are the location of the DLL, the value of the " extension_dir" setting inside php.ini and compile-time setting mismatches.

If the problem lies in a compile-time setting mismatch, you probably didn't download the right DLL. Try downloading again the extension with the right settings. Again, phpinfo() can be of great help.



Compiling shared PECL extensions with the pecl command

PECL makes it easy to create shared PHP extensions. Using the » pecl command, do the following:


$ pecl install extname

This will download the source for extname, compile, and install extname.so into your extension_dir. extname.so may then be loaded via php.ini

By default, the pecl command will not install packages that are marked with the alpha or beta state. If no stable packages are available, you may install a beta package using the following command:


$ pecl install extname-beta

You may also install a specific version using this variant:


$ pecl install extname-0.1

Hinweis: After enabling the extension in php.ini, restarting the web service is required for the changes to be picked up.



Compiling shared PECL extensions with phpize

Sometimes, using the pecl installer is not an option. This could be because you're behind a firewall, or it could be because the extension you want to install is not available as a PECL compatible package, such as unreleased extensions from SVN. If you need to build such an extension, you can use the lower-level build tools to perform the build manually.

The phpize command is used to prepare the build environment for a PHP extension. In the following sample, the sources for an extension are in a directory named extname:

$ cd extname
$ phpize
$ ./configure
$ make
# make install

A successful install will have created extname.so and put it into the PHP extensions directory. You'll need to and adjust php.ini and add an extension=extname.so line before you can use the extension.

If the system is missing the phpize command, and precompiled packages (like RPM's) are used, be sure to also install the appropriate devel version of the PHP package as they often include the phpize command along with the appropriate header files to build PHP and its extensions.

Execute phpize --helpto display additional usage information.



Compiling PECL extensions statically into PHP

You might find that you need to build a PECL extension statically into your PHP binary. To do this, you'll need to place the extension source under the php-src/ext/ directory and tell the PHP build system to regenerate its configure script.

$ cd /your/phpsrcdir/ext
$ pecl download extname
$ gzip -d < extname.tgz | tar -xvf -
$ mv extname-x.x.x extname

This will result in the following directory:


/your/phpsrcdir/ext/extname

From here, force PHP to rebuild the configure script, and then build PHP as normal:


$ cd /your/phpsrcdir
$ rm configure
$ ./buildconf --force
$ ./configure --help
$ ./configure --with-extname --enable-someotherext --with-foobar
$ make
$ make install

Hinweis: To run the 'buildconf' script you need autoconf 2.13 and automake 1.4+ (newer versions of autoconf may work, but are not supported).

Whether --enable-extname or --with-extname is used depends on the extension. Typically an extension that does not require external libraries uses --enable. To be sure, run the following after buildconf:


$ ./configure --help | grep extname




Problems?

Inhaltsverzeichnis


Read the FAQ

Some problems are more common than others. The most common ones are listed in the PHP FAQ, part of this manual.



Other problems

If you are still stuck, someone on the PHP installation mailing list may be able to help you. You should check out the archive first, in case someone already answered someone else who had the same problem as you. The archives are available from the support page on » http://www.php.net/support.php. To subscribe to the PHP installation mailing list, send an empty mail to » php-install-subscribe@lists.php.net. The mailing list address is » php-install@lists.php.net.

If you want to get help on the mailing list, please try to be precise and give the necessary details about your environment (which operating system, what PHP version, what web server, if you are running PHP as CGI or a server module, Safe Mode, etc.), and preferably enough code to make others able to reproduce and test your problem.



Bug reports

If you think you have found a bug in PHP, please report it. The PHP developers probably don't know about it, and unless you report it, chances are it won't be fixed. You can report bugs using the bug-tracking system at » http://bugs.php.net/. Please do not send bug reports in mailing list or personal letters. The bug system is also suitable to submit feature requests.

Read the » How to report a bug document before submitting any bug reports!




Laufzeiteinstellungen

Inhaltsverzeichnis


Die Konfigurationsdatei

Die Konfigurationsdatei wird beim Start von PHP eingelesen. Für die Servermodul-Versionen von PHP geschieht dies nur einmal beim Start des Webservers. Für die CGI- und CLI-Versionen geschieht dies bei jedem Aufruf.

Nach der php.ini wird an folgenden Orten in der angegebenen Reihenfolge gesucht:

  • Spezielle Orte für SAPI-Module (PHPIniDir-Direktive im Apache2, -c Kommandozeilenparameter in CGI in CLI, php_ini-Parameter in NSAPI, PHP_INI_PATH-Umgebungsvariable im THTTPD)

  • Die PHPRC-Umgebungsvariable. Vor PHP 5.2.0 wurde dies nach dem unten angegebenen Registrierungsschlüssel geprüft.

  • Seit PHP 5.3.0 kann die Position der php.ini-Datei für verschiedene Versionen von PHP gesetzt werden. Die folgenden Registrierungsschlüssel werden in der angegebenen Reihenfolge durchsucht: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] und [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], wobei x, y und z die Major-, Minor- und Release-Versionen von PHP darstellen. Falls ein Wert für IniFilePath in diesen Schlüsseln existiert, so wird der zuerst gefundene als Position der php.ini verwendet (nur unter Windows).

  • {HKEY_LOCAL_MACHINE\SOFTWARE\PHP}, Wert von IniFilePath (nur unter Windows)

  • Aktuelles Arbeitsverzeichnis (außer CLI)

  • Das Webserververzeichnis (für SAPI-Module) oder das PHP-Verzeichnis (andernfalls in Windows)

  • Windows-Verzeichnis (C:\windows oder C:\winnt) (unter Windows) oder die --with-config-file-path Kompilierungsoption

Falls die Datei php-SAPI.ini existiert (wobei SAPI die verwendete SAPI ist, was als Dateinamen z.B. php-cli.ini oder php-apache.ini ergibt), wird diese anstelle der php.ini verwendet. Der Name der SAPI kann durch php_sapi_name() ermittelt werden.

Hinweis: Der Apache-Webserver wechselt beim Start das Arbeitsverzeichnis in das Wurzelverzeichnis, weshalb PHP versucht, die php.ini aus dem Wurzelverzeichnis zu lesen, wenn diese existiert.

Die Optionen der php.ini für Extensions werden auf den Handbuchseiten der jeweiligen Extensions behandelt. Die Beschreibung der Core-php.ini-Einstellungen ist im Anhang verfügbar. Es werden jedoch wahrscheinlich nicht alle PHP-Direktiven im Handbuch erläutert. Für eine komplette Liste der in Ihrer PHP-Version verfügbaren Einstellungen lesen Sie bitte die gut kommentierte php.ini. Möglicherweise kann die » aktuellste php.ini aus unserem CVS ebenfalls hilfreich sein.

Beispiel #1 php.ini-Beispiel

; Jeder Text in einer Zeile nach einem Semikolon, welches nicht
; in Anführungszeichen steht, wird ignoriert
[php] ; Abschnittsmarkierungen (Text in eckigen Klammern) werden ebenfalls ignoriert
; Boolesche Werte können auf einen der folgenden Werte eingestellt werden:
;      true, on, yes
; oder false, off, no, none
register_globals = off
track_errors = yes

; Sie können Zeichenketten in Anführungszeichen einschließen
include_path = ".:/usr/local/lib/php"

; Backslashes werden wie alle anderen Zeichen behandelt
include_path = ".;c:\php\lib"

Seit PHP 5.1.0 ist es möglich, sich auf bereits definierte .ini-Variablen innerhalb der .ini-Dateien zu beziehen. Zum Beispiel: open_basedir = ${open_basedir}":/new/dir".



.user.ini-Dateien

Seit PHP 5.3.0 bietet PHP Unterstützung für INI-Dateien im .htaccess-Format auf Verzeichnisebene. Diese Dateien werden nur nur durch die CGI/FastCGI-SAPI verarbeitet. Durch diese Funktionalität wird die htscanner-PECL-Erweiterung obsolet. Falls Sie den Apache benutzen, sollten Sie daher .htaccess-Dateien benutzen.

Zusätzlich zur Haupt-php.ini-Datei sucht PHP auch nach INI-Dateien in Verzeichnissen, die oberhalb des Verzeichnisses der gerade angeforderten PHP-Datei liegen - bis hin zum aktuellen "document root" (wie in $_SERVER['DOCUMENT_ROOT'] konfiguriert). Nur INI-Einstellungen mit den Modi PHP_INI_PERDIR und PHP_INI_USER werden als .user.ini-INI-Dateien erkannt.

Zwei neue INI-Direktiven, user_ini.filename und user_ini.cache_ttl, steuern die Nutzung der Benutzer-INI-Dateien.

user_ini.filename setzt den Namen der Datei, die von PHP in jedem Verzeichnis gesucht wird; falls dies auf eine leere Zeichenkette gesetzt wird, sucht PHP nach keiner Datei. Der Standardwert ist .user.ini.

user_ini.cache_ttl steuert, wie oft die Benutzer-INI-Dateien neu eingelesen werden. Der Standardwert beträgt 300 Sekunden (5 Minuten).



Wo Konfigurationseinstellungen gesetzt werden können

Diese Modi bestimmen wann und wo eine PHP-Direktive gesetzt oder nicht gesetzt werden kann. Jede Direktive im Handbuch verweist auf einen dieser Modi. Zum Beispiel können einige Einstellungen in einem PHP-Skript mittels ini_set() gesetzt werden, während andere nur über die php.ini oder httpd.conf gesetzt werden können.

Ein Beispiel ist die output_buffering-Einstellung. Wegen PHP_INI_PERDIR kann sie nicht mittels ini_set() gesetzt werden. Die display_errors-Einstellung hingegegen kann wegen PHP_INI_ALL überall gesetzt werden, also auch mittels ini_set().

Definition der PHP_INI_*-Modi
Modus Bedeutung
PHP_INI_USER Eintrag kann in Benutzerskripten (z.B. mittels ini_set()) oder in der Windows-Registry gesetzt werden
PHP_INI_PERDIR Eintrag kann in der php.ini, .htaccess oder httpd.conf gesetzt werden
PHP_INI_SYSTEM Eintrag kann in der php.ini oder httpd.conf gesetzt werden
PHP_INI_ALL Eintrag kann überall gesetzt werden



Wie man Konfigurationseinstellungen ändert

PHP läuft als Apachemodul

Wenn man PHP als Apachemodul verwendet, kann man die Konfigurationseinstellungen mittels Direktiven in den Apache-Konfigurationsdateien (z.B. httpd.conf) und .htaccess-Dateien ändern. Dafür benötigt man "AllowOverride Options"- oder "AllowOverride All"-Privilegien.

Es gibt verschiedene Apachedirektiven, die es erlauben, die PHP-Konfiguration aus den Apache-Konfigurationsdateien heraus zu ändern. Für eine Liste von Direktiven, die als PHP_INI_ALL, PHP_INI_PERDIR, oder PHP_INI_SYSTEM definiert sind, werfen Sie einen Blick auf den Anhang Liste von php.ini Einstellungen.

php_value Name Wert

Setzt den Wert der angegebenen Direktive. Kann nur für Direktiven mit den Typen PHP_INI_ALL und PHP_INI_PERDIR verwendet werden. Um einen vorher gesetzten Wert zu löschen, verwenden Sie none als Wert.

Hinweis: Verwenden Sie php_value nicht, um boolesche Werte zu setzen. php_flag (siehe unten) sollte stattdessen verwendet werden.

php_flag Name on|off

Setzt eine boolesche Konfigurationsdirektive. Kann nur für Direktiven mit den Typen PHP_INI_ALL und PHP_INI_PERDIR verwendet werden.

php_admin_value Name Walue

Setzt den Wert der angegebenen Direktive. Dies kann nicht in .htaccess-Dateien verwendet werden. Jeder Direktiventyp, der mit php_admin_value gesetzt wird, kann nicht durch .htaccess-Direktiven oder mit ini_set() überschrieben werden. Um einen vorher gesetzten Wert zu löschen, verwenden Sie none als Wert.

php_admin_flag Name on|off

Setzt eine boolesche Konfigurationsdirektive. Dies kann nicht in .htaccess-Dateien verwendet werden. Jeder Direktiventyp, der mit php_admin_value gesetzt wird, kann nicht durch .htaccess-Direktiven überschrieben werden. Used to set a boolean configuration directive.

Beispiel #1 Apache-Konfigurationsbeispiel

<IfModule mod_php5.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag safe_mode on
</IfModule>
<IfModule mod_php4.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag safe_mode on
</IfModule>

Achtung

PHP-Konstanten existieren nicht außerhalb von PHP. So kann man z.B. in der httpd.conf nicht PHP-Konstanten wie E_ALL oder E_NOTICE verwenden, um den Wert der error_reporting-Direktive zu ändern, da diese keine Bedeutung haben und als 0 ausgewertet werden. Verwenden Sie stattdessen die zugehörigen Bitmasken-Werte direkt. Diese Konstanten können in der php.ini verwendet werden.

Die PHP-Konfiguration mit der Windows Registry ändern

Wenn Sie PHP unter Windows einsetzen, können Sie die Konfigurationseinstellungen für jedes einzelne Verzeichnis mit der Windows-Registry anpassen. Die Werte der Konfiguration werden unterhalb des Registrierungsschlüssels HKLM\SOFTWARE\PHP\Per Directory Values in den zum Verzeichnisnamen passenden Unterschlüssel gespeichert.Zum Beispiel würden Werte für das Verzeichnis c:\inetpub\wwwroot im Registrierungsschlüssel HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot gespeichert werden. Die Einstellungen für dieses Verzeichnis wären für alle Skripte aktiv, die in diesem Verzeichnis oder einem seiner Unterverzeichnisse laufen. Die Werte in diesem Schlüssel sollten den Namen eine PHP- Konfigurationsdirektive und einen Zeichenkettenwert haben. Konstenten in den Werten werden nicht ausgewertet. Es können jedoch nur Werte, die in PHP_INI_USER änderbar sind, auf diese Weise gesetzt werden, nicht als PHP_INI_PERDIR deklarierte Werte.

Andere Zugänge zu PHP

Egal wie Sie PHP betreiben, Sie können bestimmte Werte zur Laufzeit Ihrer Skripte mittels ini_set() setzen. Werfen Sie dazu einen Blick auf die Dokumentation von ini_set().

Wenn Sie an einer kompletten Liste von Konfigurationseinstellungen Ihres Systems inklusive deren aktuellen Werten interessiert sind, können Sie die Funktion phpinfo() ausführen und die daraus resultierende Seite betrachten. Sie können auf die Werte einzelner Konfigurationsdirektiven zur Laufzeit mittels ini_get() oder get_cfg_var() zugreifen.





Sprachreferenz


Grundlagen der Syntax

Inhaltsverzeichnis


Den HTML-Bereich der Datei verlassen

Wenn PHP eine Datei parst, sucht es nach öffnenden und schließenden Tags, die PHP anweisen, den dazwischen befindlichen Code zu interpretieren. Das Parsen auf diese Art erlaubt Ihnen, PHP in allen möglichen Arten von unterschiedlichen Dokumenten einzubinden, da alles außerhalb des Paars aus öffnendem und schließendem Tag vom Parser ignoriert wird. In den meisten Fällen werden Sie wie im folgenden Beispiel PHP in HTML-Dokumente eingebettet finden.

<p>Das hier wird ignoriert werden.</p>
<?php echo 'Wohingegen das hier geparst werden wird.'?>
<p>Dies wird ebenfalls ignoriert.</p>

Sie können aber auch komplexere Strukturen verwenden:

Beispiel #1 Fortgeschrittenes Erweitern

<?php
if ($ausdruck) {
    
?>
    <strong>Dies ist wahr.</strong>
    <?php
} else {
    
?>
    <strong>Dies ist falsch.</strong>
    <?php
}
?>

Dies arbeitet wie erwartet, da PHP, wenn es auf ein schließendes >?-Tag trifft, einfach beginnt, alles folgende auszugeben, bis es wieder auf einen öffnenden Tag stößt (mit Ausnahme eines direkt folgenden Newline-Zeichens - siehe auch Abschnitt Abgrenzung von Anweisungen). Das hier angegebene Beispiel ist natürlich nur ausgedacht, aber für die Ausgabe von großen Textblöcken ist der Ausstieg aus dem Parse-Modus generell effizienter, als den gesamten Text durch echo() oder print() zu jagen.

Es gibt vier unterschiedliche Paare öffnender und schließender Tags, die in PHP verwendet werden können. Zwei davon, <?php ?> und <script language="php"> </script>, sind immer verfügbar. Die anderen beiden sind Short-Tags und ASP-Tags, die über das php.ini-Konfigurationsfile ein- und ausgeschaltet werden können. Das bedeutet, wenn einige Leute Short-Tags und ASP-Tags bequem finden, sind die daraus resultierenden Skripte nicht überall einsetzbar, so dass diese Tags grundsätzlich nicht empfehlenswert sind.

Hinweis: Beachten Sie auch, dass Sie, wenn Sie PHP in XML oder XHTML einbinden wollen, die <?php ?>-Tags verwenden müssen, um keine Parserfehler aufgrund vermischter Standards zu provozieren.

Beispiel #2 Die öffnenden und schließenden Tags von PHP

1.  <?php echo
      
'wenn Sie XHTML- oder XML-Dokumente ausliefern wollen, machen Sie es so'?>

2.  <script language="php">
        
echo 'manche Editoren(wie FrontPage) moegen
              keine Verarbeitungsanweisungen'
;
    
</script>

3.  <? echo 'das ist das Einfachste, eine SGML-Verarbeitungsanweisung'?>

4.  <% echo 'Optional koennen Sie auch Tags im ASP-Stil verwenden'; %>
    <%= $variable; # Das ist ein Abkuerzung fuer "<% echo . . ." %>

Während die Tags in Beispiel eins und zwei jederzeit verfügbar sind, ist Beispiel eins das meist verwendete und grundsätzlich empfohlene von beiden.

Short-Tags (Beispiel drei) sind nur verfügbar, wenn sie via short_open_tag-Direktive im php.ini-Konfigurationsfile eingeschaltet wurden, oder wenn PHP mit --enable-short-tags konfiguriert wurde.

ASP-Tags (Beispiel vier) sind nur verfügbar, wenn sie mittels der asp_tags-Direktive im php.ini Konfigurationsfile eingeschaltet wurden.

Hinweis: Die Verwendung der Short-Tags sollten Sie vermeiden, wenn Sie Applikationen oder Bibliotheken entwickeln, die für die Weitergabe oder den Einsatz auf nicht Ihrer Kontrolle unterstehenden PHP-Servern bestimmt sind, da es sein kann, dass Short-Tags auf dem Zielsystem nicht unterstützt werden. Um portablen, weiterverteilbaren Code zu haben, verwenden Sie keine Short-Tags.



Abgrenzung von Anweisungen

Wie in C oder Perl verlangt PHP, dass Anweisungen am Ende jedes Statements mit einem Semikolon beendet werden. Der schließende Tag eines Blocks mit PHP-Code impliziert automatisch ein Semikolon, Sie brauchen daher kein abschließendes Semikolon in der letzten Zeile des PHP-Blocks zu setzen. Der schließende Tag für den Block fügt das direkt nachfolgende Zeilenumbruch-Zeichen ein, wenn es vorhanden ist.

<?php
    
echo 'Dies ist ein Test';
?>

<?php echo 'Dies ist ein Test' ?>

<?php echo 'Wir ließen den letzen schließenden Tag weg';

Hinweis: Der schließende Tag eines PHP-Blocks am Ende einer Datei ist optional, und in einigen Fällen ist das Weglassen hilfreich, wenn Sie include() oder require() verwenden, so dass ungewollte Whitespaces nicht am Ende einer Datei auftreten und Sie noch im Stande sind, später weitere Header an die Response hinzuzufügen. Es ist ebenfalls praktisch, wenn Sie Output Buffering verwenden und keine ungewollten Whitespaces am Ende eines durch die eingebundenen Dateien erzeugten Parts sehen wollen.



Kommentare

PHP unterstützt 'C', 'C++' und Unix-Shell-artige (Perl-artige) Kommentare. Zum Beispiel:

<?php
    
echo "Dies ist ein Test"// Dies ist ein einzeiliger Kommentar im C++-Stil
    /* Dies ist ein mehrzeiliger Kommentar
       noch eine weitere Kommentar-Zeile */
    
echo 'Dies ist noch ein Test';
    echo 
'... und ein letzter Test'# Dies ist ein einzeiliger Shell-Kommentar
?>

Die "einzeiligen" Kommentar-Arten kommentieren sämtlichen Text bis zum Zeilenende oder bis zum Ende des aktuellen PHP-Blocks aus, je nachdem, was zuerst eintritt. Das bedeutet, das HTML-Code nach // ..?> oder # ... ?> ausgegeben WIRD: ?> beendet den PHP-Modus und kehrt in den HTML-Modus zurück, so dass sich // oder # nicht nicht darauf auswirkt. Wenn die asp_tags Konfigurations-Direktive eingeschaltet ist, verhält es sich genauso bei // %> und # %>. Jedoch beendet das </script>-Tag den PHP-Modus innerhalb eines einzeiligen Kommentars nicht.

<h1>Dies ist ein  <?php # echo 'einfaches';?> Beispiel.</h1>
<p>Obige Überschrift wird lauten: 'Dies ist ein Beispiel.'.

'C'-artige Kommentare enden am ersten Vorkommen von */. Achten Sie daher darauf, 'C'-artige Kommentare nicht zu verschachteln. Dieser Fehler entsteht leicht, wenn Sie längere Code-Blöcke auskommentieren.

<?php
/*
   echo 'Dies ist ein Test'; /* Dieser Kommentar wird ein Problem verursachen. */
*/
?>




Typen

Inhaltsverzeichnis


Einführung

PHP unterstützt acht primitive Typen.

Vier skalare Typen:

Zwei zusammengesetzte Typen:

Und zuletzt zwei spezielle Typen:

Für die bessere Lesbarkeit führt dieses Handbuch ein paar Pseudo-Typen ein:

Sowie die Pseudovariable $... .

Sie werden auch ein paar Hinweise auf den Typ "Double" finden. Betrachten Sie Double als dasselbe wie Float. Die beiden Bezeichnungen existieren nur aus historischen Gründen.

Der Typ einer Variablen wird normalerweise nicht vom Programmierer bestimmt. Zur Laufzeit von PHP wird entschieden, welchen Typs eine Variable ist. Dies ist abhängig vom Zusammenhang, in dem die Variable benutzt wird.

Hinweis: Um den Typ und den Wert eines bestimmten Ausdrucks (Expression) zu überprüfen, können Sie var_dump() benutzen. Wenn Sie zur Fehlersuche einfach nur eine lesbare Darstellung eines Typs benötigen, benutzen Sie gettype(). Um auf einen bestimmten Typ zu prüfen, sollten Sie nicht gettype() benutzen. Stattdessen sollten Sie die is_type Funktionen verwenden. Ein paar Beispiele:

<?php
$a_bool 
TRUE;   // ein Boolean (Wahrheitswert)
$a_str  "foo";  // eine Zeichenkette (String)
$a_str2 'foo';  // eine Zeichenkette (String)
$an_int 12;     // ein Integer (Ganzzahl)

echo gettype($a_bool); // gibt aus:  boolean
echo gettype($a_str);  // gibt aus:  string


// Falls es ein Integer ist, erhöhe ihn um vier
if (is_int($an_int)) {
    
$an_int += 4;
}

// Falls $bool ein String ist, gib ihn aus
// (gibt überhaupt nichts aus)
if (is_string($a_bool)) {
    echo 
"String: $a_bool";
}
?>

Wenn sie die Umwandlung in einen bestimmten Variablen-Typ erzwingen wollen, erreichen Sie dies entweder durch Typ-Umwandlung (Cast) oder durch Gebrauch der Funktion settype().

Beachten Sie, dass eine Variable abhängig vom Typ, dem die Variable zu dem Zeitpunkt entspricht, in bestimmten Situationen unterschiedlich ausgewertet werden kann. Weitere Informationen entnehmen Sie dem Abschnitt zur Typ-Veränderung (Type Juggling). Schauen Sie sich außerdem Die PHP Typ-Vergleichstabellen an, wenn Sie an Beispielen verschiedener typenbezogener Vergleiche interessiert sind.



Booleans

Dies ist der einfachste Typ. Ein boolean Ausdruck ist ein Wahrheitswert der entweder TRUE (wahr) oder FALSE (falsch) sein kann.

Hinweis: Der boolean Typ wurde in PHP 4 eingeführt.

Syntax

Ein boolean Wert wird über die Schlüsselworte TRUE und FALSE spezifiziert, Groß- und Kleinschreibung ist dabei nicht von Bedeutung.

<?php
$foo 
True// weist $foo den Wert TRUE zu
?>

Normalerweise wird ein boolean von einem Operator zurückgegeben und an eine Kontrollstruktur weitergegeben.

<?php
// == ist ein Operator der auf Gleichheit prüft
// und ein boolean Ergebnis zurückgibt
if ($action == "show_version") {
    echo 
"Die Version ist 1.23";
}

// die Angabe von '== TRUE' ist hier nicht nötig
if ($show_separators == TRUE) {
    echo 
"<hr>\n";
}

// ... stattdessen funktioniert auch einfach das folgende:
if ($show_separators) {
    echo 
"<hr>\n";
}
?>

Converting to boolean

To explicitly convert a value to boolean, use the (bool) or (boolean) casts. However, in most cases the cast is unncecessary, since a value will be automatically converted if an operator, function or control structure requires a boolean argument.

Siehe auch Typumwandlungen.

Bei der Konvertierung zum Typ boolean gelten die folgenden Werte als FALSE:

  • boolean FALSE selbst
  • integer 0 (zero)
  • float 0.0 (zero)
  • Der leere string, und der string "0"
  • Ein array ohne Elemente
  • Ein object ohne Eigenschaftsvariablen (nur PHP 4)
  • Der spezielle Typ NULL (inklusive nicht gesetzter Variablen)
  • SimpleXML Objekte die aus leeren Tags erzeugt wurden.

Jeder andere Wert wird als TRUE angenommen (inklusive jeglicher resource Werte).

Warnung

-1 gilt als TRUE wie jeder andere Integerwert ungleich 0 (egal ob positiv oder negativ)!

<?php
var_dump
((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>


Integers

An integer is a number of the set Z = {..., -2, -1, 0, 1, 2, ...}.

See also:

Syntax

Integers can be specified in decimal (base 10), hexadecimal (base 16), or octal (base 8) notation, optionally preceded by a sign (- or +).

To use octal notation, precede the number with a 0 (zero). To use hexadecimal notation precede the number with 0x.

Beispiel #1 Integer literals

<?php
$a 
1234// decimal number
$a = -123// a negative number
$a 0123// octal number (equivalent to 83 decimal)
$a 0x1A// hexadecimal number (equivalent to 26 decimal)
?>

Formally, the structure for integer literals is:

decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal

The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.

Warnung

If an invalid digit is given in an octal integer (i.e. 8 or 9), the rest of the number is ignored.

Beispiel #2 Octal weirdness

<?php
var_dump
(01090); // 010 octal = 8 decimal
?>

Integer overflow

If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, an operation which results in a number beyond the bounds of the integer type will return a float instead.

<?php
$large_number 
=  2147483647;
var_dump($large_number);
// output: int(2147483647)

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)

// it's true also for hexadecimal specified integers between 2^31 and 2^32-1:
var_dump0xffffffff );
// output: float(4294967295)

// this doesn't go for hexadecimal specified integers above 2^32-1:
var_dump0x100000000 );
// output: int(2147483647)

$million 1000000;
$large_number =  50000 $million;
var_dump($large_number);
// output: float(50000000000)
?>
Warnung

Unfortunately, there was a bug in PHP which caused this to not always work correctly when negative numbers were involved. For example, the result of -50000 * $million is -429496728. However, when both operands were positive, there was no problem.

This was fixed in PHP 4.1.0.

There is no integer division operator in PHP. 1/2 yields the float 0.5. The value can be casted to an integer to round it downwards, or the round() function provides finer control over rounding.

<?php
var_dump
(25/7);         // float(3.5714285714286) 
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4) 
?>

Converting to integer

To explicitly convert a value to integer, use either the (int) or (integer) casts. However, in most cases the cast is not needed, since a value will be automatically converted if an operator, function or control structure requires an integer argument. A value can also be converted to integer with the intval() function.

See also: type-juggling.

From booleans

FALSE will yield 0 (zero), and TRUE will yield 1 (one).

From floating point numbers

When converting from float to integer, the number will be rounded towards zero.

If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), the result is undefined, since the float doesn't have enough precision to give an exact integer result. No warning, not even a notice will be issued when this happens!

Warnung

Never cast an unknown fraction to integer, as this can sometimes lead to unexpected results.

<?php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>

See also the warning about float precision.

From strings

See String conversion to numbers

From other types

Achtung

The behaviour of converting to integer is undefined for other types. Do not rely on any observed behaviour, as it can change without notice.



Fließkommazahlen

Fließkommazahlen (auch bekannt als "floats", "doubles" oder "real numbers") können in jeder der folgenden Syntaxformen angegeben werden:

<?php
$a 
1.234
$b 1.2e3
$c 7E-10;
?>

Formell:

LNUM          [0-9]+
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})

Der Wertebereich für Fließkommawertes ist platformabhängig, alderdings ist ein maximaler Wert von ca. 1.8e308 mit einer Genauigkeit von ca. 14 Nachkommastellen (entsprechend dem 64bit IEEE-Format) üblich.

Warnung

Fließkommagenauigkeit

Es ist typisch das einfache Dezimalbrüche wie 0.1 oder 0.7 nicht ohne kleine Ungenauigkeiten in ihr internes binäres Gegenstück umgewandelt werden können. Dies kann zu verwirrenden Ergebnissen führen, so ergibt floor((0.1+0.7)*10) in der Regel 7 an Stelle der der erwarteten 8 da die interne Repräsentation eher bei 7.9 liegt.

Dies liegt daran das es unmöglich ist bestimmte Werte mit einer endlichen Anzahl von Nachkommenstellen darzustellen. So wird zum Beispiel 1/3 im Dezimalsystem 0.3.

Sie sollten daher Fließkommawerten nicht bis auf die letzte Nachkommastelle trauen und vor allem niemals Fließkommawerte auf exakte Gleichheit prüfen. Wenn Sie höhere Genauigkeit benötigen können Sie die Mathematikfunktionen für beliebige Genauigkeit oder die gmp-Funktionen nutzen.

Umwandlung in Fließkommawerte

Informationen zur Umwandlung von Strings in float finden Sie im Abschnitt Umwandlung von Zeichenketten in Zahlen. Andere Datentypen werden zunächst in einen integer-Wert umgewandelt und von da aus weiter in einen Fließkommawert. Mehr Informationen hierzu finden Sie im Abschnitt Umwandlung in Integerwerte. Beginnend mit PHP 5 wird bei der Umwandlung eines Objects in float eine Hinweismeldung geworfen.



Strings

A string is series of characters. Before PHP 6, a character is the same as a byte. That is, there are exactly 256 different characters possible. This also implies that PHP has no native support of Unicode. See utf8_encode() and utf8_decode() for some basic Unicode functionality.

Hinweis: It is no problem for a string to become very large. PHP imposes no boundary on the size of a string; the only limit is the available memory of the computer on which PHP is running.

Syntax

A string literal can be specified in four different ways:

Single quoted

The simplest way to specify a string is to enclose it in single quotes (the character ').

To specify a literal single quote, escape it with a backslash (\). To specify a literal backslash before a single quote, or at the end of the string, double it (\\). Note that attempting to escape any other character will print the backslash too.

Hinweis: Unlike the two other syntaxes, variables and escape sequences for special characters will not be expanded when they occur in single quoted strings.

<?php
echo 'this is a simple string';

echo 
'You can also have embedded newlines in 
strings this way as it is
okay to do'
;

// Outputs: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';

// Outputs: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';

// Outputs: You deleted C:\*.*?
echo 'You deleted C:\*.*?';

// Outputs: This will not expand: \n a newline
echo 'This will not expand: \n a newline';

// Outputs: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>

Double quoted

If the string is enclosed in double-quotes ("), PHP will interpret more escape sequences for special characters:

Escaped characters
Sequence Meaning
\n linefeed (LF or 0x0A (10) in ASCII)
\r carriage return (CR or 0x0D (13) in ASCII)
\t horizontal tab (HT or 0x09 (9) in ASCII)
\v vertical tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5)
\f form feed (FF or 0x0C (12) in ASCII) (since PHP 5.2.5)
\\ backslash
\$ dollar sign
\" double-quote
\[0-7]{1,3} the sequence of characters matching the regular expression is a character in octal notation
\x[0-9A-Fa-f]{1,2} the sequence of characters matching the regular expression is a character in hexadecimal notation

As in single quoted strings, escaping any other character will result in the backslash being printed too. Before PHP 5.1.1, the backslash in \{$var} was not been printed.

The most important feature of double-quoted strings is the fact that variable names will be expanded. See string parsing for details.

Heredoc

A third way to delimit strings is the heredoc syntax: <<<. After this operator, an identifier is provided, then a newline. The string itself follows, and then the same identifier again to close the quotation.

The closing identifier must begin in the first column of the line. Also, the identifier must follow the same naming rules as any other label in PHP: it must contain only alphanumeric characters and underscores, and must start with a non-digit character or underscore.

Warnung

It is very important to note that the line with the closing identifier must contain no other characters, except possibly a semicolon (;). That means especially that the identifier may not be indented, and there may not be any spaces or tabs before or after the semicolon. It's also important to realize that the first character before the closing identifier must be a newline as defined by the local operating system. This is \n on UNIX systems, including Mac OS X. The closing delimiter (possibly followed by a semicolon) must also be followed by a newline.

If this rule is broken and the closing identifier is not "clean", it will not be considered a closing identifier, and PHP will continue looking for one. If a proper closing identifier is not found before the end of the current file, a parse error will result at the last line.

Heredocs can not be used for initializing class members. Use nowdocs instead.

Beispiel #1 Invalid example

<?php
class foo {
    public 
$bar = <<<EOT
bar
EOT;
}
?>

Heredoc text behaves just like a double-quoted string, without the double quotes. This means that quotes in a heredoc do not need to be escaped, but the escape codes listed above can still be used. Variables are expanded, but the same care must be taken when expressing complex variables inside a heredoc as with strings.

Beispiel #2 Heredoc string quoting example

<?php
$str 
= <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

/* More complex example, with variables. */
class foo
{
    var 
$foo;
    var 
$bar;

    function 
foo()
    {
        
$this->foo 'Foo';
        
$this->bar = array('Bar1''Bar2''Bar3');
    }
}

$foo = new foo();
$name 'MyName';

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some 
{$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

My name is "MyName". I am printing some foo.
Now I am printing some Bar2.
This should print a capital 'A': \x41

Hinweis: Heredoc support was added in PHP 4.

Nowdoc

Nowdocs are to single-quoted strings what heredocs are to double-quoted strings. A nowdoc is specified similarly to a heredoc, but no parsing is done inside a nowdoc. The construct is ideal for embedding PHP code or other large blocks of text without the need for escaping. It shares some features in common with the SGML &lt;![CDATA[ ]]&gt; construct, in that it declares a block of text which is not for parsing.

A nowdoc is identified with the same <<< seqeuence used for heredocs, but the identifier which follows is enclosed in single quotes, e.g. <<<'EOT'. All the rules for heredoc identifiers also apply to nowdoc identifiers, especially those regarding the appearance of the closing identifier.

Beispiel #3 Nowdoc string quoting example

<?php
$str 
= <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;

/* More complex example, with variables. */
class foo
{
    var 
$foo;
    var 
$bar;

    function 
foo()
    {
        
$this->foo 'Foo';
        
$this->bar = array('Bar1''Bar2''Bar3');
    }
}

$foo = new foo();
$name 'MyName';

echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
EOT;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41

Hinweis: Unlike heredocs, nowdocs can be used in any static data context. The typical example is initializing class members or constants:

Beispiel #4 Static data example

<?php
class foo {
    public 
$bar = <<<'EOT'
bar
EOT;
}
?>

Hinweis: Nowdoc support was added in PHP 5.3.0.

Variable parsing

When a string is specified in double quotes or with heredoc, variables are parsed within it.

There are two types of syntax: a simple one and a complex one. The simple syntax is the most common and convenient. It provides a way to embed a variable, an array value, or an object property in a string with a minimum of effort.

The complex syntax was introduced in PHP 4, and can be recognised by the curly braces surrounding the expression.

Simple syntax

If a dollar sign ($) is encountered, the parser will greedily take as many tokens as possible to form a valid variable name. Enclose the variable name in curly braces to explicitly specify the end of the name.

<?php
$beer 
'Heineken';
echo 
"$beer's taste is great"// works; "'" is an invalid character for variable names
echo "He drank some $beers";   // won't work; 's' is a valid character for variable names
echo "He drank some ${beer}s"// works
echo "He drank some {$beer}s"// works
?>

Similarly, an array index or an object property can be parsed. With array indices, the closing square bracket (]) marks the end of the index. The same rules apply to object properties as to simple variables.

<?php
// These examples are specific to using arrays inside of strings.
// When outside of a string, always quote array string keys and do not use
// {braces}.

// Show all errors
error_reporting(E_ALL);

$fruits = array('strawberry' => 'red''banana' => 'yellow');

// Works, but note that this works differently outside a string
echo "A banana is $fruits[banana].";

// Works
echo "A banana is {$fruits['banana']}.";

// Works, but PHP looks for a constant named banana first, as described below.
echo "A banana is {$fruits[banana]}.";

// Won't work, use braces.  This results in a parse error.
echo "A banana is $fruits['banana'].";

// Works
echo "A banana is " $fruits['banana'] . ".";

// Works
echo "This square is $square->width meters broad.";

// Won't work. For a solution, see the complex syntax.
echo "This square is $square->width00 centimeters broad.";
?>

For anything more complex, you should use the complex syntax.

Complex (curly) syntax

This isn't called complex because the syntax is complex, but because it allows for the use of complex expressions.

In fact, any value in the namespace can be included in a string with this syntax. Simply write the expression the same way as it would appeared outside the string, and then wrap it in { and }. Since { can not be escaped, this syntax will only be recognised when the $ immediately follows the {. Use {\$ to get a literal {$. Some examples to make it clear:

<?php
// Show all errors
error_reporting(E_ALL);

$great 'fantastic';

// Won't work, outputs: This is { fantastic}
echo "This is { $great}";

// Works, outputs: This is fantastic
echo "This is {$great}";
echo 
"This is ${great}";

// Works
echo "This square is {$square->width}00 centimeters broad."

// Works
echo "This works: {$arr[4][3]}";

// This is wrong for the same reason as $foo[bar] is wrong  outside a string.
// In other words, it will still work, but only because PHP first looks for a
// constant named foo; an error of level E_NOTICE (undefined constant) will be
// thrown.
echo "This is wrong: {$arr[foo][3]}"

// Works. When using multi-dimensional arrays, always use braces around arrays
// when inside of strings
echo "This works: {$arr['foo'][3]}";

// Works.
echo "This works: " $arr['foo'][3];

echo 
"This works too: {$obj->values[3]->name}";

echo 
"This is the value of the var named $name{${$name}}";

echo 
"This is the value of the var named by the return value of getName(): {${getName()}}";

echo 
"This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";
?>

Hinweis: Functions and method calls inside {$} work since PHP 5.

String access and modification by character

Characters within strings may be accessed and modified by specifying the zero-based offset of the desired character after the string using square array brackets, as in $str[42]. Think of a string as an array of characters for this purpose.

Hinweis: Strings may also be accessed using braces, as in $str{42}, for the same purpose. However, this syntax is deprecated as of PHP 6. Use square brackets instead.

Beispiel #5 Some string examples

<?php
// Get the first character of a string
$str 'This is a test.';
$first $str[0];

// Get the third character of a string
$third $str[2];

// Get the last character of a string.
$str 'This is still a test.';
$last $str[strlen($str)-1]; 

// Modify the last character of a string
$str 'Look at the sea';
$str[strlen($str)-1] = 'e';

?>

Hinweis: Accessing variables of other types using [] or {} silently returns NULL.

Useful functions and operators

Strings may be concatenated using the '.' (dot) operator. Note that the '+' (addition) operator will not work for this. See String operators for more information.

There are a number of useful functions for string manipulation.

See the string functions section for general functions, and the regular expression functions or the Perl-compatible regular expression functions for advanced find & replace functionality.

There are also functions for URL strings, and functions to encrypt/decrypt strings (mcrypt and mhash).

Finally, see also the character type functions.

Converting to string

A value can be converted to a string using the (string) cast or the strval() function. String conversion is automatically done in the scope of an expression where a string is needed. This happens when using the echo() or print() functions, or when a variable is compared to a string. The sections on Types and Type Juggling will make the following clearer. See also the settype() function.

A boolean TRUE value is converted to the string "1". Boolean FALSE is converted to "" (the empty string). This allows conversion back and forth between boolean and string values.

An integer or float is converted to a string representing the number textually (including the exponent part for floats). Floating point numbers can be converted using exponential notation (4.1E+6).

Hinweis: The decimal point character is defined in the script's locale (category LC_NUMERIC). See the setlocale() function.

Arrays are always converted to the string "Array"; because of this, echo() and print() can not by themselves show the contents of an array. To view a single element, use a construction such as echo $arr['foo']. See below for tips on viewing the entire contents.

Objects in PHP 4 are always converted to the string "Object". To print the values of object members for debugging reasons, read the paragraphs below. To get an object's class name, use the get_class() function. As of PHP 5, the __toString method is used when applicable.

Resources are always converted to strings with the structure "Resource id #1", where 1 is the unique number assigned to the resource by PHP at runtime. Do not rely upon this structure; it is subject to change. To get a resource's type, use the get_resource_type() function.

NULL is always converted to an empty string.

As stated above, directly converting an array, object, or resource to a string does not provide any useful information about the value beyond its type. See the functions print_r() and var_dump() for more effective means of inspecting the contents of these types.

Most PHP values can also be converted to strings for permanent storage. This method is called serialization, and is performed by the serialize() function. If the PHP engine was built with WDDX support, PHP values can also be serialized as well-formed XML text.

String conversion to numbers

When a string is evaluated in a numeric context, the resulting value and type are determined as follows.

The string will be evaluated as a float if it contains any of the characters '.', 'e', or 'E'. Otherwise, it will be evaluated as an integer.

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.

<?php
$foo 
"10.5";                // $foo is float (11.5)
$foo "-1.3e3";              // $foo is float (-1299)
$foo "bob-1.3e3";           // $foo is integer (1)
$foo "bob3";                // $foo is integer (1)
$foo "10 Small Pigs";       // $foo is integer (11)
$foo "10.2 Little Piggies"// $foo is float (14.2)
$foo "10.0 pigs " 1;          // $foo is float (11)
$foo "10.0 pigs " 1.0;        // $foo is float (11)     
?>

For more information on this conversion, see the Unix manual page for strtod(3).

To test any of the examples in this section, cut and paste the examples and insert the following line to see what's going on:

<?php
echo "\$foo==$foo; type is " gettype ($foo) . "<br />\n";
?>

Do not expect to get the code of one character by converting it to integer, as is done in C. Use the ord() and chr() functions to convert between ASCII codes and characters.



Arrays

An array in PHP is actually an ordered map. A map is a type that associates values to keys. This type is optimized for several different uses; it can be treated as an array, list (vector), hash table (an implementation of a map), dictionary, collection, stack, queue, and probably more. As array values can be other arrays, trees and multidimensional arrays are also possible.

Explanation of those data structures is beyond the scope of this manual, but at least one example is provided for each of them. For more information, look towards the considerable literature that exists about this broad topic.

Syntax

Specifying with array()

An array can be created by the array() language construct. It takes as parameters any number of comma-separated key => value pairs.

array(  key =>  value
     , ...
     )
// key may only be an integer or string
// value may be any value of any type
<?php
$arr 
= array("foo" => "bar"12 => true);

echo 
$arr["foo"]; // bar
echo $arr[12];    // 1
?>

A key may be either an integer or a string. If a key is the standard representation of an integer, it will be interpreted as such (i.e. "8" will be interpreted as 8, while "08" will be interpreted as "08"). Floats in key are truncated to integer. The indexed and associative array types are the same type in PHP, which can both contain integer and string indices.

A value can be any PHP type.

<?php
$arr 
= array("somearray" => array(=> 513 => 9"a" => 42));

echo 
$arr["somearray"][6];    // 5
echo $arr["somearray"][13];   // 9
echo $arr["somearray"]["a"];  // 42
?>

If a key is not specified for a value, the maximum of the integer indices is taken and the new key will be that value plus 1. If a key that already has an assigned value is specified, that value will be overwritten.

<?php
// This array is the same as ...
array(=> 433256"b" => 12);

// ...this array
array(=> 43=> 32=> 56"b" => 12);
?>
Warnung

Before PHP 4.3.0, appending to an array in which the current maximum key was negative would create a new key as described above. Since PHP 4.3.0, the new key will be 0.

Using TRUE as key will evaluate to integer 1 as a key. Using FALSE as key will evaluate to integer 0 as a key. Using NULL as a key will evaluate to the empty string. Using the empty string as a key will create (or overwrite) a key with the empty string and its value; it is not the same as using empty brackets.

Arrays and objects can not be used as keys. Doing so will result in a warning: Illegal offset type.

Creating/modifying with square bracket syntax

An existing array can be modified by explicitly setting values in it.

This is done by assigning values to the array, specifying the key in brackets. The key can also be omitted, resulting in an empty pair of brackets ([]).

$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value of any type

If $arr doesn't exist yet, it will be created, so this is also an alternative way to create an array. To change a certain value, assign a new value to that element using its key. To remove a key/value pair, call the unset() function on it.

<?php
$arr 
= array(=> 112 => 2);

$arr[] = 56;    // This is the same as $arr[13] = 56;
                // at this point of the script

$arr["x"] = 42// This adds a new element to
                // the array with key "x"
                
unset($arr[5]); // This removes the element from the array

unset($arr);    // This deletes the whole array
?>

Hinweis: As mentioned above, if no key is specified, the maximum of the existing integer indices is taken, and the new key will be that maximum value plus 1. If no integer indices exist yet, the key will be 0 (zero). If a key that already has a value is specified, that value will be overwritten.
Note that the maximum integer key used for this need not currently exist in the array. It need only have existed in the array at some time since the last time the array was re-indexed. The following example illustrates:

<?php
// Create a simple array.
$array = array(12345);
print_r($array);

// Now delete every item, but leave the array itself intact:
foreach ($array as $i => $value) {
    unset(
$array[$i]);
}
print_r($array);

// Append an item (note that the new key is 5, instead of 0).
$array[] = 6;
print_r($array);

// Re-index:
$array array_values($array);
$array[] = 7;
print_r($array);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

Useful functions

There are quite a few useful functions for working with arrays. See the array functions section.

Hinweis: The unset() function allows removing keys from an array. Be aware that the array will not be reindexed. If a true "remove and shift" behavior is desired, the array can be reindexed using the array_values() function.

<?php
$a 
= array(=> 'one'=> 'two'=> 'three');
unset(
$a[2]);
/* will produce an array that would have been defined as
   $a = array(1 => 'one', 3 => 'three');
   and NOT
   $a = array(1 => 'one', 2 =>'three');
*/

$b array_values($a);
// Now $b is array(0 => 'one', 1 =>'three')
?>

The foreach control structure exists specifically for arrays. It provides an easy way to traverse an array.

Array do's and don'ts

Why is $foo[bar] wrong?

Always use quotes around a string literal array index. For example, $foo['bar'] is correct, while $foo[bar] is not. But why? It is common to encounter this kind of syntax in old scripts:

<?php
$foo
[bar] = 'enemy';
echo 
$foo[bar];
// etc
?>

This is wrong, but it works. The reason is that this code has an undefined constant (bar) rather than a string ('bar' - notice the quotes). PHP may in future define constants which, unfortunately for such code, have the same name. It works because PHP automatically converts a bare string (an unquoted string which does not correspond to any known symbol) into a string which contains the bare string. For instance, if there is no defined constant named bar, then PHP will substitute in the string 'bar' and use that.

Hinweis: This does not mean to always quote the key. Do not quote keys which are constants or variables, as this will prevent PHP from interpreting them.

<?php
error_reporting
(E_ALL);
ini_set('display_errors'true);
ini_set('html_errors'false);
// Simple array:
$array = array(12);
$count count($array);
for (
$i 0$i $count$i++) {
    echo 
"\nChecking $i: \n";
    echo 
"Bad: " $array['$i'] . "\n";
    echo 
"Good: " $array[$i] . "\n";
    echo 
"Bad: {$array['$i']}\n";
    echo 
"Good: {$array[$i]}\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Checking 0: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 1

Checking 1: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 2

More examples to demonstrate this behaviour:

<?php
// Show all errors
error_reporting(E_ALL);

$arr = array('fruit' => 'apple''veggie' => 'carrot');

// Correct
print $arr['fruit'];  // apple
print $arr['veggie']; // carrot

// Incorrect.  This works but also throws a PHP error of level E_NOTICE because
// of an undefined constant named fruit
// 
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit];    // apple

// This defines a constant to demonstrate what's going on.  The value 'veggie'
// is assigned to a constant named fruit.
define('fruit''veggie');

// Notice the difference now
print $arr['fruit'];  // apple
print $arr[fruit];    // carrot

// The following is okay, as it's inside a string. Constants are not looked for
// within strings, so no E_NOTICE occurs here
print "Hello $arr[fruit]";      // Hello apple

// With one exception: braces surrounding arrays within strings allows constants
// to be interpreted
print "Hello {$arr[fruit]}";    // Hello carrot
print "Hello {$arr['fruit']}";  // Hello apple

// This will not work, and will result in a parse error, such as:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// This of course applies to using superglobals in strings as well
print "Hello $arr['fruit']";
print 
"Hello $_GET['foo']";

// Concatenation is another option
print "Hello " $arr['fruit']; // Hello apple
?>

When error_reporting is set to show E_NOTICE level errors (by setting it to E_ALL, for example), such uses will become immediately visible. By default, error_reporting is set not to show notices.

As stated in the syntax section, what's inside the square brackets ('[' and ']') must be an expression. This means that code like this works:

<?php
echo $arr[somefunc($bar)];
?>

This is an example of using a function return value as the array index. PHP also knows about constants:

<?php
$error_descriptions
[E_ERROR]   = "A fatal error has occured";
$error_descriptions[E_WARNING] = "PHP issued a warning";
$error_descriptions[E_NOTICE]  = "This is just an informal notice";
?>

Note that E_ERROR is also a valid identifier, just like bar in the first example. But the last example is in fact the same as writing:

<?php
$error_descriptions
[1] = "A fatal error has occured";
$error_descriptions[2] = "PHP issued a warning";
$error_descriptions[8] = "This is just an informal notice";
?>

because E_ERROR equals 1, etc.

So why is it bad then?

At some point in the future, the PHP team might want to add another constant or keyword, or a constant in other code may interfere. For example, it is already wrong to use the words empty and default this way, since they are reserved keywords.

Hinweis: To reiterate, inside a double-quoted string, it's valid to not surround array indexes with quotes so "$foo[bar]" is valid. See the above examples for details on why as well as the section on variable parsing in strings.

Converting to array

For any of the types: integer, float, string, boolean and resource, converting a value to an array results in an array with a single element with index zero and the value of the scalar which was converted. In other words, (array)$scalarValue is exactly the same as array($scalarValue).

If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side. This can result in some unexpected behaviour:

<?php

class {
    private 
$A// This will become '\0A\0A'
}

class 
extends {
    private 
$A// This will become '\0B\0A'
    
public $AA// This will become 'AA'
}

var_dump((array) new B());
?>

The above will appear to have two keys named 'AA', although one of them is actually named '\0A\0A'.

Converting NULL to an array results in an empty array.

Comparing

It is possible to compare arrays with the array_diff() function and with array operators.

Examples

The array type in PHP is very versatile. Here are some examples:

<?php
// this
$a = array( 'color' => 'red',
            
'taste' => 'sweet',
            
'shape' => 'round',
            
'name'  => 'apple',
                       
4        // key will be 0
          
);

// is completely equivalent with
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name']  = 'apple';
$a[]        = 4;        // key will be 0

$b[] = 'a';
$b[] = 'b';
$b[] = 'c';
// will result in the array array(0 => 'a' , 1 => 'b' , 2 => 'c'),
// or simply array('a', 'b', 'c')
?>

Beispiel #1 Using array()

<?php
// Array as (property-)map
$map = array( 'version'    => 4,
              
'OS'         => 'Linux',
              
'lang'       => 'english',
              
'short_tags' => true
            
);
            
// strictly numerical keys
$array = array( 7,
                
8,
                
0,
                
156,
                -
10
              
);
// this is the same as array(0 => 7, 1 => 8, ...)

$switching = array(         10// key = 0
                    
5    =>  6,
                    
3    =>  7
                    
'a'  =>  4,
                            
11// key = 6 (maximum of integer-indices was 5)
                    
'8'  =>  2// key = 8 (integer!)
                    
'02' => 77// key = '02'
                    
0    => 12  // the value 10 will be overwritten by 12
                  
);
                  
// empty array
$empty = array();         
?>

Beispiel #2 Collection

<?php
$colors 
= array('red''blue''green''yellow');

foreach (
$colors as $color) {
    echo 
"Do you like $color?\n";
}

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?

Changing the values of the array directly is possible since PHP 5 by passing them by reference. Before that, a workaround is necessary:

Beispiel #3 Collection

<?php
// PHP 5
foreach ($colors as &$color) {
    
$color strtoupper($color);
}
unset(
$color); /* ensure that following writes to
$color will not modify the last array element */

// Workaround for older versions
foreach ($colors as $key => $color) {
    
$colors[$key] = strtoupper($color);
}

print_r($colors);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => RED
    [1] => BLUE
    [2] => GREEN
    [3] => YELLOW
)

This example creates a one-based array.

Beispiel #4 One-based index

<?php
$firstquarter  
= array(=> 'January''February''March');
print_r($firstquarter);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array 
(
    [1] => 'January'
    [2] => 'February'
    [3] => 'March'
)

Beispiel #5 Filling an array

<?php
// fill an array with all items from a directory
$handle opendir('.');
while (
false !== ($file readdir($handle))) {
    
$files[] = $file;
}
closedir($handle); 
?>

Arrays are ordered. The order can be changed using various sorting functions. See the array functions section for more information. The count() function can be used to count the number of items in an array.

Beispiel #6 Sorting an array

<?php
sort
($files);
print_r($files);
?>

Because the value of an array can be anything, it can also be another array. This enables the creation of recursive and multi-dimensional arrays.

Beispiel #7 Recursive and multi-dimensional arrays

<?php
$fruits 
= array ( "fruits"  => array ( "a" => "orange",
                                       
"b" => "banana",
                                       
"c" => "apple"
                                     
),
                  
"numbers" => array ( 1,
                                       
2,
                                       
3,
                                       
4,
                                       
5,
                                       
6
                                     
),
                  
"holes"   => array (      "first",
                                       
=> "second",
                                            
"third"
                                     
)
                );

// Some examples to address values in the array above 
echo $fruits["holes"][5];    // prints "second"
echo $fruits["fruits"]["a"]; // prints "orange"
unset($fruits["holes"][0]);  // remove "first"

// Create a new multi-dimensional array
$juices["apple"]["green"] = "good"
?>

Array assignment always involves value copying. It also means that the internal array pointer used by current() and similar functions is reset. Use the reference operator to copy an array by reference.

<?php
$arr1 
= array(23);
$arr2 $arr1;
$arr2[] = 4// $arr2 is changed,
             // $arr1 is still array(2, 3)
             
$arr3 = &$arr1;
$arr3[] = 4// now $arr1 and $arr3 are the same
?>


Objects

Object Initialization

To create a new object, use the new statement to instantiate a class:

<?php
class foo
{
    function 
do_foo()
    {
        echo 
"Doing foo."
    }
}

$bar = new foo;
$bar->do_foo();
?>

For a full discussion, see the Classes and Objects chapter.

Converting to object

If an object is converted to an object, it is not modified. If a value of any other type is converted to an object, a new instance of the stdClass built-in class is created. If the value was NULL, the new instance will be empty. Arrays convert to an object with properties named by keys, and corresponding values. For any other value, a member variable named scalar will contain the value.

<?php
$obj 
= (object) 'ciao';
echo 
$obj->scalar;  // outputs 'ciao'
?>


Ressourcen

Eine resource ist eine spezielle Variable, die eine Referenz zu einer externen Ressource darstellt. Ressourcen werden mit Hilfe spezieller Funktionen erzeugt und genutzt. Im Anhang finden Sie eine Liste all dieser Funktionen und der zugehörigen resource-Typen.

Hinweis: Der resource-Typ wunde in PHP 4 eingeführt.

Siehe auch get_resource_type().

Konvertierung von Resosurcen.

Da resource-Variablen spezielle Referenzen auf geöffnete Dateien, Datenbankverbindungen, Grafikbereichen usw. enthalten macht die Konvertierung von resource keinen Sinn.

Resourcen freigeben

Dank der mit der Zend Engine von PHP 4 eingeführten Referenzzähler werden Ressourcen, die von keiner Variablen mehr referenziert werden, automatisch erkannt und vom Garbage Collector freigegeben. Aus diesem Grund ist es selten nötig Speicher von Hand freizugeben.

Hinweis: Persistente Datenbankverbindungen sind eine Ausnahme von dieser Regel, sie werden nicht vom Garbage Collector entfernt. Mehr Informationen finden sie im Abschnitt Persistente Verbindungen.



NULL

Der spezielle Wert NULL repräsentiert eine Variable ohne Wert. NULL ist der einzig mögliche Wert des Typs NULL.

Hinweis: Der null Typ wurde in PHP eingeführt.

Eine Variable gilt als vom Typ null wenn:

  • ihr die Konstante NULL zugewiesen wurde.

  • ihr noch kein Wert zugewiesen wurde.

  • sie mit unset() gelöscht wurde.

Syntax

Es gibt nur einen Wert vom Typ null: das Schlüsselwort NULL (Groß- und Kleinschreibung ist dabei nicht wichtig).

<?php
$var 
NULL;       
?>

Siehe auch die Funktionen is_null() und unset().

Umwandlung auf NULL

Die Umwandlung einer Variable auf den Typ null entfernt die Variable und löscht ihren Inhalt.



Pseudo-types and variables used in this documentation

mixed

mixed indicates that a parameter may accept multiple (but not necessarily all) types.

gettype() for example will accept all PHP types, while str_replace() will accept strings and arrays.

number

number indicates that a parameter can be either integer or float.

callback

Some functions like call_user_func() or usort() accept user-defined callback functions as a parameter. Callback functions can not only be simple functions, but also object methods, including static class methods.

A PHP function is passed by its name as a string. Any built-in or user-defined function can be used, except language constructs such as: array(), echo(), empty(), eval(), exit(), isset(), list(), print() or unset().

A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.

Static class methods can also be passed without instantiating an object of that class by passing the class name instead of an object at index 0.

Apart from common user-defined function, create_function() can also be used to create an anonymous callback function.

Beispiel #1 Callback function examples

<?php 

// An example callback function
function my_callback_function() {
    echo 
'hello world!';
}

// An example callback method
class MyClass {
    static function 
myCallbackMethod() {
        echo 
'Hello World!';
    }
}

// Type 1: Simple callback
call_user_func('my_callback_function'); 

// Type 2: Static class method call
call_user_func(array('MyClass''myCallbackMethod')); 

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
class {
    public static function 
who() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
who() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::who')); // A
?>

Hinweis: In PHP4, it was necessary to use a reference to create a callback that points to the actual object, and not a copy of it. For more details, see References Explained.

void

void as a return type means that the return value is useless. void in a parameter list means that the function doesn't accept any parameters.

...

$... in function prototypes means and so on. This variable name is used when a function can take an endless number of arguments.



Type Juggling

PHP does not require (or support) explicit type definition in variable declaration; a variable's type is determined by the context in which the variable is used. That is to say, if a string value is assigned to variable $var, $var becomes a string. If an integer value is then assigned to $var, it becomes an integer.

An example of PHP's automatic type conversion is the addition operator '+'. If either operand is a float, then both operands are evaluated as floats, and the result will be a float. Otherwise, the operands will be interpreted as integers, and the result will also be an integer. Note that this does not change the types of the operands themselves; the only change is in how the operands are evaluated and what the type of the expression itself is.

<?php
$foo 
"0";  // $foo is string (ASCII 48)
$foo += 2;   // $foo is now an integer (2)
$foo $foo 1.3;  // $foo is now a float (3.3)
$foo "10 Little Piggies"// $foo is integer (15)
$foo "10 Small Pigs";     // $foo is integer (15)
?>

If the last two examples above seem odd, see String conversion to numbers.

To force a variable to be evaluated as a certain type, see the section on Type casting. To change the type of a variable, see the settype() function.

To test any of the examples in this section, use the var_dump() function.

Hinweis: The behaviour of an automatic conversion to array is currently undefined.
Also, because PHP supports indexing into strings via offsets using the same syntax as array indexing, the following example holds true for all PHP versions:

<?php
$a    
'car'// $a is a string
$a[0] = 'b';   // $a is still a string
echo $a;       // bar
?>

See the section titled String access by character for more information.

Type Casting

Type casting in PHP works much as it does in C: the name of the desired type is written in parentheses before the variable which is to be cast.

<?php
$foo 
10;   // $foo is an integer
$bar = (boolean) $foo;   // $bar is a boolean
?>

The casts allowed are:

  • (int), (integer) - cast to integer
  • (bool), (boolean) - cast to boolean
  • (float), (double), (real) - cast to float
  • (string) - cast to string
  • (binary) - cast to binary string (PHP 6)
  • (array) - cast to array
  • (object) - cast to object
  • (unset) - cast to NULL (PHP 5)

(binary) casting and b prefix forward support was added in PHP 5.2.1

Note that tabs and spaces are allowed inside the parentheses, so the following are functionally equivalent:

<?php
$foo 
= (int) $bar;
$foo = ( int ) $bar;
?>

Casting literal strings and variables to binary strings:

<?php
$binary 
= (binary)$string;
$binary b"binary string";
?>

Hinweis: Instead of casting a variable to a string, it is also possible to enclose the variable in double quotes.

<?php
$foo 
10;            // $foo is an integer
$str "$foo";        // $str is a string
$fst = (string) $foo// $fst is also a string

// This prints out that "they are the same"
if ($fst === $str) {
    echo 
"they are the same";
}
?>

It may not be obvious exactly what will happen when casting between certain types. For more information, see these sections:




Variablen

Inhaltsverzeichnis


Grundlegendes

Variablen werden in PHP dargestellt durch ein Dollar-Zeichen ($) gefolgt vom Namen der Variablen. Bei Variablen-Namen wird zwischen Groß- und Kleinschreibung unterschieden (case-sensitive).

Variablen-Namen werden in PHP nach den gleichen Regeln wie andere Bezeichner erstellt. Ein gültiger Variablen-Name beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen. Als regulärer Ausdruck (regular expression) würde das wie folgt ausgedrückt: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'.

Hinweis: Unserem Zweck entspricht also ein Buchstabe von a bis z bzw. A bis Z oder einem ASCII-Zeichen von 127 bis 255 (0x7f bis 0xff).

Hinweis: $this ist eine spezielle Variable der kein Wert zugewiesen werden kann.

Tipp

Siehe auch Userland Naming Guide.

Information zu Funktionen im Zusammenhang mit Variablen finden Sie im Abschnitt Funktionen zur Behandlung von Variablen.

<?php
$var 
"Du";
$vaR "und";
$Var "ich";
$vAr "wir lernen PHP"
echo "$var $vaR $Var$vAr"// gibt "Du und ich, wir lernen PHP" aus

$4site  'nicht jetzt';     // ungültig, da Anfang eine Zahl
$_4site 'nicht jetzt';     // gültig, da Unterstrich am Anfang
$täbyte 'irgendwas';       // gültig, da 'ä' dem (Erweiterten) ASCII-Wert 228 entspricht
?>

Variablen werden durch ihren Wert bestimmt. Das heisst, wenn Sie einer Variablen einen Ausdruck zuweisen, wird der gesamte Inhalt des Originalausdrucks in die Zielvariable kopiert. Die Folge ist, dass eine Variable, die ihren Inhalt von einer anderen Variablen erhalten hat, ihren Inhalt behält, auch wenn Sie danach den Inhalt der anderen (Quell- / Ursprungs-)Variablen ändern. Die Inhalte der Ziel- und Quellvariablen sind also insoweit unabhängig voneinander. Für weitere Informationen lesen Sie bitte das Kapitel unter Expressions / Ausdrücke.

PHP bietet eine andere Möglichkeit der Wertzuweisung bei Variablen: Zuweisung durch Referenzierung. Das bedeutet, dass der Wert der neuen Variablen eine Referenz zur Ursprungs-Variablen darstellt (mit anderen Worten: Der Wert ist ein Alias bzw. Zeiger auf den Inhalt der Ursprungsvariablen). Beide Variablen zeigen also auf die selbe(n) Speicherstelle(n). Änderungen der neuen Variablen ändern auch deren Ursprungs-Variable und umgekehrt.

Für die Zuweisung per Referenz müssen Sie lediglich ein & der (Ausgangs-, Quell-) Variablen voranstellen, die sie einer anderen Variablen zuweisen wollen. Der folgende Skript- Ausschnitt wird zweimal 'Mein Name ist Bob' ausgeben:

<?php
$foo 
'Bob';             // 'Bob' der Variablen $foo zuweisen.
$bar = &$foo;             // Zeiger auf $foo in $bar erzeugen.
$bar "Ich hei&szlig;e $bar";  // $bar verändern...
echo $bar;
echo 
$foo;                // $foo wurde dadurch ebenfalls verändert.
?>

Zu beachten ist, dass nur Variablenbezeichner referenziert werden können.

<?php
$foo 
25;
$bar = &$foo;     // Gültige Zuweisung.
$bar = &(24 7); // Ungültig, da kein Variablenbezeichner
                  // zugewiesen wird.
function test() {
    return 
25;
}

$bar = &test();   // Ungültig.
?>

Es ist in PHP nicht zwingend notwendig Variablen zu initialisieren, es wird aber trotzdem empfohlen. Nicht initialisierte Variablen haben einen Vorgabewert der vom Typ abhängt - FALSE Null, leerer String oder leeres Array.

Beispiel #1 Vorgabewerte uninitialisierter Variablen

<?php
echo ($unset_bool "true" "false"); // false
$unset_int += 25// 0 + 25 => 25
echo $unset_string "abc"// "" . "abc" => "abc"
$unset_array[3] = "def"// array() + array(3 => "def") => array(3 => "def")
?>

Es ist problematisch sich auf den Vorgabewert einer nicht initialisierten Variable zu verlassen wenn Sie Dateien inkludieren die die gleichen Variablennamen benutzen. Wenn register_globals aktiviert ist führt dies zu einem extremen Sicherheitsproblem. Bei Zugriffen auf nicht initialisierte Variablen wird ein Fehler der Stufe E_NOTICE ausgegeben, dies trifft allerdings nicht auf das Anfügen von Elementen an nicht initialisierte Arrays zu. Das isset() Sprachkonstrukt kann genutzt werden um zu prüfen ob eine Variable bereits initialisiert wurde.



Vordefinierte Variablen

PHP bietet jedem ausgeführtem Skript eine Vielzahl von vordefinierten Variablen an. Viele dieser Variablen können jedoch nicht vollständig erläutert werden, da sie abhängig sind vom Web-Server, der Version und dem Setup des Web- Servers sowie weiteren Faktoren. Einige dieser Variablen stehen nicht zur Verfügung, wenn PHP-Skripte per Kommando-Zeilen-Aufruf ausgeführt werden. Für eine Liste dieser Variablen lesen Sie bitte den Abschnitt Vordefinierte Variablen.

Warnung

Ab PHP 4.2.0 ist der standardmäßige Wert für die PHP-Anweisung register_globals off. Dies ist eine wesentliche Änderung in PHP. Die Anweisung register_globals off beeinflusst den Satz von vordefinierten Variablen, die im globalen Bereich verfügbar sind. Um zum Beispiel DOCUMENT_ROOT zu bekommen, müssen Sie $_SERVER['DOCUMENT_ROOT'] statt $DOCUMENT_ROOT verwenden oder um $id von der URL http://www.example.com/test.php?id=3 zu bekommen $_GET['id'] statt $id oder $_ENV['HOME'] statt $HOME.

Für diese Änderung betreffende Informationen lesen Sie bitte den Konfigurations-Eintrag für register_globals, das Sicherheitskapitel über die Verwendung von Register Globals und außerdem die PHP » 4.1.0 und » 4.2.0 Release Announcements.

Die reservierten vordefinierten Variablen, wie die Superglobalen Arrays, sollten bevorzugt verwendet werden.

Ab Version 4.1.0 stehen in PHP eine zusätzliche Reihe vordefinierter Arrays zur Verfügung, die Variablen vom Webserver (gegebenenfalls), von der Umgebung und von Benutzereingaben enthalten. Diese neuen Arrays sind insofern etwas sehr Spezielles, als sie automatisch global sind -- d.h., sie stehen automatisch in jedem Bereich zur Verfügung. Deshalb sind sie auch bekannt als 'Superglobale'. (Es gibt in PHP keinen Mechanismus für benutzerdefinierte Superglobale.) Die Superglobale werden nachfolgend aufgelistet, aber für eine Liste ihres Inhalts und die weitere Diskussion vordefinierter Variablen und ihres Wesens lesen Sie bitte den Abschnitt Reservierte vordefinierte Variablen. Außerdem werden Sie feststellen, dass die alten vordefinierten Variablen ($HTTP_*_VARS) noch existieren. Seit PHP 5.0.0 können Sie die Registrierung der langen von PHP vordefinierten Arrays mit der Konfigurationsoption register_long_arrays abschalten.

Hinweis: Variable Variablen
Superglobale können innerhalb von Funktionen und Methoden nicht als Variable Variablen verwendet werden.

Hinweis: Obwohl Superglobale und die HTTP_*_VARS zur gleichen Zeit existieren können sind sie nicht identisch. Änderungen dieser Variablen haben keinen Einfluss auf die jeweils anderen.

Falls bestimmte Variablen nicht unter variables_order angegeben sind, dann bleiben auch ihre entsprechenden vordefinierten Arrays leer.



Geltungsbereich von Variablen

Der Geltungsbereich einer Variablen ergibt sich aus dem Zusammenhang, in dem sie definiert wurde. Meistens besteht dieser aus einem einzigen Bereich. Dieser beinhaltet auch den Bereich für Dateien, die per "include"- oder "require"-Anweisung eingebunden wurden, z.B.:

<?php
$a 
1;
include 
"b.inc";
?>

Die Variable $a ist auch in der eingebundenen Datei b.inc verfügbar. In benutzerdefinierten Funktionen wird ein auf die Funktion beschränkter Geltungsbereich eingeführt. Jede in einer Funktion benutzte Variable ist zunächst auf den lokalen Bereich der Funktion beschränkt, z.B.:

<?php
$a 
1// globaler Bereich

function test () { 
    echo 
$a// Referenz auf einen lokalen Variablen-Bereich


test ();
?>

Dieses Skript erzeugt keine Bildschirm-Ausgabe, da sich die Echo- Anweisung auf eine lokale Variable namens $a bezieht und dieser kein Wert im lokalen Bezug zugewiesen worden ist. Dies ist ein kleiner Unterschied zu C, wo globale Variablen auch in Funktionen vorhanden sind, es sei denn, sie werden durch eine funktionsinterne Definition überschrieben. Das kann zu Problemen führen, denn in PHP müssen global geltende Variablen innerhalb von Funktionen als solche definiert werden.

Das global Schlüsselwort

Zunächst ein Beispiel für die Verwendung von global:

Beispiel #1 Die Verwendung von global

<?php
$a 
1;
$b 2;

function 
Summe()
{
    global 
$a$b;

    
$b $a $b;


Summe();
echo 
$b;
?>

Das obige Skript gibt "3" aus. Durch das Deklararieren der Variablen $a und $binnerhalb der Funktion als global, weisen alle Referenzen zu beiden Variablen auf die nun globalen Werte. Es gibt keine Beschränkungen bei der Anzahl an globalen Variablen, die durch eine Funktion verändert werden können.

Eine weitere Möglichkeit besteht in der Verwendung des speziellen $GLOBALS PHP-Array. Das obige Beispiel kann damit auch so geschrieben werden:

Beispiel #2 Die Verwendung von $GLOBALS statt global

<?php
$a 
1;
$b 2;

function 
Summe()
{
    
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];


Summe();
echo 
$b;
?>

Das $GLOBALS-Array ist ein assoziatives Array mit dem Bezeichner der globalen Variablen als Schlüssel und dem Inhalt dieser Variablen als Wert des Array-Elements. Beachten Sie, dass $GLOBALS in jedem Bereich existiert, weil $GLOBALS eine Superglobale ist. Hier ist ein Beispiel, das die Stärke von Superglobalen demonstriert:

Beispiel #3 Beispiel zur Demonstration von Superglobalen und Bereich

<?php
function test_global()
{
    
// Die meisten vordefinierten Variablen sind nicht "super" und
    // benötigen 'global', um im lokalen Bereich von Funktionen zur
    // Verfügung zu stehen.
    
global $HTTP_POST_VARS;

    echo 
$HTTP_POST_VARS['name'];

    
// Superglobale stehen in jedem Bereich zur Verfügung und
    // benötigen kein 'global'. Superglobale stehen seit PHP 4.1.0
    // zur Verfügung und HTTP_POST_VARS gilt nun als veraltet
    
echo $_POST['name'];
}
?>

Die Verwendung von statischen Variablen

Ein weiterer wichtiger Anwendungszweck von Variablen-Bereichen ist die static-Variable. Eine statische Variable existiert nur in einem lokalen Funktions-Bereich, der Wert geht beim Verlassen dieses Bereichs aber nicht verloren. Schauen Sie das folgende Beispiel an:

Beispiel #4 Beispiel, das die Notwendigkeit von statischen Variablen demonstriert

<?php
function test ()
{
    
$a 0;
    echo 
$a;
    
$a++;
}
?>

Diese Funktion ist sinnlos, da sie bei jedem Aufruf $a auf 0 setzt und "0" ausgibt. Die Anweisung $a++, welche den Wert erhöht, macht keinen Sinn, da der Wert von $a beim Verlassen der Funktion verloren geht. Um eine sinnvolle Zählfunktion zu implementieren, die ihren aktuell gesetzten Wert nicht vergisst, müssen Sie die Variable $aals "static" deklarieren:

Beispiel #5 Beispiel zur Verwendung statischer Variablen

<?php
function Test()
{
    static 
$a 0;
    echo 
$a;
    
$a++;
}
?>

Jetzt wird bei jedem Aufruf der Test()-Funktion der aktuelle Wert von $a ausgegeben und dann um 1 erhöht.

Static-Variablen ermöglichen auch einen Weg zum Umgang mit rekursiven Funktionen. Das sind Funktionen, die sich selbst aufrufen. Hierbei besteht die Gefahr, so genannte Endlos- Schleifen zu programmieren. Sie müssen also einen Weg vorsehen, diese Rekursion zu beenden. Die folgende einfache Funktion zählt rekursiv bis 10. Die statische Variable $zaehler wird benutzt, um die Rekursion zu beenden:

Beispiel #6 Statische Variablen in rekursiven Funktionen

<?php
function Test()
{
    static 
$zaehler 0;

    
$zaehler++;
    echo 
$zaehler;
    if (
$zaehler 10) {
        
Test ();
    }
    
$zaehler--;
}
?>

Hinweis: Statische Variablen werden wie in oben stehenden Beispielen deklariert. Das Zuweisen eines Wertes, welcher das Ergebnis eines Ausdrucks ist, wird mit einem parse error quittiert.

Beispiel #7 Statische Variablen deklarieren

<?php
function foo(){
    static 
$int 0;          // korrekt
    
static $int 1+2;        // falsch  (da ein Ausdruck vorliegt)
    
static $int sqrt(121);  // falsch  (ebenfalls ein Ausdruck)

    
$int++;
    echo 
$int;
}
?>


Referenzen bei globalen und statischen Variablen

Die Zend Engine 1, die PHP 4 zugrunde liegt, führt die static- und global-Wandler für Variablen in Bezug auf Referenzen aus. Zum Beispiel erzeugt eine echte globale Variable, die mit der Anweisung global in den Funktionsbereich importiert wurde, tatsächlich eine Referenz zur globalen Variable. Das kann zu einem unerwarteten Verhalten führen, auf das im folgenden Beispiel eingegangen wird:

<?php
function test_global_ref() {
    global 
$obj;
    
$obj = &new stdclass;
}

function 
test_global_noref() {
    global 
$obj;
    
$obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
?>

Die Ausführung dieses Beispiels erzeugt die folgende Ausgabe:


NULL
object(stdClass)(0) {
}

Ein ähnliches Verhalten gilt auch für die Anweisung static. Referenzen werden nicht statisch gespeichert:

<?php
function &get_instance_ref() {
    static 
$obj;

    echo 
"Statisches Objekt: ";
    
var_dump($obj);
   if (!isset(
$obj)) {
        
// Der statischen Variablen eine Referenz zuweisen
        
$obj = &new stdclass;
    }
    
$obj->eigenschaft++;
    return 
$obj;
}

function &
get_instance_noref() {
    static 
$obj;

    echo 
"Statisches Objekt: ";
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Der statischen Variablen ein Objekt zuweisen
        
$obj = new stdclass;
    }
    
$obj->eigenschaft++;
    return 
$obj;
}

$obj1 get_instance_ref();
$immer_noch_obj1 get_instance_ref();
echo 
"\n";
$obj2 get_instance_noref();
$immer_noch_obj2 get_instance_noref();
?>

Die Ausführung dieses Beispiels erzeugt die folgende Ausgabe:


Statisches Objekt: NULL
Statisches Objekt: NULL

Statisches Objekt: NULL
Statisches Objekt: object(stdClass)(1) {
["eigenschaft"]=>
int(1)
}

Dieses Beispiel demonstriert, dass die Referenz, die einer statischen Variablen zugewiesen wird, beim zweiten Aufruf der Funktion &get_instance_ref() vergessen ist.



Variable Variablen

Manchmal ist es komfortabel, variable Variablen-Bezeichner zu benutzen. Das bedeutet, einen Variablen-Namen zu setzen und dynamisch zu gebrauchen. Eine normale Variable wird wie folgt gebildet:

<?php
$a 
"Hallo";
?>

Eine variable Variable nimmt den Wert einer Variablen und behandelt ihn als Bezeichner der Variablen. Im obigen Beispiel kann Hallo als Variablen-Name gebraucht werden, indem man zwei $-Zeichen benutzt, also schreibt:

<?php
$$a "Welt";
?>

Nun existieren in der PHP-Symbol-Struktur zwei definierte und gespeicherte Variablen: $a mit dem Inhalt "Hallo" und $Hallo mit dem Inhalt "Welt". Deshalb wird die Anweisung

<?php
echo "$a ${$a}";
?>

zur genau gleichen Ausgabe führen wie:

<?php
echo "$a $Hallo";
?>

also zu: Hallo Welt.

Wenn Sie variable Variablen mit Arrays verwenden, müssen Sie eine Doppeldeutigkeit beachten. Wenn Sie nämlich $$a[1] schreiben, dann muss der Parser wissen, ob Sie $a[1] als Variable oder $$a als Variable und dann [1] als Index dieser Variablen verwenden wollen bzw. gemeint haben. Die Syntax zur Lösung dieser Doppeldeutigkeit: Verwenden Sie im ersten Fall ${$a[1]} und im zweiten Fall ${$a}[1].

Warnung

Bitte beachten Sie, dass variable Variablen nicht bei Superglobalen Arrays verwendet werden können. Die Variable $this ist also eine spezielle Variabele die nicht dynamisch referenziert werden kann.



Variablen aus externen Quellen

HTML-Formulare (GET and POST)

Sobald ein Formular an ein PHP-Skript übergeben wird, werden die Informationen dieses Formulars dem Skript automatisch verfügbar gemacht. Es gibt viele Möglichkeiten, auf diese Informationen zuzugreifen, zum Beispiel:

Beispiel #1 Ein einfaches HTML-Formular

<form action="foo.php" method="post">
    Name:  <input type="text" name="username" /><br />
    Email: <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="Und ab!" />
</form>

Abhängig von Ihrem speziellen Setup und Ihren persönlichen Vorlieben gibt es viele Möglichkeiten, auf die Daten von Ihren HTML-Formularen zuzugreifen. Hier einige Beispiele:

Beispiel #2 Zugriff auf die Daten von einem einfachen POST HTML-Formular

<?php
// Seit PHP 4.1.0 verfügbar

   echo $_POST['benutzername'];
   echo $_REQUEST['benutzername'];

   import_request_variables('p', 'p_');
   echo $p_benutzername;

// Ab PHP 6.0.0 nicht mehr verfügbar. Ab PHP 5.0.0 können diese langen
// vordefinierten Variablen mit der Anweisung register_long_arrays
// deaktiviert werden.

   echo $HTTP_POST_VARS['benutzername'];

// Verfügbar, falls die PHP-Anweisung register_globals = on. Ab
// PHP 4.2.0 ist der standardmäßige Wert von register_globals = off.
// Es ist nicht empfehlenswert, diese Methode zu verwenden, bzw. sich
// darauf zu verlassen.

   echo $benutzername;
?>

Die Verwendung eines GET Formulars ist, davon abgesehen, dass Sie stattdessen die entsprechende vordefinierte GET-Variable erhalten, ähnlich. Außerdem wird GET auch für den QUERY_STRING (die Information nach dem '?' in einer URL) verwendet. So enthält zum Beispiel http://www.example.com/test.php?id=3 GET-Daten, auf die mit $_GET['id'] zugegriffen werden kann. Siehe auch $_REQUEST und import_request_variables().

Hinweis: Superglobale Arrays wie $_POST und $_GET stehen seit PHP 4.1.0 zur Verfügung.

Wie gezeigt, war register_globals vor PHP 4.2.0 standardmäßig on. Die PHP-Gemeinschaft ermuntert alle, sich nicht auf diese Anweisung zu stützen, weil es vorzuziehen ist, davon auszugehen, dass sie off ist und entsprechend zu programmieren.

Hinweis: Die Konfigurationseinstellung zu magic_quotes_gpc betrifft Get-, Post- und Cookie-Werte. Ist diese Einstellung aktiv, wird der Wert (It's "PHP!") automatisch zu (It\'s \"PHP!\"). Escaping ist notwendig, wenn Sie ihre Daten in eine Datenbank einfügen wollen. Siehe auch addslashes(), stripslashes() und magic_quotes_sybase.

Im Zusammenhang mit Formular-Variablen versteht PHP auch Arrays (siehe auch die verwandte Faq). Sie können z.B. die betreffenden Variablen gruppieren oder dieses Leistungsmerkmal nutzen, um Werte aus Mehrfach-Auswahl-Bereichen zu erhalten. Schicken wir zum Beispiel ein Formular an sich selbst und lassen nach dem Abschicken die Daten anzeigen:

Beispiel #3 Komplexere Formular-Variablen

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Name:  <input type="text" name="personal[name]" /><br />
    Email: <input type="text" name="personal[email]" /><br />
    Bier: <br />
    <select multiple name="bier[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbräu</option>
    </select><br />
    <input type="submit" name="submit" value="Und ab!" />
</form>

IMAGE SUBMIT Variablen-Bezeichner

Zur Übertragung eines Formulars kann auch ein Bild (Image) statt eines Übertragungs-Schalters (Submit-Button) benutzt werden, dessen Tag wie folgt aussieht:

<input type="image" src="image.gif" name="sub" />

Klickt der Benutzer irgendwo auf das Bild, wird das entsprechende Formular an den Web-Server übertragen. Hierbei sind zwei zusätzliche Variablen vorhanden, sub_x und sub_y. Diese enthalten die Koordinaten des Klick-Punktes innerhalb des Bildes. Die Erfahreneren werden sagen, dass die Variablen, die vom Browser gesendet werden einen Punkt enthalten statt eines Unterstrichs. Dieser Punkt wird von PHP automatisch in einen Unterstrich verwandelt.

HTTP-Cookies

PHP unterstützt HTTP-Cookies, wie sie in » Netscape's Spec definiert sind. Cookies ermöglichen die Daten-Speicherung innerhalb der jeweiligen Browser-Umgebung zur Weiterleitung oder wiederholten Identifikation von Benutzern. Sie können Cookies erzeugen, indem Sie die Funktion setcookie() benutzen. Cookies sind Teil des HTTP-Headers, deshalb muss die setcookie-Funktion aufgerufen werden, bevor irgendeine Ausgabe an den Browser gesendet wird. Dabei handelt es sich um die gleiche Einschränkung, die auch für die header()-Funktion gilt. Cookie-Daten stehen dann sowohl in den entsprechenden Cookie-Daten-Arrays, wie zum Beispiel $_COOKIE, $HTTP_COOKIE_VARS als auch in $_REQUEST zur Verfügung. Für weitere Details und Beispiele lesen Sie bitte die setcookie()-Seite des Handbuchs.

Wenn Sie einer einzelnen Cookie-Variable mehrere Werte zuweisen wollen, müssen Sie diese als Array übertragen. Zum Beispiel:

<?php
setcookie
("MeinCookie[foo]""Ich teste 1"time()+3600);
setcookie("MeinCookie[bar]""Ich teste 2"time()+3600);
?>

Das erzeugt zwei einzelne Cookies obwohl MeinCookie in Ihrem Skript nun ein einziges Array ist. Wenn Sie nur ein Cookie mit mehreren Werten setzen wollen, sollten Sie zuerst serialize() oder explode() auf das Array anwenden.

Bedenken Sie, dass ein Cookie ein vorhergehendes Cookie gleichen Namens überschreibt, es sei denn, der Pfad oder die Domain ist anders. Für eine Warenkorb-Anwendung können Sie deshalb z.B. einen Zähler bilden und diesen weiterleiten:

Beispiel #4 Ein setcookie()-Beispiel

<?php
if (isset($_COOKIE['zaehler'])) {
    
$zaehler $_COOKIE['zaehler'] + 1;
} else {
    
$zaehler 1;
}
setcookie("zaehler"$zaehlertime()+3600);
setcookie("Cart[$zaehler]"$itemtime()+3600);
?>

Punkte in eingelesenen Variablen-Bezeichnern

Normalerweise verändert PHP die Variablen-Bezeichner nicht, wenn sie einem Skript übergeben werden. Es sollte aber beachtet werden, dass der Punkt (".") kein gültiger Bestandteil eines Variablen-Bezeichners ist. Deshalb achten Sie auf folgendes:

<?php
$varname
.ext;  /* ungültiger Variablen-Bezeichner */
?>

Der PHP-Parser sieht eine Variable namens $varname, gefolgt von einem Zeichenketten-Verbindungs-Operator, dieser wiederrum gefolgt von der offenen Zeichenkette 'ext' (also nicht eingegrenzt durch '"' und auch keinem Schlüssel oder reserviertem Bezeichner entsprechend). Das kann natürlich nicht zum gewünschten Ergebnis führen.

Deshalb ist es wichtig zu wissen, dass PHP in den ihm übergebenen Variablen alle Punkte (.) automatisch durch einen Unterstrich (_) ersetzt.

Bestimmung des Variablen-Typs

Da PHP den Typ der Variablen bestimmt und (im Allgemeinen) selbst eine entsprechende Umformung vornimmt, ist es nicht immer klar, welchen Typ eine Variable gerade hat. PHP beinhaltet einige Funktionen, die dies herausfinden, wie zum Beispiel: gettype(), is_array(), is_float(), is_int(), is_object() und is_string(). Lesen Sie bitte auch das Kapitel über Typen.




Konstanten

Inhaltsverzeichnis

Eine Konstante ist ein Bezeichner (Name) für eine einfache Variable. Wie der Name bereits nahelegt, kann der Wert einer Konstanten zur Laufzeit des Skripts nicht verändert werden (ausgenommen die Magischen Konstanten, die aber keine wirklichen Konstanten sind.) Eine Konstante unterscheidet standardmäßig zwischen Groß- und Kleinschreinbung (case-sensitive). Nach gängiger Konvention werden Konstanten immer in Großbuchstaben geschrieben.

Der Name einer Konstanten folgt den gleichen Regeln wie alle anderen Bezeichner in PHP. Ein gültiger Name beginnt mit einem Buchstaben oder einem Unterstrich, gefolgt von beliebig vielen Buchstaben, Ziffern oder Understrichen. Als regulärer Ausdruck könnte das so beschrieben werden: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

Tipp

Siehe auch Userland Naming Guide.

Beispiel #1 Gültige und ungültige Namen für Konstanten

<?php

// Gueltige Namen fuer Konstanten
define("FOO",     "irgendwas");
define("FOO2",    "etwas anderes");
define("FOO_BAR""irgendwas ganz anderes");

// Ungueltige Namen fuer Konstanten
define("2FOO",    "irgendwas");

// Folgendes ist korrekt, sollte aber vermieden werden:
// PHP koennte eines Tages eine Magische Konstante unterstuetzen
// die Ihr Skript nicht mehr wie gewuenscht funktionieren laesst
define("__FOO__""irgendwas");

?>

Hinweis: Für unsere Zwecke ist ein Buchstabe a-z, A-Z und die ASCII-Zeichen von 127 bis 255 (0x7f-0xff).

Wie bei superglobals ist der Gültigkeitsbereich einer Konstanten global. Unabhängig vom Gültigkeitsbereich können Sie in Ihrem Skript überall auf eine Konstante zugreifen. Für mehr Information zum Gültigkeitsbereich lesen Sie bitte den Abschnitt über den Geltungsbereich von Variablen.


Syntax

Sie können eine Konstante definieren, indem Sie entweder die define()-Funktion oder ab PHP 5.3.0 das Schlüsselwort const außerhalb einer Klassendefinition verwenden. Einmal definiert, kann eine Konstane weder verändert noch gelöscht werden.

Konstanten können nur skalare Daten (boolean, integer, float und string) enthalten. Es ist möglich, Konstanten vom Typ resource zu definieren, dies sollte allerdings vermieden werden, da es zu unerwarteten Ergebnissen führen kann.

Den Wert einer Konstanten erhalten Sie durch die einfache Angabe ihres Namens. Im Gegensatz zu Variablen sollten Sie einer Konstanten kein $ voranstellen. Ebenso können Sie die Funktion constant() benutzen, um den Wert einer Konstanten auszulesen, wenn Sie den Namen der Konstanten dynamisch erhalten wollen. Benutzen Sie get_defined_constants(), um eine Liste aller definierten Konstanten zu erhalten.

Hinweis: Konstanten und (globale) Variablen befinden sich in unterschiedlichen Namensräumen. Das hat zum Beispiel zur Folge, dass TRUE und $TRUE etwas völlig Verschiedenes sind.

Falls Sie eine undefinierte Konstante verwenden, nimmt PHP an, dass Sie den Namen der Konstanten selbst meinen, so als ob Sie sie als einen string (CONSTANT vs "CONSTANT") aufgerufen hätten. Falls das passiert, wird Ihnen ein Fehler vom Typ E_NOTICE ausgegeben. Lesen Sie ebenfalls den entsprechenden Manualabschnitt, der erklärt, warum $foo[bar] falsch ist (zumindest solange Sie nicht zuvor bar mittels define() als Konstante definiert haben). Möchten Sie einfach nur nachprüfen, ob eine Konstante definiert ist, benutzen Sie die Funktion defined().

Das hier sind die Unterschiede zwischen Konstanten und Variablen:

  • Konstanten haben kein Dollarzeichen ($) vorangestellt;
  • Konstanten können nur über die Funktion define() definiert werden, nicht durch einfache Zuweisung;
  • Konstanten können überall definiert werden, und auf Ihren Wert können Sie ohne Rücksicht auf Namensraumregeln von Variablen zugreifen;
  • Sobald Konstanten definiert sind, können sie nicht neu definiert oder gelöscht werden; und
  • Konstanten können nur skalare Werte haben.

Beispiel #1 Definiton von Konstanten

<?php
define
("KONSTANTE""Hallo Welt.");
echo 
KONSTANTE;     // Ausgabe: "Hallo Welt."
echo Konstante;     // Ausgabe: "Konstante" und eine Notice.
?>

Beispiel #2 Definition von Konstanten unter Verwendung des const-Keywords

<?php
// Funktioniert seit PHP 5.3.0
const CONSTANT 'Hallo Welt';

echo 
CONSTANT;
?>

Lesen Sie ebenfalls den Abschnitt über Klassenkonstanten.



Magische Konstanten

PHP stellt jedem Skript zur Laufzeit eine Vielzahl von vordefinierten Konstanten zur Verfügung. Viele dieser Konstanten werden jedoch von verschiedenen Erweiterungen definiert, die nur zur Verfügung stehen, wenn diese Erweiterungen selbst zur Verfügung stehen, d.h. entweder über dynamisches Laden zur Laufzeit oder Einkompilieren.

Es gibt sieben magische Konstanten, die, abhängig davon, wo sie eingesetzt werden, einen unterschiedlichen Wert haben. Zum Beispiel hängt der Wert der Konstanten __LINE__ davon ab, in welcher Zeile ihres Skripts Sie diese Konstante verwenden. Diese besonderen Konstanten sind unabhängig von Groß-/Kleinschreibung und sind folgende:

Einige "magische" PHP-Konstanten
Name Beschreibung
__LINE__ Die aktuelle Zeilennummer einer Datei.
__FILE__ Der vollständige Pfad- und Dateiname einer Datei. Wird diese Konstante innerhalb einer nachgeladenen Datei verwendet, wird der Name dieser eingebundenen Datei zurückgegeben. Seit PHP 4.0.2 enthält __FILE__ immer einen absoluten Pfad mit aufgelösten Symlinks, während in älteren Versionen unter Umständen ein relativer Pfad enthalten sein kann.
__DIR__ Der Name des Verzeichnisses, in dem sich die Datei befindet. Wird die Konstante innerhalb eines Includes verwendet, wird das Verzeichnis der eingebundenen Datei zurückgegeben. Dies entspricht dem Verhalten von dirname(__FILE__). Der Verzeichnisname hat keinen beendenden Schrägstrich, sofern es sich nicht um das Rootverzeichnis handelt. (Hinzugefügt in PHP 5.3.0)
__FUNCTION__ Der Name der Funktion. (Hinzugefügt in PHP 4.3.0.) Mit PHP 5 enthält diese Konstante den Namen der Funktion, wie dieser deklariert wurde (Beachtung der Groß- und Kleinschreibung). In PHP 4 wird der Wert immer in Kleinschrift ausgegeben.
__CLASS__ Der Name einer Klasse. (Hinzugefügt in PHP 4.3.0.) Mit PHP 5 enthält diese Konstante den Namen der Klasse, wie dieser deklariert wurde (Beachtung der Groß- und Kleinschreibung). In PHP 4 wird der Wert immer in Kleinschrift ausgegeben.
__METHOD__ Der Name einer Klassenmethode. (Hinzugefügt in PHP 5.0.0.) Der Methodenname wird genauso zurückgegeben, wie er deklariert wurde (Beachtung der Groß- und Kleinschreibung).
__NAMESPACE__ Der Name des aktuellen Namespace (Beachtung der Groß- und Kleinschreibung). Diese Konstante wird zum Kompilierungszeitpunkt definiert. (Hinzugefügt in PHP 5.3.0)

Siehe auch get_class(), get_object_vars(), file_exists() und function_exists().




Ausdrücke

Ausdrücke (Expressions) sind die wichtigsten Bausteine von PHP. In PHP ist fast alles, was geschrieben wird, ein Ausdruck. Die einfachste, aber auch zutreffendste Definition für einen Ausdruck ist "alles, was einen Wert hat".

Die grundlegendsten Formen von Ausdrücken sind Konstanten und Variablen. Wenn man "$a = 5" schreibt, weist man $a den Ausdruck '5' zu. '5' hat offensichtlich den Wert 5. Anders ausgedrückt: '5' ist ein Ausdruck mit dem Wert 5 (in diesem Fall ist '5' eine Integer-Konstante).

Nach dieser Zuweisung würde man erwarten, dass der Wert von $a nun ebenfalls 5 ist; wenn man also $b = $a schreibt, sollte dasselbe dabei herauskommen, als hätte man $b = 5 geschrieben. Anders ausgedrückt: $a ist ebenfalls ein Ausdruck mit dem Wert 5. Wenn alles richtig funktioniert, wird genau das passieren.

Etwas kompliziertere Beispiele für Ausdrücke sind Funktionen. Betrachten wi zum Beispiel die folgende Funktion:

<?php
function foo ()
{
    return 
5;
}
?>

Angenommen, Sie sind mit dem Konzept von Funktionen vertraut (wenn Sie es nicht sind, lesen Sie das Kapitel über Funktionen), dann würden Sie davon ausgehen, dass die Eingabe von $c = foo() grundsätzlich dasselbe bedeutet, als würde man $c = 5 schreiben, und genau das trifft zu. Funktionen sind Ausdrücke mit dem Wert ihres Rückgabewertes. Da foo() den Wert 5 zurückgibt, ist der Wert des Ausdruckes 'foo()' 5. Normalerweise geben Funktionen nicht einfach einen statischen Wert zurück, sondern berechnen etwas.

Natürlich müssen Werte in PHP keine Integer-Zahlen sein, und oft sind sie es auch nicht. PHP unterstützt vier skalare Datentypen: integer (Ganzzahlen), float (Fließkommazahlen), string (Zeichenketten) und boolean (Wahrheitswerte). (Skalare sind Datentypen, die man, im Gegensatz zu zum Beispiel Arrays, nicht in kleinere Stücke 'brechen' kann.) PHP unsterstützt auch zwei zusammengesetzte (nicht-skalare) Datentypen: Arrays und Objekte. Jeder dieser Datentypen kann Variablen zugewiesen und von Funktionen zurückgegeben werden.

PHP fasst den Begriff Ausdruck aber noch viel weiter, wie es auch andere Programmiersprachen tun. PHP ist eine ausdrucksorientierte Sprache, in dem Sinne, dass fast alles einen Ausdruck darstellt. Zurück zu dem Beispiel, mit dem wir uns bereits beschäftigt haben: '$a = 5'. Es ist einfach zu erkennen, dass hier zwei Werte enthalten sind: Der Wert der Integer-Konstanten '5' und der Wert von $a, der auf 5 geändert wird. In Wirklichkeit ist aber noch ein weiterer Wert enthalten, nämlich der Wert der Zuweisung selbst. Die Zuweisung selbst enthält den zugewiesenen Wert, in diesem Fall 5. In der Praxis bedeutet dies, dass '$a = 5', egal was es tut, immer einen Ausdruck mit dem Wert 5 darstellt. Folglich ist '$b = ($a = 5)' gleichbedeutend mit '$a = 5; $b = 5;' (ein Semikolon markiert das Ende einer Anweisung). Da Wertzuweisungen von rechts nach links geparst werden, kann man auch '$b = $a = 5' schreiben.

Ein anderes gutes Beispiel für die Ausdrucksorientierung von PHP sind Prä- und Post-Inkrement sowie die entsprechenden Dekremente. Benutzer von PHP und vielen anderen Sprachen sind vermutlich mit den Notationen 'variable++' und 'variable--' vertraut. Dies sind Inkrement- und Dekrement-Operatoren. IN PHP/FI 2 hat das Statement '$a++' keinen Wert (es ist kein Ausdruck) und daher kann man es nicht als Wert zuweisen oder in irgendeiner Weise benutzen. PHP erweitert die Eigenschaften von Dekrement und Inkrement, indem es die beiden ebenfalls wie in C zu Ausdrücken macht. In PHP gibt es, wie in C, zwei Arten von Inkrementen - Prä-Inkrement und Post-Inkrement. Grundsätzlich erhöhen sowohl Prä- als auch Post-Inkrement den Wert der Variable, und der Effekt auf die Variable ist derselbe. Der Unterschied liegt im Wert des Inkrement-Ausdruckes. Das Prä-Inkrement, das '++$variable' geschrieben wird, enthält als Wert den Wert der erhöhten Variabe (PHP erhöht den Wert der Variablen, bevor es ihren Wert ausliest, daher der Name 'PRÄ-Inkrement'). Das Post-Inkrement, das '$variable++' geschrieben wird, enthält dagegen den ursprünglichen Wert der Variablen vor der Erhöhung (PHP erhöht den Wert der Variablen, nachdem es ihren Wert ausgelesen hat, daher der Name 'POST-Inkrement').

Ein sehr gebräuchlicher Typ von Ausdrücken sind Vergleichsausdrücke. Diese Ausdrücke geben entweder FALSE oder TRUE zurück. PHP unterstützt > (größer), >= (größer oder gleich), == (gleich), != (ungleich), < (kleiner), und <= (kleiner oder gleich). Die Sprache unterstützt weiterhin ein Set von absoluten Vergleichsoperatoren: === (inhalts- und typgleich) und !== (nicht inhalts- oder typgleich). Diese Ausdrücke werden meist in bedingten Anweisungen, wie z. B. in if-Anweisungen, verwendet.

Im letzten Beispiel für Ausdrücke befassen wir uns mit kombinierten Zuweisungs- und Operator-Ausdrücken. Wir wissen bereits, dass, wenn wir $a um 1 erhöhen wollen, wir einfach '$a++' oder '++$a' schreiben können. Aber was tut man, wenn man den Wert um mehr als eins erhöhen will, z. B. um 3? Man könnte mehrer Male '$a++' schreiben, aber das ist offensichtlich weder ein effizienter noch komfortabler Weg. Viel üblicher ist es, einfach '$a = $a + 3' zu schreiben. '$a + 3' gibt den Wert von $a plus 3 zurück, dieser wird wieder $a zugewiesen, was dazu führt, dass $a nun um 3 erhöht wurde. In PHP - wie in einigen anderen Programmiersprachen, z. B. in C - kann man dies aber noch kürzer schreiben, was mit der Zeit klarer wird und auch einfacher zu verstehen ist. Um 3 zu dem aktuellen Wert von $a hinzuzufügen, schreibt man '$a += 3'. Das bedeutet exakt: "Nimm den Wert von $a, addiere 3 hinzu und weise $a den entstandenen Wert zu". Zusätzlich dazu, dass diese Schreibweise kürzer und klarer ist, wird sie auch schneller ausgeführt. Der Wert von '$a += 3' ist, wie der Wert einer regulären Zuweisung, der zugewiesene Wert. Beachten Sie, dass dieser Wert NICHT 3, sondern dem kombinierten Wert von $a plus 3 entspricht (das ist der Wert, der $a zugewiesen wird). Jeder Operator, der zwei Elemente verbindet, kann in dieser Schreibweise verwendet werden, z. B. '$a -= 5' (vermindert den Wert von $a um 5) oder '$a *= 7' (multipliziert den Wert von $a mit 7 und weist das Ergebnis $a zu), usw.

Es gibt einen weiteren Ausdruck, der Ihnen vielleicht seltsam vorkommt, wenn Sie ihn bisher noch in keiner Programmiersprache kennengelernt haben, den dreifach konditionalen Operator:

<?php
$eins 
$zwei $drei
?>

Wenn der Wert des ersten Sub-Ausdruckes (hier: $eins) TRUE ist (d. h. nicht 0), dann wird der Wert des zweiten Subausdrucks (hier: $zwei) ausgewertet und ist das Ergebnis des konditionalen Ausdrucks. Andernfalls wird der dritte Subausdruck ausgewertet und dessen Wert zurückgegeben.

Das folgende Beispiel sollte das Verständnis von Prä- und Post-Inkrement und von Ausdrücken im Allgemeinen erleichtern:

<?php
function verdoppeln($i)
{
    return 
$i*2;
}
$b $a 5;        /* Weise den Variablen $a und $b den Wert 5 zu */
$c $a++;          /* Post-Inkrement, der urspruengliche Wert von $a (5)
                       wird $c zugewiesen. */
$e $d = ++$b;     /* Prae-Inkrement, der erhöhte Wert von $b (6) wird $d und
                       $e zugewiesen. */

/* An diesem Punkt sind $d und $e beide gleich 6 */

$f verdoppeln($d++);  /* Weise $f den doppelten Wert von $d vor
                           der Erhöhung um eins zu, 2*6 = 12 */
$g verdoppeln(++$e);  /* Weise $g den doppelten Wert von $e nach
                           der Erhoehung um eins zu, 2*7 = 14 to $g */
$h $g += 10;      /* Zuerst wird $g um 10 erhöht und hat damit den Wert
                       24. Der Wert dieser Zuweisung (24) wird dann $h
                       zugewiesen, womit $h ebenfalls den Wert von 24 hat. */
?>

Einige Ausdrücke können wie Anweisungen verwendet werden. In diesem Falle hat eine Anweisung die Form 'expr ;', dies meint einen Ausdruck gefolgt von einem Semikolon. In '$b = $a = 5;' ist '$a = 5' ein gültiger Ausdruck, aber für sich allein keine Anweisung. '$b = $a = 5;' ist jedoch eine gültige Anweisung.

Ein letzter Punkt, der noch zu erwähnen ist, ist der Wahrheitswert von Ausdrücken. In vielen Fällen, hauptsächlich in bedingten Anweisungen und Schleifen, ist man nicht am spezifischen Wert eines Ausdrucks interessiert, sondern kümmert sich nur darum, ob er TRUE oder FALSE bedeutet. Die Konstanten TRUE und FALSE (case-insensitiv) sind die beiden möglichen Wahrheitswerte. Wenn nötig wird ein Ausdruck automatisch in einen Boolschen Wert konvertiert. Wenn Sie mehr darüber erfahren wollen, lesen Sie den Abschnitt über Typecasting.

PHP stellt eine vollständige und mächtige Implementat von Ausdrücken bereit, deren vollständige Dokumentation den Rahmen dieses Manuals sprengen würde. Die obigen Beispiele sollten Ihnen einen guten Eindruck davon verschaffen, was Ausdrücke sind und wie man nützliche Ausdrücke konstruieren kann. Im Rest dieses Manuals werden wir expr schreiben, um ausdrücken, dass an dieser Stelle jeder gültige PHP-Ausdruck stehen kann.



Operatoren

Inhaltsverzeichnis

Ein Operator ist etwas das Sie mit einem oder mehreren Werten füttern (oder Ausdrücken, um im Programmierjargon zu sprechen) und Sie erhalten als Ergebnis einen anderen Wert (damit wird diese Konstruktion selbst zu einem Ausdruck). Als Eselsbrücke können Sie sich Operatoren als Funktionen oder Konstrukte vorstellen, die Ihnen einen Wert zurück liefern (ähnlich print) und alles, was Ihnen keinen Wert zurück liefert (ähnlich echo) als irgend etwas Anderes.

Es gibt drei Arten von Opratoren. Als erstes gibt es den unären Operator, der nur mit einem Wert umgehen kann, zum Beispiel ! (der Verneinungsoperator) oder ++ (der Inkrementoperator). Die zweite Gruppe sind die sogenannten binären Operatoren; diese Gruppe enthält die meisten Operatoren, die PHP unterstützt. Eine Liste dieser Operatoren finden Sie weiter unten im Abschnitt Operator-Rangfolge .

Die dritte Gruppe bildet der ternäre Operator : ?:. Dieser sollte eher benutzt werden um abhängig von einem dritten Ausdruck eine Auswahl zwischen zwei Ausdrücken zu treffen, als zwischen zwei Sätzen oder Pfaden der Programmausführung zu wählen. Übrigens ist es eine sehr gute Idee ternäre Ausdrücke in Klammern zu setzen.


Operator-Rangfolge

Die Operator-Rangfolge legt fest, wie "eng" ein Operator zwei Ausdrücke miteinander verbindet. Zum Beispiel ist das Ergebnis des Ausdruckes 1 + 5 * 3 16 und nicht 18, da der Multiplikations-Operator ("*") in der Rangfolge höher steht als der Additions-Operator ("+"). Wenn nötig, können Sie Klammern setzen, um die Rangfolge der Operatoren zu beeinflussen. Zum Beispiel ergibt: (1 + 5) * 3 18. Ist die Rangfolge der Operatoren gleich, wird links nach rechts Assoziativität benutzt.

Die folgende Tabelle zeigt die Rangfolge der Operatoren, oben steht der Operator mit dem höchsten Rang.

Operator-Rangfolge
Assoziativität Operator
keine Richtung new
rechts [
rechts ! ~ ++ -- (int) (float) (string) (array) (object) @
links * / %
links + - .
links << >>
keine Richtung < <= > >=
keine Richtung == != === !==
links &
links ^
links |
links &&
links ||
links ? :
rechts = += -= *= /= .= %= &= |= ^= <<= >>=
rechts print
links and
links xor
links or
links ,

Hinweis: Obwohl ! einen höheren Rang gegenüber = hat, erlaubt es Ihnen PHP immer noch ähnliche Ausdrücke wie den folgenden zu schreiben: if (!$a =foo()).In diesem Ausdruck wird die Ausgabe von foo() der Variablen $a zugewiesen.



Arithmetische Operatoren

Erinnern Sie sich noch an die Grundrechenarten aus der Schule? Die arithmetischen Operatoren funktionieren genauso:

Arithmetische Operatoren
Beispiel Name Ergebnis
$a + $b Addition Summe von $a und $b.
$a - $b Subtraktion Differenz von $a und $b.
$a * $b Multiplikation Produkt von $a und $b.
$a / $b Division Quotient von $a und $b.
$a % $b Modulus Rest von $a geteilt durch $b.

Der Divisions-Operator ("/") gibt immer eine Fließkommazahl zurück, sogar wenn die zwei Operanden Ganzzahlen sind (oder Zeichenketten, die nach Ganzzahlen umgewandelt wurden).

Siehe auch im Handbuch das Kapitel über Mathematische Funktionen.



Zuweisungsoperatoren

Der einfachste Zuweisungsoperator ist "=". Wahrscheinlich kommt man als erstes auf die Idee, ihn mit "ist gleich" zu bezeichnen. Das ist falsch. In Wirklichkeit bedeutet er, dass dem linken Operanden der Wert des Ausdrucks auf der rechten Seite zugewiesen wird (man müsste ihn also mit "wird gesetzt auf den Wert von" übersetzen).

Der Wert eines Zuweisungs-Ausdruckes ist der zugewiesene Wert. D.h. der Wert des Ausdruckes "$a = 3" ist 3. Das erlaubt es, einige raffinierte Dinge anzustellen:

<?php

$a 
= ($b 4) + 5// $a ist nun gleich 9 und $b wurde auf den Wert 4 gesetzt.

?>

Zusätzlich zu dem oben vorgestellten Zuweisungsoperator "=" gibt es "kombinierte Operatoren" für alle binären, arithmetischen und String-Operatoren, die es erlauben, den Wert einer Variablen in einem Ausdruck zu benutzen, und dieser anschließend das Ergebnis des Ausdrucks als neuen Wert zuzuweisen. Zum Beispiel:

<?php

$a 
3;
$a += 5// setzt $a auf den Wert 8, als ob wir geschrieben haetten: $a = $a + 5;
$b "Hallo ";
$b .= "Du!"// setzt $b auf den Wert "Hallo Du!", aequivalent zu 
             // $b = $b . "Du!";
?>

Man beachte, dass die Zuweisung nur den Wert der Ursprungsvarialbe der neuen Variable zuweist (Zuweisung als Wert, sie "kopiert"), weshalb sich Änderungen an der einen Variablen nicht auf die andere auswirken werden. Das kann wichtig sein, wenn man ein großes Array o. ä. in einer Schleife kopieren muss. Beginnend mit PHP 4 wird 'assignement by reference' (Zuweisung als Verweis), mit Hilfe der Schreibweise $var =&$othervar; unterstützt , das funktioniert jedoch nicht in PHP 3. 'Assignement by reference' bedeutet, dass beide Variablen nach der Zuweisung die selben Daten repräsentieren und nichts kopiert wird. Um mehr über Referenzen zu lernen, lesen Sie bitte den Abschnitt Referenzen erklärt.



Bit-Operatoren

Bit-Operatoren erlauben es, in einem Integer bestimmte Bits "ein- oder auszuschalten" (auf 0 oder 1 zu setzen). Wenn beide, der links- und rechtsseitige Parameter, Zeichenketten sind, arbeiten die Bit-Operatoren mit ASCII-Werten der einzelnen Zeichen.

<?php
echo 12 9// Ausgabe '5'

echo "12" "9"// Ausgabe: das Backspace-Zeichen (ascii 8)
                 // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8

echo "hallo" "hello"// Gibt die ASCII-Werte #0 #4 #0 #0 #0
                        // 'a' ^ 'e' = #4 aus
?>

Bit-Operatoren
Beispiel Name Ergebnis
$a & $b Und Bits, die in $a und $b gesetzt sind werden gesetzt.
$a | $b Oder Bits, die in $a oder $b gesetzt sind werden gesetzt.
$a ^ $b Entweder oder (Xor) Bits, die entweder in $a oder $b gesetzt sind, werden gesetzt aber nicht in beiden.
~ $a Nicht Die Bits, die in $a nicht gesetzt sind, werden gesetzt und umgekehrt.
$a << $b Nach links verschieben Verschiebung der Bits von $a um $b Stellen nach links (jede Stelle entspricht einer Mulitplikation mit zwei).
$a >> $b Nach rechts verschieben Verschiebt die Bits von $a um $b Stellen nach rechts (jede Stelle entspricht einer Division durch zwei).


Vergleichs-Operatoren

Vergleichs-Operatoren erlauben es - wie der Name schon sagt - zwei Werte zu vergleichen. Wenn Sie an Beispielen verschiedener auf Typen bezogener Vergleiche interessiert sind, können Sie sich PHP type comparison tables anschauen.

Vergleichsoperatoren
Beispiel Name Ergebnis
$a == $b Gleich Gibt TRUE zurück, wenn $a gleich $b ist.
$a === $b Identisch Gibt TRUE zurück wenn $a gleich $b ist und beide vom gleichen Typ sind (eingeführt in PHP 4).
$a != $b Ungleich Gibt TRUE zurück, wenn $a nicht gleich $b ist.
$a <> $b Ungleich Gibt TRUE zurück, wenn $a nicht gleich $b ist.
$a !== $b Nicht identisch Gibt TRUE zurück, wenn $a nicht gleich $b ist, oder wenn beide nicht vom gleichen Typ sind (eingeführt in PHP 4).
$a < $b Kleiner Als Gibt TRUE zurück, wenn $a kleiner als $b ist.
$a > $b Größer Als Gibt TRUE zurück, wenn $a größer als $b ist.
$a <= $b Kleiner Gleich Gibt TRUE zurück, wenn $a kleiner oder gleich $b ist.
$a >= $b Größer Gleich Gibt TRUE zurück, wenn $a größer oder gleich $b ist.

Ein weiter Vergleichs-Operator ist der "?:"- oder Trinitäts-Operator.

<?php
// Beispielanwendung für den Trinitäts-Operator
$action = (empty($_POST['action'])) ? 'standard' $_POST['action'];

// Obiges ist mit dieser if/else-Anweisung identisch
if (empty($_POST['action'])) {
    
$action 'standard';
} else {
    
$action $_POST['action'];
}
?>

Der Ausdruck (ausdr1) ? (ausdr2) : (ausdr3) gibt ausdr2 zurück, wenn ausdr1 TRUE zurückgibt und ausdr3, wenn ausdr1 FALSE zurückgibt.

Siehe auch strcasecmp(), strcmp(), Array-Operatoren und den Abschnitt über Typen.

Ternary Operator

Another conditional operator is the "?:" (or ternary) operator.

Beispiel #1 Assigning a default value

<?php
// Example usage for: Ternary Operator
$action = (empty($_POST['action'])) ? 'default' $_POST['action'];

// The above is identical to this if/else statement
if (empty($_POST['action'])) {
    
$action 'default';
} else {
    
$action $_POST['action'];
}

?>

The expression (expr1) ? (expr2) : (expr3) evaluates to expr2 if expr1 evaluates to TRUE, and expr3 if expr1 evaluates to FALSE.

Since PHP 5.3, it is possible to leave out the middle part of the ternary operator. Expression expr1 ?: expr3 returns expr1 if expr1 evaluates to TRUE, and expr3 otherwise.

Hinweis: Please note that the ternary operator is a statement, and that it doesn't evaluate to a variable, but to the result of a statement. This is important to know if you want to return a variable by reference. The statement return $var == 42 ? $a : $b; in a return-by-reference function will therefore not work and a warning is issued in later PHP versions.

Hinweis: It is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious:

Beispiel #2 Non-obvious Ternary Behaviour

<?php
// on first glance, the following appears to output 'true'
echo (true?'true':false?'t':'f');

// however, the actual output of the above is 't'
// this is because ternary expressions are evaluated from left to right

// the following is a more obvious version of the same code as above
echo ((true 'true' 'false') ? 't' 'f');

// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>




Fehler-Kontroll-Operatoren

PHP unterstützt einen Operator zur Fehlerkontrolle: Das @-Symbol. Stellt man das @ in PHP vor einen Ausdruck werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden könnten, ignoriert.

Ist das track_errors-Feature aktiviert, werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden, in der Variablen $php_errormsg gespeichert. Da diese Variable mit jedem neuen Auftreten eines Fehlers überschrieben wird, sollte man sie möglichst bald nach Verwendung des Ausdrucks überprüfen, wenn man mit ihr arbeiten will.

<?php
/* Beabsichtigter Dateifehler */
$my_file = @file ('nicht_vorhandene_Datei') or
    die (
"Datei konnte nicht geöffnetwerden: Fehler war:'$php_errormsg'");

// Das funktioniert bei jedem Ausdruck, nicht nur bei Funktionen:
$value = @$cache[$key]; 
// erzeugt keine Notice, falls der Index $key nicht vorhanden ist.

?>

Hinweis: Der @-Operator funktioniert nur bei Ausdrücken. Eine einfache Daumenregel: wenn Sie den Wert von etwas bestimmen können, dann können Sie den @-Operator davor schreiben. Zum Beispiel können Sie ihn vor Variablen, Funktionsaufrufe und vor include() setzen, vor Konstanten und so weiter. Nicht verwenden können Sie diesen Operator vor Funktions- oder Klassendefinitionen oder vor Kontrollstrukturen wie zum Beispiel if und foreach und so weiter.

Siehe auch error_reporting() und den Abschnitt über Error Handling and Logging Functions.

Hinweis: Der @ Fehler-Kontroll-Operator verhindert jedoch keine Meldungen, welche aus Fehlern beim Parsen resultieren.

Warnung

Zum gegenwärtigen Zeitpunkt deaktiviert der "@" Fehler-Kontrolloperator die Fehlermeldungen selbst bei kritischen Fehlern, die die Ausführung eines Skripts beenden. Unter anderem bedeutet das, wenn Sie "@" einer bestimmten Funktion voranstellen, diese aber nicht zur Verfügung steht oder falsch geschrieben wurde, Ihr PHP-Skript einfach beendet wird, ohne Hinweis auf die Ursache.



Operatoren zur Programmausführung

PHP unterstützt einen Operator zur Ausführung externer Programme: Die sog. Backticks (``). Achtung: Die Backticks sind keine einfachen Anführungszeichen! PHP versucht, den Text zwischen den Backticks als Kommandozeilen-Befehl auszuführen. Die Ausgabe des aufgerufenen Programms wird zurückgegeben (d.h. wird nicht einfach ausgegeben, sondern kann einer Variablen zugewiesen werden). Die Verwendung des Backtick-Operators ist mit shell_exec() identisch.

<?php
$output 
= `ls -al`;
echo 
"<pre>$output</pre>";
?>

Hinweis: Der Backtick-Operator steht nicht zur Verfügung, wenn Safe Mode aktiviert ist oder die Funktion shell_exec() deaktiviert wurde.

Siehe auch den Abschnitt über Funktionen zur Programmausführung, popen(), proc_open() und Using PHP from the commandline.



Inkrement- bzw. Dekrementoperatoren

PHP unterstützt Prä- und Post-Inkrement- und Dekrementoperatoren im Stil der Programmiersprache C.

Inkrement- und Dekrementoperatoren
Beispiel Name Auswirkung
++$a Prä-Inkrement Erhöht den Wert von $a um eins (inkrementiert $a) und gibt anschließend den neuen Wert von $a zurück.
$a++ Post-Inkrement Gibt zuerst den aktuellen Wert von $a zurück und erhöht dann den Wert von $a um eins.
--$a Prä-Dekrement Vermindert den Wert von $a um eins (dekrementiert $a) und gibt anschließend den neuen Wert von $a zurück.
$a-- Post-Dekrement Gibt zuerst den aktuellen Wert von $a zurück und erniedrigt dann den Wert von $a um eins.

Ein einfaches Beispiel-Skript:

<?php
echo "<h3>Post-Inkrement</h3>";
$a 5;
echo 
"Sollte 5 sein: " $a++ . "<br />\n";
echo 
"Sollte 6 sein: " $a "<br />\n";

echo 
"<h3>Pre-Inkrement</h3>";
$a 5;
echo 
"Sollte 6 sein: " . ++$a "<br />\n";
echo 
"Sollte 6 sein: " $a "<br />\n";

echo 
"<h3>Post-Dekrement</h3>";
$a 5;
echo 
"Sollte 5 sein: " $a-- . "<br />\n";
echo 
"Sollte 4 sein: " $a "<br />\n";

echo 
"<h3>Pre-Dekrement</h3>";
$a 5;
echo 
"Sollte 4 sein: " . --$a "<br />\n";
echo 
"Sollte 4 sein: " $a "<br />\n";
?>

PHP folgt bei der Behandlung arithmetischer Operationen an Zeichenvariablen der Perl-Konvention und nicht der von C. Zum Beispiel wird in Perl aus 'Z'+1 'AA', während aus 'Z'+1 in C '[' wird ( ord('Z') == 90, ord('[') == 91 ). Beachten Sie, dass Zeichenvariablen zwar inkrementiert aber nicht dekrementiert werden können.

Beispiel #1 Arithmetrische Operationen an Zeichenvariablen

<?php
$i 
'W';
for(
$n=0$n<6$n++)
  echo ++
$i "\n";

/*
  Erzeugt in etwa folgende Ausgabe:

X
Y
Z
AA
AB
AC

*/
?>



Logische Operatoren

Logische Operatoren
Beispiel Name Ergebnis
$a and $b Und TRUE wenn sowohl $a als auch $b TRUE ist.
$a or $b Oder TRUE wenn $a oder $b TRUE ist.
$a xor $b Entweder Oder TRUE wenn entweder $a oder $b TRUE ist, aber nicht beide.
! $a Nicht TRUE wenn $a nicht TRUE ist.
$a && $b Und TRUE wenn sowohl $a als auch $b TRUE ist.
$a || $b Oder TRUE wenn $a oder $b TRUE ist.

Der Grund dafür, dass es je zwei unterschiedliche Operatoren für die "Und"- und die "Oder"-Verknüpfung gibt ist der, dass die beiden Operatoren jeweils Rangfolgen haben. (siehe auch Operator-Rangfolge.)



Zeichenketten-Operatoren

Es gibt in PHP zwei Operatoren für string (Zeichenkette). Der erste ist der Vereinigungs-Operator ('.'), dessen Rückgabewert eine zusammengesetzte Zeichenkette aus dem rechten und dem linken Argument ist. Der zweite ist der Vereinigungs-Zuweisungsoperator ('.='), der das Argument auf der rechten Seite an das Argument der linken Seite anhängt. Siehe Zuweisungs-Operatoren für weitere Informationen.

<?php
$a 
"Hallo ";
$b $a "Welt!"// $b enthält jetzt den Text "Hallo Welt!"

$a "Hallo ";
$a .= "Welt!";    // $a enthält jetzt den Text "Hallo Welt!"
?>

Siehe auch die Abschnitte über Strings / Zeichenketten und String-Funktionen.



Array-Operatoren

Array-Operatoren
Beispiel Name Ergebnis
$a + $b Vereinigung Verinigung von $a und $b.
$a == $b Gleichwerigkeit TRUE wenn $a und $b die gleichen Schlüssel- und Wert-Paare enthalten.
$a === $b Identität TRUE wenn $a und $b die gleichen Schlüssel- und Wert-Paare in der gleichen Reihenfolge enthalten.
$a != $b Ungleichheit TRUE wenn $a nicht gleich $b ist.
$a <> $b Ungleichheit TRUE wenn $a nicht gleich $b ist.
$a !== $b nicht identisch TRUE wenn $a nicht identisch zu $b ist.

Der + Operator hängt das rechsstehende Array an das linksstehende Array an, wobei doppelte Schlüssel NICHT überschrieben werden.

<?php
$a 
= array("a" => "Apfel""b" => "Banane");
$b = array("a" =>"pear""b" => "Erdbeere""c" => "Kirsche");

$c $a $b// Verinigung von $a mit $b;
echo "Vereinigung von \$a mit \$b: \n";
var_dump($c);

$c $b $a// Vereinigung von $b mit $a;
echo "Vereinigung von \$b mit \$a: \n";
var_dump($c);
?>

Dieses Skript gibt folgendes aus:

Vereinigung von $a mit $b:
array(3) {
  ["a"]=>
  string(5) "Apfel"
  ["b"]=>
  string(6) "Banane"
  ["c"]=>
  string(7) "Kirsche"
}
Vereinigung von $b mit $a:
array(3) {
  ["a"]=>
  string(4) "pear"
  ["b"]=>
  string(8) "Erdbeere"
  ["c"]=>
  string(7) "Kirsche"
}

Beim Vergleich werden Arrayelemente als gleich angesehen, wenn diese dieselben Schlüssel und Werte beinhalten.

Beispiel #1 Array-Vergleiche

<?php
$a 
= array("Apfel""Banane");
$b = array(=> "Banane""0" => "Apfel");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

Siehe auch die Abschnitte über Arrays und Array-Funktionen.



Typ Operatoren

In PHP gibt es einen einzigen Typ Operator: instanceof. instanceof wird dazu verwendet um festzustellen, ob ein gegebenes Objekt ein Objekt ist, das zu einer bestimmten Klasse gehört.

instanceof wurde in PHP 5 eingeführt. Vorher wurde is_a() benutzt, aber is_a() ist veraltet und instanceof sollte stattdessen benutzt werden.

<?php
class A { }
class B { }

$ding = new A;

if ($ding instanceof A) {
    echo 'A';
}
if ($ding instanceof B) {
    echo 'B';
}
?>

Da $ding ein object vom Typ A und nicht von B ist, wird nur der Programmblock ausgeführt, der abhängig von Typ A ist:

A

See auch get_class() und is_a().




Kontrollstrukturen

Inhaltsverzeichnis


Einführung

Ein PHP-Skript besteht aus einer Abfolge von Anweisungen. Eine Anweisung kann eine Zuweisung, ein Funktionsaufruf oder ein bedingte Anweisung sein oder sogar eine Anweisung die nichts tut (eine leere Anweisung). Anweisungen enden in der Regel mit einem Semikolon. Anweisungen können des Weiteren in Anweisungsgruppen zusammengefasst werden indem sie in geschweifte Klammern eingeschlossen werden. Eine Anweisungsgruppe ist ebenfalls wieder eine Anweisung. Die verschiedenen Anweisungstypen werden in diesem Kapitel beschrieben.



if

Das if-Konstrukt ist eines der wichtigsten Features vieler Programmiersprachen, so auch in PHP, denn es ermöglicht die bedingte Ausführung von Kodefragmenten. PHP bietet eine if-Anweisung die der in C ähnelt:

if (expression)
  statement

expression wird wie im Abschnitt über Ausdrücke beschrieben zu einem boolschen Wahrheitswert ausgewertet. Evaluiert expression zu TRUE so wird statement von PHP ausgeführt, anderenfalls wird es ignoriert. Weitere Informationen dazu welche Werte als TRUE oder FALSE ausgewertet werden können Sie im Abschnitt 'Umwandlung zu boolean'.

Das folgende Beispiel würde a ist größer als b ausgeben wenn $a größer als $b ist:

<?php
if ($a $b)
  echo 
"a ist größer als b";
?>

Oft werden Sie mehr als eine Anweisung bedingt ausführen wollen. Dazu ist es natürlich nicht möglich jede Anweisung mit einer eigenen if-Anweisung zu versehen. Sie können statt dessen mehrere Anweisung zu einer Anweisungsgruppe zusammenfassen. So würde z.B. der folgende Programmcode a ist größer als b ausgeben und den Wert von $a an $b zuweisen:

<?php
if ($a $b) {
  echo 
"a ist größer als b";
  
$b $a;
}
?>

If-Anweisungen können beliebig oft ineinander verschachtelt werden und bieten Ihnen so vollständige Flexibilität für die bedingte Ausführung der verschiedenen Teile Ihres Programs.



else

Oft will man eine Anweisung ausführen wenn eine bestimmte Bedingung erfüllt ist und eine andere Anweisung wenn dies nicht der Fall ist. Dies ist der Einsatzzweck von else. else erweitert eine if-Anweisung um eine weitere Anweisung die dann ausgeführt werden soll wenn der Ausdruck in der if-Anweisung zu FALSE ausgewertet wird. Der folgende Programmkode würde z.B. a ist größer als b ausgeben wenn $a größer als b ist, ansonsten a ist NICHT größer als b

<?php
if ($a $b) {
  echo 
"a ist größer als b";
} else {
  echo 
"a ist NICHT größer als b";
}
?>

Die else Anweisung wird nur dann ausgeführt wenn der if Ausdruck und alle etwaigen elseif als FALSE ausgewertet wurden (siehe auch elseif).



elseif/else if

elseif, as its name suggests, is a combination of if and else. Like else, it extends an if statement to execute a different statement in case the original if expression evaluates to FALSE. However, unlike else, it will execute that alternative expression only if the elseif conditional expression evaluates to TRUE. For example, the following code would display a is bigger than b, a equal to b or a is smaller than b:

<?php
if ($a $b) {
    echo 
"a is bigger than b";
} elseif (
$a == $b) {
    echo 
"a is equal to b";
} else {
    echo 
"a is smaller than b";
}
?>

There may be several elseifs within the same if statement. The first elseif expression (if any) that evaluates to TRUE would be executed. In PHP, you can also write 'else if' (in two words) and the behavior would be identical to the one of 'elseif' (in a single word). The syntactic meaning is slightly different (if you're familiar with C, this is the same behavior) but the bottom line is that both would result in exactly the same behavior.

The elseif statement is only executed if the preceding if expression and any preceding elseif expressions evaluated to FALSE, and the current elseif expression evaluated to TRUE.

Hinweis: Note that elseif and else if will only be considered exactly the same when using curly brackets as in the above example. When using a colon to define your if/elseif conditions, you must not separate else if into two words, or PHP will fail with a parse error.

<?php

/* Incorrect Method: */
if($a $b):
    echo 
$a." is greater than ".$b;
else if(
$a == $b): // Will not compile.
    
echo "The above line causes a parse error.";
endif;


/* Correct Method: */
if($a $b):
    echo 
$a." is greater than ".$b;
elseif(
$a == $b): // Note the combination of the words.
    
echo $a." equals ".$b;
else:
    echo 
$a." is neither greater than or equal to ".$b;
endif;

?>



Alternative Syntax für Kontrollstrukturen

PHP bietet eine alternative Syntax für einige seiner Kontrollstrukturen an, namentlich für if, while, for, foreach und switch. In jedem Fall ist die Grundform der alternativen Syntax ein Wechsel der öffnenden Klammer gegen einen Doppelpunkt (:) und der schließenden Klammer in endif;, endwhile, endfor;, endforeach; respektive endswitch.

<?php if ($a == 5): ?>
A ist gleich 5
<?php endif; ?>

Im obigen Beispiel ist der HTML-Block "A ist gleich 5" in ein if-Statement verschachtelt, das in alternativer Syntax notiert ist. Der HTML-Block würde nur angezeigt werden, wenn $a gleich 5 ist.

Die alternative Syntax lässt sich ebenfalls auf else und elseif anwenden. Im Folgenden wird eine if-Struktur mit elseif- und else-Teilen im alternativen Format gezeigt:

<?php
if ($a == 5):
    echo 
"a gleich 5";
    echo 
"...";
elseif (
$a == 6):
    echo 
"a gleich 6";
    echo 
"!!!";
else:
    echo 
"a ist weder 5 noch 6";
endif;
?>

Siehe auch while, for und if für weitere Beispiele.



while

while loops are the simplest type of loop in PHP. They behave just like their C counterparts. The basic form of a while statement is:

while (expr)
    statement

The meaning of a while statement is simple. It tells PHP to execute the nested statement(s) repeatedly, as long as the while expression evaluates to TRUE. The value of the expression is checked each time at the beginning of the loop, so even if this value changes during the execution of the nested statement(s), execution will not stop until the end of the iteration (each time PHP runs the statements in the loop is one iteration). Sometimes, if the while expression evaluates to FALSE from the very beginning, the nested statement(s) won't even be run once.

Like with the if statement, you can group multiple statements within the same while loop by surrounding a group of statements with curly braces, or by using the alternate syntax:

while (expr):
    statement
    ...
endwhile;

The following examples are identical, and both print the numbers 1 through 10:

<?php
/* example 1 */

$i 1;
while (
$i <= 10) {
    echo 
$i++;  /* the printed value would be
                   $i before the increment
                   (post-increment) */
}

/* example 2 */

$i 1;
while (
$i <= 10):
    echo 
$i;
    
$i++;
endwhile;
?>



do-while

do-while-Schleifen sind sehr ähnlich zu while-Schleifen, außer dass der Wahrheitsausdruck erst am Ende eines jeden Durchlaufs statt zu dessen Beginn geprüft wird. Der Hauptunterschied zu einer normalen while-Schleife ist, dass die do-while-Schleife garantiert mindestens einmal durchlaufen wird (Der Wahrheitsausdruck wird ja nur am Ende jeden Durchlaufs geprüft), wohingegen es nicht zwingend ist, dass eine reguläre while-Schleife immer ausgeführt wird (hier wird der Wahrheitsausdruck bereits zu Beginn eines jeden Durchlaufs überprüft. Evaluiert er dabei zu FALSE, wird die Verarbeitung der Schleife sofort abgebrochen).

Es gibt nur eine Syntax für do-while-Schleifen:

<?php
$i 
0;
do {
    echo 
$i;
} while (
$i 0);
?>

Die obige Schleife wird exakt einmal durchlaufen, da nach dem ersten Durchlauf, wenn der Wahrheitsausdruck geprüft wird, dieser FALSE ergibt ($i ist nicht größer als 0), so dass die Schleifenausführung beendet wird.

Fortgeschrittenen C-Programmierern ist möglicherweise eine etwas andere Verwendung von do-while-Schleifen bekannt, die es erlaubt, die Ausführung in der Mitte des Codeblocks zu unterbrechen. Dies wird durch ein Kapseln in do-while(0) und die Verwendung des break-Statements erreicht. Das folgende Codefragment demonstriert dieses Verhalten:

<?php
do {
    if (
$i 5) {
        echo 
"i ist nicht groß genug";
        break;
    }
    
$i *= $factor;
    if (
$i $minimum_limit) {
        break;
    }
   echo 
"i ist ok";

    
/* i verarbeiten */

} while (0);
?>

Seien Sie nicht traurig, wenn Sie dies nicht oder nicht ganz verstehen. Sie können trotzdem Skripte - und wirklich leistungsfähige Skripte! - programmieren, ohne dieses "Feature" zu verwenden. Seit PHP 5.3.0 ist es möglich, statt dieses Hacks den goto-Operator zu verwenden.



for

for loops are the most complex loops in PHP. They behave like their C counterparts. The syntax of a for loop is:

for (expr1; expr2; expr3)
    statement

The first expression (expr1) is evaluated (executed) once unconditionally at the beginning of the loop.

In the beginning of each iteration, expr2 is evaluated. If it evaluates to TRUE, the loop continues and the nested statement(s) are executed. If it evaluates to FALSE, the execution of the loop ends.

At the end of each iteration, expr3 is evaluated (executed).

Each of the expressions can be empty or contain multiple expressions separated by commas. In expr2, all expressions separated by a comma are evaluated but the result is taken from the last part. expr2 being empty means the loop should be run indefinitely (PHP implicitly considers it as TRUE, like C). This may not be as useless as you might think, since often you'd want to end the loop using a conditional break statement instead of using the for truth expression.

Consider the following examples. All of them display the numbers 1 through 10:

<?php
/* example 1 */

for ($i 1$i <= 10$i++) {
    echo 
$i;
}

/* example 2 */

for ($i 1; ; $i++) {
    if (
$i 10) {
        break;
    }
    echo 
$i;
}

/* example 3 */

$i 1;
for (; ; ) {
    if (
$i 10) {
        break;
    }
    echo 
$i;
    
$i++;
}

/* example 4 */

for ($i 1$j 0$i <= 10$j += $i, print $i$i++);
?>

Of course, the first example appears to be the nicest one (or perhaps the fourth), but you may find that being able to use empty expressions in for loops comes in handy in many occasions.

PHP also supports the alternate "colon syntax" for for loops.

for (expr1; expr2; expr3):
    statement
    ...
endfor;

Its a common thing to many users to iterate though arrays like in the example below.

<?php
/*
* This is an array with some data we want to modify
* when running through the for loop.
*/
$people = Array(
        Array(
'name' => 'Kalle''salt' => 856412),
        Array(
'name' => 'Pierre''salt' => 215863)
        );

for(
$i 0$i sizeof($people); ++$i)
{
    
$people[$i]['salt'] = rand(000000999999);
}
?>

The problem lies in the second for expression. This code can be slow because it has to calculate the size of the array on each iteration. Since the size never change, it can be optimized easily using an intermediate variable to store the size and use in the loop instead of sizeof. The example below illustrates this:

<?php
$people 
= Array(
        Array(
'name' => 'Kalle''salt' => 856412),
        Array(
'name' => 'Pierre''salt' => 215863)
        );

for(
$i 0$size sizeof($people); $i $size; ++$i)
{
    
$people[$i]['salt'] = rand(000000999999);
}
?>



foreach

PHP 4 introduced a foreach construct, much like Perl and some other languages. This simply gives an easy way to iterate over arrays. foreach works only on arrays, and will issue an error when you try to use it on a variable with a different data type or an uninitialized variable. There are two syntaxes; the second is a minor but useful extension of the first:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

The first form loops over the array given by array_expression. On each loop, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next loop, you'll be looking at the next element).

The second form does the same thing, except that the current element's key will be assigned to the variable $key on each loop.

As of PHP 5, it is possible to iterate objects too.

Hinweis: When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop.

Hinweis: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it.

As of PHP 5, you can easily modify array's elements by preceding $value with &. This will assign reference instead of copying the value.

<?php
$arr 
= array(1234);
foreach (
$arr as &$value) {
    
$value $value 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
?>

This is possible only if iterated array can be referenced (i.e. is variable), that means the following code won't work:

<?php
foreach (array(1234) as &$value) {
    
$value $value 2;
}

?>

Warnung

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().

Hinweis: foreach does not support the ability to suppress error messages using '@'.

You may have noticed that the following are functionally identical:

<?php
$arr 
= array("one""two""three");
reset($arr);
while (list(, 
$value) = each($arr)) {
    echo 
"Value: $value<br />\n";
}

foreach (
$arr as $value) {
    echo 
"Value: $value<br />\n";
}
?>

The following are also functionally identical:

<?php
$arr 
= array("one""two""three");
reset($arr);
while (list(
$key$value) = each($arr)) {
    echo 
"Key: $key; Value: $value<br />\n";
}

foreach (
$arr as $key => $value) {
    echo 
"Key: $key; Value: $value<br />\n";
}
?>

Some more examples to demonstrate usages:

<?php
/* foreach example 1: value only */

$a = array(12317);

foreach (
$a as $v) {
    echo 
"Current value of \$a: $v.\n";
}

/* foreach example 2: value (with its manual access notation printed for illustration) */

$a = array(12317);

$i 0/* for illustrative purposes only */

foreach ($a as $v) {
    echo 
"\$a[$i] => $v.\n";
    
$i++;
}

/* foreach example 3: key and value */

$a = array(
    
"one" => 1,
    
"two" => 2,
    
"three" => 3,
    
"seventeen" => 17
);

foreach (
$a as $k => $v) {
    echo 
"\$a[$k] => $v.\n";
}

/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach (
$a as $v1) {
    foreach (
$v1 as $v2) {
        echo 
"$v2\n";
    }
}

/* foreach example 5: dynamic arrays */

foreach (array(12345) as $v) {
    echo 
"$v\n";
}
?>



break

break beendet die Ausführung der aktuellen for-, foreach-, while-, do-while- oder switch-Struktur.

break akzeptiert ein optionales numerisches Argument, das angibt, aus wievielen der es umschließenden verschachtelten Strukturen ausgebrochen werden soll.

<?php
$arr 
= array('eins''zwei''drei''vier''stop''fünf');
while (list(, 
$val) = each($arr)) {
    if (
$val == 'stop') {
        break;    
/* Sie könnten hier auch 'break 1;' schreiben. */
    
}
    echo 
"$val<br />\n";
}

/* Nutzung des optionalen Arguments. */

$i 0;
while (++
$i) {
    switch (
$i) {
    case 
5:
        echo 
"Bei 5<br />\n";
        break 
1;  /* Verlässt nur das switch. */
    
case 10:
        echo 
"Bei 10; breche ab<br />\n";
        break 
2;  /* Verlässt das switch und das while. */
    
default:
        break;
    }
}
?>



continue

continue wird innerhalb von Schleifen verwendet, um den Rest des aktuellen Schleifendurchlaufs abzubrechen und mit der Auswertung der nächsten Bedingung fortzufahren, um dann den nächsten Durchlauf zu beginnen.

Hinweis: Beachten Sie, dass in PHP das switch-Statement im Sinne von continue als Schleifenstruktur betrachtet wird.

continue akzeptiert ein optionales numerisches Argument, das angibt, wie viele Ebenen umschließender Schleifen bis zu ihrem Ende übersprungen werden sollen.

<?php
while (list($key$value) = each($arr)) {
    if (!(
$key 2)) { // ignoriere ungerade Werte
        
continue;
    }
    
mach_etwas_ungerade($value);
}

$i 0;
while (
$i++ < 5) {
    echo 
"Äußere<br />\n";
    while (
1) {
        echo 
"&nbsp;&nbsp;Mittlere<br />\n";
        while (
1) {
            echo 
"&nbsp;&nbsp;Innere<br />\n";
            continue 
3;
        }
        echo 
"Das hier wird nie ausgegeben.<br />\n";
    }
    echo 
"Das hier ebenfalls nicht.<br />\n";
}
?>

Das Weglassen des Semikolons nach continue kann zu unerwarteten Ergebnissen führen. Hier ist ein Beispiel, das zeigt, was Sie nicht tun sollten.

<?php
for ($i 0$i 5; ++$i) {
    if (
$i == 2)
        continue
    print 
"$i\n";
}
?>

Man könnte meinen, die Ausgabe wäre:

0
1
3
4

aber das Skript gibt in Wirklichkeit ...

2

... aus, da der Rückgabewert des print()-Aufrufs int(1) ist und daher als das oben genannte optionale numerische Argument betrachtet wird.



switch

The switch statement is similar to a series of IF statements on the same expression. In many occasions, you may want to compare the same variable (or expression) with many different values, and execute a different piece of code depending on which value it equals to. This is exactly what the switch statement is for.

Hinweis: Note that unlike some other languages, the continue statement applies to switch and acts similar to break. If you have a switch inside a loop and wish to continue to the next iteration of the outer loop, use continue 2.

Hinweis: Note that switch/case does loose comparision.

The following two examples are two different ways to write the same thing, one using a series of if and elseif statements, and the other using the switch statement:

Beispiel #1 switch structure

<?php
if ($i == 0) {
    echo 
"i equals 0";
} elseif (
$i == 1) {
    echo 
"i equals 1";
} elseif (
$i == 2) {
    echo 
"i equals 2";
}

switch (
$i) {
    case 
0:
        echo 
"i equals 0";
        break;
    case 
1:
        echo 
"i equals 1";
        break;
    case 
2:
        echo 
"i equals 2";
        break;
}
?>

Beispiel #2 switch structure allows usage of strings

<?php
switch ($i) {
    case 
"apple":
        echo 
"i is apple";
        break;
    case 
"bar":
        echo 
"i is bar";
        break;
    case 
"cake":
        echo 
"i is cake";
        break;
}
?>

It is important to understand how the switch statement is executed in order to avoid mistakes. The switch statement executes line by line (actually, statement by statement). In the beginning, no code is executed. Only when a case statement is found with a value that matches the value of the switch expression does PHP begin to execute the statements. PHP continues to execute the statements until the end of the switch block, or the first time it sees a break statement. If you don't write a break statement at the end of a case's statement list, PHP will go on executing the statements of the following case. For example:

<?php
switch ($i) {
    case 
0:
        echo 
"i equals 0";
    case 
1:
        echo 
"i equals 1";
    case 
2:
        echo 
"i equals 2";
}
?>

Here, if $i is equal to 0, PHP would execute all of the echo statements! If $i is equal to 1, PHP would execute the last two echo statements. You would get the expected behavior ('i equals 2' would be displayed) only if $i is equal to 2. Thus, it is important not to forget break statements (even though you may want to avoid supplying them on purpose under certain circumstances).

In a switch statement, the condition is evaluated only once and the result is compared to each case statement. In an elseif statement, the condition is evaluated again. If your condition is more complicated than a simple compare and/or is in a tight loop, a switch may be faster.

The statement list for a case can also be empty, which simply passes control into the statement list for the next case.

<?php
switch ($i) {
case 
0:
case 
1:
case 
2:
    echo 
"i is less than 3 but not negative";
    break;
case 
3:
    echo 
"i is 3";
}
?>

A special case is the default case. This case matches anything that wasn't matched by the other cases. For example:

<?php
switch ($i) {
    case 
0:
        echo 
"i equals 0";
        break;
    case 
1:
        echo 
"i equals 1";
        break;
    case 
2:
        echo 
"i equals 2";
        break;
    default:
       echo 
"i is not equal to 0, 1 or 2";
}
?>

The case expression may be any expression that evaluates to a simple type, that is, integer or floating-point numbers and strings. Arrays or objects cannot be used here unless they are dereferenced to a simple type.

The alternative syntax for control structures is supported with switches. For more information, see Alternative syntax for control structures.

<?php
switch ($i):
    case 
0:
        echo 
"i equals 0";
        break;
    case 
1:
        echo 
"i equals 1";
        break;
    case 
2:
        echo 
"i equals 2";
        break;
    default:
        echo 
"i is not equal to 0, 1 or 2";
endswitch;
?>

Its possible to use a semicolon instead of a colon after a case like:

<?php
switch($beer)
{
    case 
'tuborg';
    case 
'carlsberg';
    case 
'heineken';
        echo 
'Good choice';
    break;
    default;
        echo 
'Please make a new selection...';
    break;
}
?>



declare

Das declare-Konstrukt wird verwendet, um Ausführungsdirektiven für einen Codeblock festzulegen. Die Syntax von declare ist ähnliche wie die Syntax anderer Ablauf-Kontrollstrukturen:

declare (directive)
    statement

Die directive-Sektion erlaubt es, das Verhalten des declare-Blocks anzugeben. Aktuell werden zwei Direktiven unterstützt: die ticks-Direktive (siehe unten für weitere Informationen über die ticks-Direktive) und die encoding-Direktive (siehe unten für weitere Informationen über die encoding-Direktive).

Hinweis: Die Encoding-Direktive wurde in PHP 5.3.0 hinzugefügt.

Der statement-Teil des declare-Blocks wird ausgeführt - wie genau die Ausführung aussieht und welche Seiteneffekte während der Ausführung auftreten können, ist abhängig von der im directive-Block gesetzten Direktive.

Das declare-Konstrukt kann außerdem im globalen Sichtbarkeitsbereich verwendet werden, es hat dann Auswirkungen auf den gesamten folgenden Code (wird die Datei mit der declare-Anweisung inkludiert, hat die Anweisung jedoch keine Auswirkung auf das einbindende File).

<?php
// dies sind gleichwertige Schreibweisen:

// Sie können diese Schreibweise verwenden:
declare(ticks=1) {
    
// hier das vollständige Skript einfügen
}

// oder diese:
declare(ticks=1);
// hier das vollständige Skript einfügen
?>

Ticks

Achtung

Mit PHP 5.3.0 gilt Ticks als veraltet und wird mit PHP 6.0.0 entfernt.

Ein Tick ist ein Event, das alle N Low-Level-Statements auftritt, die vom Parser innerhalb des declare-Blocks ausgeführt werden. Der Wert für N wird durch die Verwendung von ticks=N innerhalb der directive-Sektion des declare-Blocks angegeben.

Das/die bei jedem Tick auftretenden Event(s) werden durch die Verwendung der Funktion register_tick_function() angegeben. Betrachten Sie das folgende Beispiel für mehr Details. Beachten Sie, dass mehr als ein Event bei jedem Tick auftreten kann.

Beispiel #1 Eine PHP-Codesektion profilen

<?php
// Eine Funktion, die die Zeit aufzeichnet, zu der sie aufgerufen wurde
function profile($dump FALSE)
{
    static 
$profile;

    
// Gibt die im Profil gespeicherten Zeiten zurück und löscht sie danach
    
if ($dump) {
        
$temp $profile;
        unset(
$profile);
        return 
$temp;
    }

    
$profile[] = microtime();
}

// Einen Tick-Handler angeben
register_tick_function("profile");

// Die Funktion vor dem declare-Block initialisieren
profile();

// Einen Codeblock ausführen, bei jedem zweiten Statement einen Tick auslösen
declare(ticks=2) {
    for (
$x 1$x 50; ++$x) {
        echo 
similar_text(md5($x), md5($x*$x)), "<br />;";
    }
}

// Die im Profiler gespeicherten Daten anzeigen
print_r(profile(TRUE));
?>

Das Beispiel analysiert den PHP-Code im 'declare'-Block und erfasst die Zeiten, an denen jedes zweite Low-Level-Statement innerhalb des Blocks ausgeführt wurde. Diese Information kann danach verwendet werden, um die langsamen Bereiche eines bestimmten Codesegments ausfindig zu machen. Dieser Prozess kann auch mit anderen Methoden ausgeführt werden - die Verwendung von Ticks ist einfacher und leichter zu implementieren.

Ticks sind sehr geeignet für das Debugging, die Implementierung einfachen Multitaskings, I/O-Verarbeitung im Hintergrund und viele weitere Anwendungen.

Siehe auch register_tick_function() und unregister_tick_function().

Encoding

Das Encoding eines Skripts kann pro Skript mittels der Encoding-Direktive festgelegt werden.

Beispiel #2 Das Encoding eines Skripts deklarieren.

<?php
declare(encoding='ISO-8859-1');
// hier folgt der Code
?>

Achtung

Die einzig zulässige Syntax für ein declare, das mit Namespaces kombiniert wird, ist declare(encoding='...');, wobei ... der encodete Wert ist. declare(encoding='...') {} bewirkt einen Parse-Error, wenn es mit Namespaces kombiniert wird.

Der encodete declare-Wert wird in PHP 5.3 ignoriert, sofern PHP nicht mit --enable-zend-multibyte kompiliert wurde. In PHP 6.0.0 wird die encoding-Direktive verwendet, um den Scanner darüber zu informieren, mit welchem Encoding die Datei erstellt wurde. Zulässige Werte sind Encodingbezeichnungen wie UTF-8.



return

If called from within a function, the return() statement immediately ends execution of the current function, and returns its argument as the value of the function call. return() will also end the execution of an eval() statement or script file.

If called from the global scope, then execution of the current script file is ended. If the current script file was include()ed or require()ed, then control is passed back to the calling file. Furthermore, if the current script file was include()ed, then the value given to return() will be returned as the value of the include() call. If return() is called from within the main script file, then script execution ends. If the current script file was named by the auto_prepend_file or auto_append_file configuration options in php.ini, then that script file's execution is ended.

For more information, see Returning values.

Hinweis: Note that since return() is a language construct and not a function, the parentheses surrounding its arguments are not required. It is common to leave them out, and you actually should do so as PHP has less work to do in this case.

Hinweis: If no parameter is supplied, then the parentheses must be omitted and NULL will be returned. Calling return() with parentheses but with no arguments will result in a parse error.

Hinweis: You should never use parentheses around your return variable when returning by reference, as this will not work. You can only return variables by reference, not the result of a statement. If you use return ($a); then you're not returning a variable, but the result of the expression ($a) (which is, of course, the value of $a).



require()

require() entspricht im Wesentlichen include(), wirft aber im Fehlerfall einen E_ERROR Fehler. Es beendet also die Programmausführung während include() nur eine Warnung (E_WARNING) generiert und so die weitere Programmausführung gestattet.

Weitere Informationen hierzu finden Sie in der include()-Dokumentation.



include()

The include() statement includes and evaluates the specified file.

The documentation below also applies to require().

Files are included based on the file path given or, if none is given, the include_path specified. The include() construct will emit a warning if it cannot find a file; this is different behavior from require(), which will emit a fatal error.

If a path is defined (full or relative), the include_path will be ignored altogether. For example, if a filename begins with ../, the parser will look in the parent directory to find the requested file.

For more information on how PHP handles including files and the include path, see the documentation for include_path.

When a file is included, the code it contains inherits the variable scope of the line on which the include occurs. Any variables available at that line in the calling file will be available within the called file, from that point forward. However, all functions and classes defined in the included file have the global scope.

Beispiel #1 Basic include() example

vars.php
<?php

$color 
'green';
$fruit 'apple';

?>

test.php
<?php

echo "A $color $fruit"// A

include 'vars.php';

echo 
"A $color $fruit"// A green apple

?>

If the include occurs inside a function within the calling file, then all of the code contained in the called file will behave as though it had been defined inside that function. So, it will follow the variable scope of that function. An exception to this rule are magic constants which are evaluated by the parser before the include occurs.

Beispiel #2 Including within functions

<?php

function foo()
{
    global 
$color;

    include 
'vars.php';

    echo 
"A $color $fruit";
}

/* vars.php is in the scope of foo() so     *
* $fruit is NOT available outside of this  *
* scope.  $color is because we declared it *
* as global.                               */

foo();                    // A green apple
echo "A $color $fruit";   // A green

?>

When a file is included, parsing drops out of PHP mode and into HTML mode at the beginning of the target file, and resumes again at the end. For this reason, any code inside the target file which should be executed as PHP code must be enclosed within valid PHP start and end tags.

If "URL fopen wrappers" are enabled in PHP (which they are in the default configuration), you can specify the file to be included using a URL (via HTTP or other supported wrapper - see List of Supported Protocols/Wrappers for a list of protocols) instead of a local pathname. If the target server interprets the target file as PHP code, variables may be passed to the included file using a URL request string as used with HTTP GET. This is not strictly speaking the same thing as including the file and having it inherit the parent file's variable scope; the script is actually being run on the remote server and the result is then being included into the local script.

Warnung

PHP-Versionen kleiner 4.3.0 für Windows, erlauben den Zugriff auf Remote-Dateien mit dieser Funktion nicht, selbst wenn allow_url_fopen aktiviert ist.

Beispiel #3 include() through HTTP

<?php

/* This example assumes that www.example.com is configured to parse .php
* files and not .txt files. Also, 'Works' here means that the variables
* $foo and $bar are available within the included file. */

// Won't work; file.txt wasn't handled by www.example.com as PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';

// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';

// Works.
include 'http://www.example.com/file.php?foo=1&bar=2';

$foo 1;
$bar 2;
include 
'file.txt';  // Works.
include 'file.php';  // Works.

?>

Warnung

Security warning

Remote file may be processed at the remote server (depending on the file extension and the fact if the remote server runs PHP or not) but it still has to produce a valid PHP script because it will be processed at the local server. If the file from the remote server should be processed there and outputted only, readfile() is much better function to use. Otherwise, special care should be taken to secure the remote script to produce a valid and desired code.

See also Remote files, fopen() and file() for related information.

Handling Returns: It is possible to execute a return() statement inside an included file in order to terminate processing in that file and return to the script which called it. Also, it's possible to return values from included files. You can take the value of the include call as you would a normal function. This is not, however, possible when including remote files unless the output of the remote file has valid PHP start and end tags (as with any local file). You can declare the needed variables within those tags and they will be introduced at whichever point the file was included.

Because include() is a special language construct, parentheses are not needed around its argument. Take care when comparing return value.

Beispiel #4 Comparing return value of include

<?php
// won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('')
if (include('vars.php') == 'OK') {
    echo 
'OK';
}

// works
if ((include 'vars.php') == 'OK') {
    echo 
'OK';
}
?>

Beispiel #5 include() and the return() statement

return.php
<?php

$var 
'PHP';

return 
$var;

?>

noreturn.php
<?php

$var 
'PHP';

?>

testreturns.php
<?php

$foo 
= include 'return.php';

echo 
$foo// prints 'PHP'

$bar = include 'noreturn.php';

echo 
$bar// prints 1

?>

$bar is the value 1 because the include was successful. Notice the difference between the above examples. The first uses return() within the included file while the other does not. If the file can't be included, FALSE is returned and E_WARNING is issued.

If there are functions defined in the included file, they can be used in the main file independent if they are before return() or after. If the file is included twice, PHP 5 issues fatal error because functions were already declared, while PHP 4 doesn't complain about functions defined after return(). It is recommended to use include_once() instead of checking if the file was already included and conditionally return inside the included file.

Another way to "include" a PHP file into a variable is to capture the output by using the Output Control Functions with include(). For example:

Beispiel #6 Using output buffering to include a PHP file into a string

<?php
$string 
get_include_contents('somefile.php');

function 
get_include_contents($filename) {
    if (
is_file($filename)) {
        
ob_start();
        include 
$filename;
        
$contents ob_get_contents();
        
ob_end_clean();
        return 
$contents;
    }
    return 
false;
}

?>

In order to automatically include files within scripts, see also the auto_prepend_file and auto_append_file configuration options in php.ini.

Hinweis: Da dies ein Sprachkonstrukt und keine Funktion ist, können Sie dieses nicht mit Variablenfunktionen verwenden.

See also require(), require_once(), include_once(), get_included_files(), readfile(), virtual(), and include_path.



require_once()

Die require_once() entspricht im Wesentlichen der Funktion require(). PHP prüft hier allerdings ob die gewünschte Datei bereits eingebunden wurde und wird sie in diesem Fall nicht ein weiteres mal einbinden.

Nähere Informationen zum Verhalten von _once und wie es sich von seinem nicht-_once-Gegenstück unterscheidet finden Sie in der Dokumentation zu include_once().



include_once()

The include_once() statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the include() statement, with the only difference being that if the code from a file has already been included, it will not be included again. As the name suggests, it will be included just once.

include_once() may be used in cases where the same file might be included and evaluated more than once during a particular execution of a script, so in this case it may help avoid problems such as function redefinitions, variable value reassignments, etc.

See the include() documentation for information about how this function works.

Hinweis: With PHP 4, _once functionality differs with case-insensitive operating systems (like Windows) so for example:

Beispiel #1 include_once() with a case insensitive OS in PHP 4

<?php
include_once "a.php"// this will include a.php
include_once "A.php"// this will include a.php again! (PHP 4 only)
?>


This behaviour changed in PHP 5, so for example with Windows the path is normalized first so that C:\PROGRA~1\A.php is realized the same as C:\Program Files\a.php and the file is included just once.



goto

Der goto-Operator kann benutzt werden um innerhalb eines Programs zu einer anderen Anweisung zu springen. Die Zielanweisung wird durch einen Namen gefolgt von einem Doppelpunkt festgelegt und der goto-Anweisung wird der entsprechende Zielname angefügt.

Beispiel #1 goto-Beispiel

<?php
goto a;
echo 
'Foo';
 
a:
echo 
'Bar';
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Bar

Hinweis: Der goto-Operator ist ab PHP 5.3 verfügbar.

Warnung

Es ist nicht gestattet in eine Schleife oder eine Switch-Anweisung hineinzuspringen, in so einem Fall wird ein fataler Fehler geworfen.




Funktionen

Inhaltsverzeichnis


Vom Nutzer definierte Funktionen

Eine Funktion kann wie folgt definiert werden:

Beispiel #1 Pseudocode zur Demonstration der Nutzung von Variablen

<?php
function foo ($arg_1$arg_2, ..., $arg_n)
{
    echo 
"Beispielfunktion.\n";
    return 
$retval;
}
?>

Jeder beliebige korrekte PHP-Code kann in einer Funktion vorkommen, sogar andere Funktionen und Klassen-Definitionen.

Für Funktionsnamen gelten in PHP die gleichen Regeln wie für andere Bezeichner. Ein gültiger Funktionsname beginnt mit einem Buchstaben oder Unterstrich gefolgt von einer beliebigen Anzahl von Buchstaben, Ziffern und Unterstrichen. Als regulärer Ausdruck wird dies so ausgedrückt: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Tipp

Siehe auch Userland Naming Guide.

Es ist nicht erforderlich, dass Funktionen bereits definiert sein müssen, wenn auf sie verviesen wird, außer wenn eine Funktion nur bedingt definiert wird, wie in den beiden untenstehenden Beispielen gezeigt.

Wenn eine Funktion nur unter bestimmten Bedingungen definiert wird, muss die Definition dieser Funktion noch vor deren Aufruf abgearbeitet werden.

Beispiel #2 Bedingte Funktionen

<?php

$makefoo 
true;

/* Wir können foo() von hier aus nicht
   aufrufen, da sie noch nicht existiert,
   aber wir können bar() aufrufen */

bar();

if (
$makefoo) {
  function 
foo ()
  {
    echo 
"Ich existiere nicht, bis mich die Programmausführung erreicht hat.\n";
  }
}

/* Nun können wir foo() sicher aufrufen,
   da $makefoo als true ausgewertet wurde */

if ($makefoofoo();

function 
bar()
{
  echo 
"Ich existiere sofort nach Programmstart.\n";
}

?>

Beispiel #3 Funktionen innerhalb von Funktionen

<?php
function foo()
{
  function 
bar()
  {
    echo 
"Ich existiere nicht, bis foo() aufgerufen wurde.\n";
  }
}

/* Wir können bar() noch nicht
   aufrufen, da es nicht existiert */

foo();

/* Nun können wir auch bar() aufrufen,
   da sie durch die Abarbeitung von
   foo() verfügbar gemacht wurde */

bar();

?>

Alle Funktionen und Klassen in PHP existieren im globalen Namensraum - sie können außerhalb von Funktionen aufgerufen werden, selbst wenn sie innerhalb einer Funktion definiert wurden und umgekehrt.

PHP unterstützt weder das Überladen von Funktionen, noch ist es möglich, zuvor deklarierte Funktionen neu zu definieren oder die Definition zu löschen.

Hinweis: Groß- und Kleinschreibung spielt zwar bei Funktionsnamen keine Rolle, es empfiehlt sich aber trotzdem bei Funktionsaufrufen die gleiche Schreibweise wie in der Deklaration zu benutzen.

Sowohl eine variable Anzahl Parameter als auch Vorgabewerte für Parameter werden in Funktionen unterstützt. Siehe auch die Funktionsreferenzen für func_num_args(), func_get_arg() und func_get_args() für weitere Informationen.

Es ist in PHP möglich, Funktionen rekursiv aufzurufen. Sie sollten aber rekursive Aufrufe mit einer Rekursionstiefe von mehr als 100-200 vermeiden, da diese zu einem Stacküberlauf und damit zum Programmabbruch führen können.

Beispiel #4 Rekursive Funktionen

<?php
function recursion($a)
{
    if (
$a 20) {
        echo 
"$a\n";
        
recursion($a 1);
    }
}
?>



Funktionsparameter

Mit einer Parameterliste kann man Informationen an eine Funktion übergeben. Die Parameterliste ist eine durch Kommas getrennte Liste von Ausdrücken.

PHP unterstützt die Weitergabe von Parametern als Werte (das ist der Standard), als Verweise und als Vorgabewerte. Eine variable Anzahl von Parametern wird ebenfalls unterstützt, siehe auch die Funktionsreferenzen für func_num_args(), func_get_arg() und func_get_args() für weitere Informationen.

Beispiel #1 Arrays an Funktionen übergeben

<?php
function rechne_array($eingabe)
{
    echo 
"$eingabe[0] + $eingabe[1] = "$eingabe[0]+$eingabe[1];
}
?>

Verweise als Parameter übergeben

Normalerweise werden den Funktionen Werte als Parameter übermittelt. Wenn man den Wert dieses Parameters innerhalb der Funktion ändert, bleibt der Parameter außerhalb der Funktion unverändert. Wollen Sie aber erreichen, dass die Änderung auch außerhalb der Funktion sichtbar wird, müssen Sie die Parameter als Verweise (Referenzen) übergeben.

Wenn eine Funktion einen Parameter generell als Verweis behandeln soll, setzt man in der Funktionsdefinition ein kaufmännisches Und (&) vor den Parameternamen:

Beispiel #2 Übergeben von Funktionsparametern als Verweis

<?php
function fuege_etwas_anderes_an (&$string)
{
    
$string .= 'und nun zu etwas anderem.';
}
$str 'Dies ist ein String, ';
fuege_etwas_anderes_an ($str);
echo 
$str// Ausgabe: 'Dies ist ein String, und nun zu etwas anderem.'
?>

Vorgabewerte für Parameter

Eine Funktion kann C++-artige Vorgabewerte für skalare Parameter wie folgt definieren:

Beispiel #3 Einsatz von Vorgabeparametern

<?php
function machkaffee ($typ "Cappucino")
{
    return 
"Ich mache eine Tasse $typ.\n";
}
echo 
machkaffee ();
echo 
machkaffee (null);
echo 
machkaffee ("Espresso");
?>

Die Ausgabe von diesem kleinen Skript ist:


Ich mache eine Tasse Cappucino.
Ich mache eine Tasse.
Ich mache eine Tasse Espresso.

PHP gestattet es, Arrays und den speziellen Typ NULL als Vorgabewert zu nutzen, zum Beispiel:

Beispiel #4 Nichtskalare Typen als Vorgabewert

<?php
function makecoffee ($types = array("cappuccino"), $coffeeMaker NULL)
{
    
$device is_null($coffeeMaker) ? "hands" $coffeeMaker;
    return 
"Ich mache eine Tasse ".join(", "$types)." mit $device.\n";
}
echo 
makecoffee ();
echo 
makecoffee (array("cappuccino""lavazza"), "teapot");
?>

Der Vorgabewert muss ein konstanter Ausdruck sein, darf also zum Beispiel keine Variable, Eigenschaft einer Klasse oder ein Funktionsaufruf sein.

Bitte beachten Sie, dass alle Vorgabewerte rechts von den Nicht-Vorgabeparametern stehen sollten - sonst wird es nicht funktionieren. Betrachten Sie folgendes Beispiel:

Beispiel #5 Ungültige Anwendung von Vorgabewerten

<?php
function mach_joghurt ($typ "rechtsdrehendes"$geschmack)
{
    return 
"Mache einen Becher $typ $geschmack-joghurt.\n";
}

echo 
mach_joghurt ("Brombeer");   // arbeitet nicht wie erwartet
?>

Die Ausgabe dieses Beispiels ist:


Warning: Missing argument 2 in call to mach_joghurt() in
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Mache einen Becher Brombeer-joghurt.

Nun vergleichen Sie bitte oberes Beispiel mit folgendem:

Beispiel #6 Richtiger Einsatz von Vorgabewerten

<?php
function mach_joghurt ($geschmack$typ "rechtsdrehendes")
{
    return 
"Mache einen Becher $typ $geschmack-Joghurt.\n";
}

echo 
mach_joghurt ("Brombeer");   // arbeitet wie erwartet.
?>

... und jetzt ist die Ausgabe:


Mache einen Becher rechtsdrehendes Brombeer-Joghurt.

Hinweis: Das Setzen von Standardwerten für Argumente, die als Referenz übergeben werden ("passed by reference") wird seit PHP 5 unterstützt.

Variable Anzahl von Parametern

Beginnend mit PHP 4 wird eine variable Anzahl von Parametern in benutzerdefinierten Funktionen unterstützt. Das Handling dieser Parameter fällt mittels der Funktionen func_num_args(), func_get_arg() und func_get_args() sehr leicht.

Es ist keine spezielle Syntax erforderlich. Die Parameter können wie gehabt explizit in den Funktionsdeklarationen angegeben werden und werden sich wie gewohnt verhalten.



Rückgabewerte

Sie können Werte mit dem optionalen Befehl "return" zurückgeben. Es können Variablen jeden Typs zurückgegeben werden, auch Arrays oder Objekte. Dies beendet sofort die Funktion und die Kontrolle wird wieder an die aufrufende Zeile zurückgegeben. Weitere Informationen finden Sie unter return().

Beispiel #1 Einsatz von return()

<?php
function quadrat ($zahl)
{
    return 
$zahl $zahl;
}
echo 
quadrat (4);   // gibt '16' aus.

?>

Es ist nicht möglich, mehrere Werte von einer Funktion zurückzugeben. Ein ähnliches Resultat kann man aber durch die Rückgabe von Arrays erreichen.

Beispiel #2 Rückgabe mehrere Werte in Arrays

<?php
function kleine_zahlen()
{
   return array (
012);
}
list (
$null$eins$zwei) = kleine_zahlen();
?>

Um von einer Funktion eine Referenz zurückzugeben, müssen Sie den Referenz-Operator & sowohl in der Funktionsdeklaration, als auch bei der Zuweisung des zurückgegebenen Wertes verwenden:

Beispiel #3 Rückgabe von Referenzen

<?php
function &returniere_referenz()
{
    return 
$einereferenz;
}

$neuereferenz =& returniere_referenz();
?>

Weitere Informationen über Referenzen finden Sie im Kapitel Referenzen in PHP.



Variablenfunktionen

PHP unterstützt das Konzept der Variablenfunktionen. Wenn Sie an das Ende einer Variablen Klammern hängen, versucht PHP eine Funktion aufzurufen, deren Name der aktuelle Wert der Variablen ist. Dies kann unter anderem für Callbacks, Funktionstabellen, usw. genutzt werden.

Variablenfunktionen funktionieren nicht mit Sprachkonstrukten wie echo(), print(), unset(), isset(), empty(), include() und require(). Sie müssen Ihre eigenen Wrapperfunktionen verwenden, um diese Konstrukte als variable Funktionen benutzen zu können.

Beispiel #1 Beispiel für Variablenfunktionen

<?php
function foo()
{
    echo 
"In foo()<br />\n";
}

function 
bar($arg '')
{
    echo 
"In bar(); der Parameter ist '$arg'.<br />\n";
}

// Dies ist eine Wrapperfunkiton für echo
function echoit($string)
{
    echo 
$string;
}

$func 'foo';
$func();        // Dies ruft foo() auf

$func 'bar';
$func('test');  // Dies ruft bar() auf

$func 'echoit';
$func('test');  // Dies ruft echoit() auf
?>

Sie können auch die Methode eines Objektes mittels der variablen Funktionen aufrufen.

Beispiel #2 Variable Methode

<?php
class Foo
{
    function 
Variable()
    {
        
$name 'Bar';
        
$this->$name(); // Dies ruft die Bar() Methode auf
    
}

    function 
Bar()
    {
        echo 
"Das ist Bar";
    }
}

$foo = new Foo();
$funcname "Variable";
$foo->$funcname();   // Dies ruft $foo->Variable() auf

?>

Siehe auch call_user_func(), Variable Variablen und function_exists().



Interne (eingebaute) Funktionen

PHP enthält standmäßig viele Funktionen und Konstrukte, weiterhin gibt es viele Funktionen die vorausssetzen, dass bestimmte PHP-Extensions einkompiliert wurden, anderenfalls erhalten Sie beim Aufruf "undefined function"-Fehlermeldungen. Um z.B. Grafik-Funktionen wie imagecreatetruecolor() zu nutzen, müssen Sie PHP mit GD-Unterstützung kompilieren, oder um mysql_connect() zu nutzen, muss Ihr PHP mit MySQL-Unterstützung kompiliert sein. Viele Kernfunktionen wie z.B. die String- und Variablen-Funktionen sind bereits in jeder PHP-Version enthalten. Ein Aufruf von phpinfo() oder get_loaded_extensions() zeigt Ihnen, welche Extensions in Ihrer PHP-Installation verfügbar sind. Beachten Sie weiterhin, dass viele Extensions bereits standardmäßig aktiviert sind und das PHP-Manual nach Extensions unterteilt ist. Weitere Informationen zur Einrichtung von PHP finden Sie in den Kapiteln Konfiguration, Installation und den Kapiteln zu den einzelnen Extensions.

Wie Funktionsprototypen zu lesen und zu verstehen sind, ist im Kapitel 'Wie man eine Funktionsdefinition (Prototyp) liest' erklärt. Es ist wichtig zu erkennen, was eine Funktion zurückgibt und ob die übergebenen Parameter verändert werden. So gibt z.B. str_replace() den bearbeiteten String zurück, während usort() direkt auf der übergebenen Variablen arbeitet. Jede Handbuchseite enthält spezifische Informationen für jede Funktion wie ihre Parameter, die Rückgabewerte sowohl bei Erfolg als auch im Fehlerfall, Änderungen des Verhaltens und die Verfügbarkeit. Die Kenntnis dieser wichtigen (und oft subtilen) Unterschiede ist von entscheidender Bedeutung für das Schreiben korrekten PHP-Codes.

Hinweis: Wenn Funktionen andere Parameter erhalten als erwartet, d.h. wenn z.B. ein array übergeben wird obwohl ein string erwartet wird, so ist der Rückgabewert undefiniert. In solchen Fällen ist es üblich, dass NULL zurückgegeben wird, dies ist aber nur eine Konvention, auf die Sie sich nicht unbedingt verlassen können.

Siehe auch function_exists(), the function reference, get_extension_funcs() und dl().



Anonymous functions

Anonymous functions, also known as closures, allow the creation of functions which have no specified name. They are most useful as the value of callback parameters, but they have many other uses.

Beispiel #1 Anonymous function example

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return 
strtoupper($match[1]);
}, 
'hello-world');
// outputs helloWorld
?>

Closures can also be used as the values of variables; PHP automatically converts such expressions into instances of the Closure internal class. Assigning a closure to a variable uses the same syntax as any other assignment, including the trailing semicolon:

Beispiel #2 Anonymous function variable assignment example

<?php
$greet 
= function($name)
{
    
printf("Hello %s\r\n"$name);
};

$greet('World');
$greet('PHP');
?>

Closures may also inherit variables from the parent scope. Any such variables must be declared in the function header. Inheriting variables from the parent scope is not the same as using global variables. Global variables exist in the global scope, which is the same no matter what function is executing. The parent scope of a closure is the function in which the closure was declared (not necessarily the function it was called from). See the following example:

Beispiel #3 Closures and scoping

<?php
// A basic shopping cart which contains a list of added products
// and the quantity of each product. Includes a method which
// calculates the total price of the items in the cart using a
// closure as a callback.
class Cart
{
    const 
PRICE_BUTTER  1.00;
    const 
PRICE_MILK    3.00;
    const 
PRICE_EGGS    6.95;

    protected   
$products = array();
    
    public function 
add($product$quantity)
    {
        
$this->products[$product] = $quantity;
    }
    
    public function 
getQuantity($product)
    {
        return isset(
$this->products[$product]) ? $this->products[$product] :
               
FALSE;
    }
    
    public function 
getTotal($tax)
    {
        
$total 0.00;
        
        
$callback =
            function (
$quantity$product) use ($tax, &$total)
            {
                
$pricePerItem constant(__CLASS__ "::PRICE_" .
                    
strtoupper($product));
                
$total += ($pricePerItem $quantity) * ($tax 1.0);
            };
        
        
array_walk($this->products$callback);
        return 
round($total2);;
    }
}

$my_cart = new Cart;

// Add some items to the cart
$my_cart->add('butter'1);
$my_cart->add('milk'3);
$my_cart->add('eggs'6);

// Print the total with a 5% sales tax.
print $my_cart->getTotal(0.05) . "\n";
// The result is 54.29
?>

Anonymous functions are currently implemented using the Closure class. This is an implementation detail and should not be relied upon.

Hinweis: Anonymous functions are available since PHP 5.3.0.

Hinweis: It is possible to use func_num_args(), func_get_arg(), and func_get_args() from within a closure.




Klassen und Objekte (PHP 5)

Inhaltsverzeichnis


Introduction

In PHP5 gibt es ein neues Objektmodell. Die Behandlung von Objekten durch PHP wurde vollständig neu geschrieben, was zu deutlich erhöhter Leistungsfähigkeit und mehr Fähigkeiten in diesem Bereich führte.

Tipp

Siehe auch Userland Naming Guide.



Die Grundlagen

class

Jede Klassendefinition beginnt mit dem Schlüsselwort class, gefolgt von einem Klassennamen, gefolgt von einem Paar geschweifter Klammern, die die Definitionen der Klasseneigenschaften und -methoden enthalten.

Der Klassenname kann jeder gültige Bezeichner sein, der kein von PHP PHP reserviertes Wort ist. Ein gültiger Klassenname beginnt mit einem Buchstaben oder einem Unterstrich, gefolgt von einer beliebigen Anzahl von Buchstaben, Ziffern oder Unterstrichen; als regulärer Ausdruck formuliert: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Eine Klasse darf aus ihren eigenen Konstanten, Variablen ("Eigenschaften" genannt) und Funktionen ("Methoden" genannt) bestehen.

Beispiel #1 Definition einer einfachen Klasse

<?php
class SimpleClass
{
    
// Deklaration einer Eigenschaft
    
public $var 'ein Standardwert';

    
// Deklaration einer Methode
    
public function displayVar() {
        echo 
$this->var;
    }
}
?>

Die Pseudovariable $this ist verfügbar, falls eine Methode aus einem Objektkontext heraus aufgerufen wird. $this ist eine Referenz auf das aufrufende Objekt (üblicherweise das Objekt, zu dem die Methode gehört, aber möglicherweise ein anderes Objekt, falls die Methode statisch aus dem Kontext eines zusätzlichen Objektes aufgerufen wird).

Beispiel #2 Einige Beispiele für die $this-Pseudovariable

<?php
class A
{
    function 
foo()
    {
        if (isset(
$this)) {
            echo 
'$this ist definiert (';
            echo 
get_class($this);
            echo 
")\n";
        } else {
            echo 
"\$this ist nicht definiert.\n";
        }
    }
}

class 
B
{
    function 
bar()
    {
        
// Hinweis: die folgende Zeile führt zu einer Warnung, wenn
        // E_STRICT aktiviert ist
        
A::foo();
    }
}

$a = new A();
$a->foo();

// Hinweis: die folgende Zeile führt zu einer Warnung, wenn E_STRICT aktiviert ist
A::foo();
$b = new B();
$b->bar();

// Hinweis: die folgende Zeile führt zu einer Warnung, wenn E_STRICT aktiviert ist
B::bar();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

$this ist definiert (A)
$this ist nicht definiert.
$this ist definiert (B)
$this ist nicht definiert.

new

Um eine Instanz einer Klasse zu erzeugen, muss ein neues Objekt erzeugt und einer Variablen zugewiesen werden. Bei der Erzeugung wird das Objekt immer zugewiesen, außer wenn das Objekt einen definierten Konstruktor besitzt, der aufgrund eines Fehlers eine Exception wirft. Klassen sollten vor ihrer Instantiierung definiert werden (in manchen Fällen ist dies eine Notwendigkeit).

Beispiel #3 Eine Instanz erzeugen

<?php
$instanz 
= new SimpleClass();

// dies ist auch mit einer Variablen möglich:
$klassenname 'Foo';
$instanz = new $klassenname(); // Foo()
?>

Im Kontext einer Klasse ist es möglich, neue Objekte mit new self und new parent anzulegen.

Wenn man eine bereits erzeugte Instanz einer Klasse einer neuen Variablen zuweist, wird die neue Variable auf die selbe Instanz zugreifen wie das Objekt, das zugewiesen wurde. Dieses Verhalten ist das selbe, wenn man Instanzen an Funktionen übergibt. Eine Kopie eines bereits erzeugten Objektes erhält man, indem man es klont.

Beispiel #4 Objektzuweisung

<?php
$zugewiesen   
=  $instanz;
$referenz     =& $instanz;

$instanz->var '$zugewiesen wird diesen Wert haben';

$instanz null// $instanz und $referenz werden null

var_dump($instanz);
var_dump($referenz);
var_dump($zugewiesen);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$zugewiesen wird diesen Wert haben"
}

extends

Eine Klasse kann Methoden und Eigenschaften einer anderen Klasse erben, indem man das extends-Schlüsselwort in der Deklaration benutzt. Es ist nicht möglich, mehrere Klassen zu erweitern; eine Klasse kann nur eine einzige Basisklasse beerben.

Die geerbten Methoden und Eigenschaften können durch eine Neudeklaration mit dem gleichen Namen wie in der Elternklasse überschrieben werden. Falls die Elternklasse eine Methode als final definiert hat, kann diese Methode nicht überschrieben werden. Es ist möglich, auf die überschriebenen Methoden oder statischen Eigenschaften zuzugreifen, wenn diese mittels parent:: referenziert werden.

Beispiel #5 Einfache Vererbung

<?php
class ExtendClass extends SimpleClass
{
    
// Die Vatermethode überschreiben
    
function displayVar()
    {
        echo 
"Erweiternde Klasse\n";
        
parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Erweiternde Klasse
ein Vorgabewert


Properties

Class member variables are called "properties". You may also see them referred to using other terms such as "attributes" or "fields", but for the purposes of this reference we will use "properties". They are defined by using one of the keywords public, protected, or private, followed by a normal variable declaration. This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

See Sichtbarkeit for more information on the meanings of public, protected, and private.

Hinweis: In order to maintain backward compatibility with PHP 4, PHP 5 will still accept the use of the keyword var in property declarations instead of (or in addition to) public, protected, or private. However, var is no longer required. In versions of PHP from 5.0 to 5.1.3, the use of var was considered deprecated and would issue an E_STRICT warning, but since PHP 5.1.3 it is no longer deprecated and does not issue the warning.
If you declare a property using var instead of one of public, protected, or private, then PHP 5 will treat the property as if it had been declared as public.

Within class methods the properties, constants, and methods may be accessed by using the form $this->property (where property is the name of the property) unless the access is to a static property within the context of a static class method, in which case it is accessed using the form self::$property. See Static Keyword for more information.

The pseudo-variable $this is available inside any class method when that method is called from within an object context. $this is a reference to the calling object (usually the object to which the method belongs, but possibly another object, if the method is called statically from the context of a secondary object).

Beispiel #1 property declarations

<?php
class SimpleClass
{
   
// invalid property declarations:
   
public $var1 'hello ' 'world';
   public 
$var2 = <<<EOD
hello world
EOD;
   public 
$var3 1+2;
   public 
$var4 self::myStaticMethod();
   public 
$var5 $myVar;

   
// valid property declarations:
   
public $var6 myConstant;
   public 
$var7 = array(truefalse);

   
// This is allowed only in PHP 5.3.0 and later.
   
public $var8 = <<<'EOD'
hello world
EOD;
}
?>

Hinweis: There are some nice functions to handle classes and objects. You might want to take a look at the Class/Object Functions.

Unlike heredocs, nowdocs can be used in any static data context, including property declarations.

Beispiel #2 Example of using a nowdoc to initialize a property

<?php
class foo {
   
// As of PHP 5.3.0
   
public $bar = <<<'EOT'
bar
EOT;
}
?>

Hinweis: Nowdoc support was added in PHP 5.3.0.



Klassenkonstanten

Es ist möglich für jede Klasse konstante Werte zu definieren, die gleich und unabänderlich bleiben. Konstanten weichen darin von normalen Variablen ab, dass man nicht das $ Symbol benutzt, um sie zu deklarieren oder zu benutzen.

Der Wert kann nur ein konstanter Ausdruck sein, keine (zum Beispiel) Variablen, Klassenmamber, Ergebnisse einer mathematischen Operation oder Funktionsaufrufe.

Ein Interface kann ebenfalls constants enthalten. Die Interface-Dokumentation enthält Beispiele dazu.

Beginnend mit PHP 5.3.0 ist es möglich eine Variable als Klassenreferenz zu nutzen. Der Variablenwert kann kein Schlüsselwort (wie self, parent oder static) sein.

Beispiel #1 Eine Konstante definieren und benutzen

<?php
class MyClass
{
    const 
constant 'Konstanter Wert';

    function 
showConstant() {
        echo  
self::constant "\n";
    }
}

echo 
MyClass::constant "\n";

$classname "MyClass";
echo 
$classname::constant "\n"// Ab PHP 5.3.0

$class = new MyClass();
$class->showConstant();

echo 
$class::constant;  // Ab PHP 5.3.0
?>

Beispiel #2 Beispiel für statische Daten

<?php
class foo {
    
// Ab PHP 5.3.0
    
const bar = <<<'EOT'
bar
EOT;
}
?>

Nowdocs können, anders als heredocs, in jedem statischen Datenkontext verwendet werden.

Hinweis: Unterstützung von Nowdocs wurde in PHP 5.3.0 eingeführt.



Autoloading

Viele Entwickler, die objektorientierte Anwendungen entwickeln, erzeugen eine eigene PHP Quelldatei für jede Klassendefinition. Eines der größten Ärgernisse ist die Notwendigkeit, eine lange Liste von benötigten Include-Anweisungen am Anfang eines jeden Skripts (eine für jede Klasse).

In PHP 5 ist das nicht länger notwendig. Man kann eine __autoload Funktion definieren, die automatisch aufgerufen wird, falls man versucht eine noch nicht definierte Klasse oder ein nicht definiertes Interface zu benutzen. Durch den Aufruf dieser Funktion erhält die Scripting Engine einen letzten Versuch, die Klasse zu laden, bevor PHP unter Ausgabe einer Fehlermeldung scheitert.

Hinweis: Exceptions, die in einer __autoload Funktion geworfen werden, sind nicht in einem Catch-Block fangbar und führen zu einem fatalen Fehler.

Hinweis: Autoloading ist nicht verfügbar, wenn man PHP im CLI interaktiven Modus betreibt.

Hinweis: Wird der Klassenname z.B. an die Funktion call_user_func() ist zu beachten das er gefährliche Zeichen wie z.B. ../ enthalten kann. Es wird daher empfohlen keine Benutzereingaben an solche Funktionen weiterzugeben oder zumindest die Eingaben in der __autoload() zu prüfen.

Beispiel #1 Autoload Beispiel

Dieses Beispiel versucht die Klassen MyClass1 und MyClass2 aus den entsprechenden Dateien MyClass1.php und MyClass2.php zu laden.

<?php
function __autoload($class_name) {
    require_once 
$class_name '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2(); 
?>

Beispiel #2 Weiteres Autoload Beispiel

Dieses Beispiel versucht das Interface ITest zu laden.

<?php

function __autoload($name) {
    
var_dump($name);
}

class 
Foo implements ITest {
}
 
/*
string(5) "ITest"
 
Fatal error: Interface 'ITest' not found in ...
*/
?>



Konstruktoren und Destruktoren

Konstruktor

void __construct ([ mixed $args [, $... ]] )

PHP 5 erlaubt es Entwicklern, Konstruktormethoden für Klassen zu deklarieren. Klassen mit Konstruktormethoden rufen diese für jedes neu erzeugte Objekt auf, so dass Konstruktoren für alle Initialisierungen passend sind, die das Objekt brauchen könnte bevor es benutzt wird.

Hinweis: Konstruktoren von Vaterklassen werden nicht implizit aufgerufen, wenn die Kindklasse einen Konstruktor definiert. Um einen Vaterkonstruktor zu benutzen ist ein Aufruf von parent::__construct() innerhalb des Kindkonstruktors notwendig.

Beispiel #1 Die neuen, vereinheitlichten Konstruktoren verwenden

<?php
class BaseClass {
   function 
__construct() {
       print 
"Im BaseClass Konstruktor\n";
   }
}

class 
SubClass extends BaseClass {
   function 
__construct() {
       
parent::__construct();
       print 
"Im SubClass Konstruktor\n";
   }
}

$obj = new BaseClass();
$obj = new SubClass();
?>

Für die Abwärtskompatibilität sucht PHP 5 nach einer Konstruktorfunktion nach dem alten Stil mit dem Namen der Klasse, falls es keine __construct() Funktion für eine Klasse findet. Effektiv bedeutet das, dass der einzige Fall mit Kompatibilitätsproblemen derjenige einer Klasse mit dem Namen __construct() ist, welche für andere Zwecke benutzt wird.

Destruktor

void __destruct ( void )

PHP 5 führt ein Destruktorkonzept ähnlich dem anderer objektorientierter Programmiersprachen wie C++ ein. Die Destruktormethode wird aufgerufen, sobald alle Referenzen auf ein bestimmtes Objekt entfernt werden oder wenn das Objekt explizit zerstört wird, oder in beliebiger Reihenfolge am Ende des Skripts.

Beispiel #2 Destruktor Beispiel

<?php
class MyDestructableClass {
   function 
__construct() {
       print 
"Im Konstruktor\n";
       
$this->name "MyDestructableClass";
   }

   function 
__destruct() {
       print 
"Zerstoere " $this->name "\n";
   }
}

$obj = new MyDestructableClass();
?>

Wie Konstruktoren auch, werden Vaterdestruktoren nicht implizit durch die Engine aufgerufen. Um einen Vaterdestruktor zu benutzen muss man explizit die Funktion parent::__destruct() in der Destruktorimplementierung aufrufen

Hinweis: Der Destruktor wird während der Skript Abschaltung aufgerufen, weshalb die Header immer bereits gesendet sind. Das aktuelle Verzeichnis während der Beendigungsphase des Skripts kann bei einigen SAPIs (z.B. Apache) ein anderes sein.

Hinweis: Der Versucht eine Exception aus einem Destruktor (der in der Beendigungsphase des Skripts aufgerufen wurde) heraus zu werfen wird einen fatalen Fehler auslösen.



Sichtbarkeit

Die Sichtbarkeit einer Eigenschaft oder Methode kann definiert werden, indem man der Deklaration eines der Schlüsselwörter public, protected oder private voranstellt. Auf public deklarierte Elemente kann von überall her zugegriffen werden. Protected beschränkt den Zugang auf Vaterklassen und abgeleitete Klassen (sowie die Klasse die das Element definiert). Private grenzt die Sichtbarkeit einzig auf die Klasse ein, die das Element definiert.

Sichtbarkeit von Membern

Klassenmember müssen mitteld public, private oder protected definiert werden.

Beispiel #1 Memberdeklaration

<?php
/**
 * Definiere MyClass
 */
class MyClass
{
    public 
$public 'Public';
    protected 
$protected 'Protected';
    private 
$private 'Private';

    function 
printHello()
    {
        echo 
$this->public;
        echo 
$this->protected;
        echo 
$this->private;
    }
}

$obj = new MyClass();
echo 
$obj->public// Funktioniert
echo $obj->protected// Fataler Fehler
echo $obj->private// Fataler Fehler
$obj->printHello(); // Zeigt Public, Protected und Private


/**
 * Definiere MyClass2
 */
class MyClass2 extends MyClass
{
    
// Wir können die public und protected Methoden neu deklarieren, 
    // aber nicht private
    
protected $protected 'Protected2';

    function 
printHello()
    {
        echo 
$this->public;
        echo 
$this->protected;
        echo 
$this->private;
    }
}

$obj2 = new MyClass2();
echo 
$obj2->public// Funktioniert
echo $obj2->private// Undefiniert
echo $obj2->protected// Fataler Fehler
$obj2->printHello(); // Zeigt Public, Protected2, Undefined

?>

Hinweis: Die PHP 4 Methode, Variablen mit dem Schlüsselwort var zu deklarieren, ist aus Gründen der Abswärtskompatibilität weiterhin unterstützt (als Synonym für das public-Schlüsselwort). In PHP 5 vor 5.1.3 hat dessen Verwendung eine E_STRICT-Warnung hervorgerufen.

Sichtbarkeit von Methoden

Klassenmethoden müssen mit public, private oder protected definiert werden. Methoden ohne jede Deklaration sind als public definiert.

Beispiel #2 Methodendeklaration

<?php
/**
 * Definiere MyClass
 */
class MyClass
{
    
// Deklariert einen public Konstruktor
    
public function __construct() { }

    
// Deklariere eine public Funktion
    
public function MyPublic() { }

    
// Deklariere eine protected Funktion
    
protected function MyProtected() { }

    
// Deklariere eine private Funktion
    
private function MyPrivate() { }

    
// Dies ist public
    
function Foo()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // Funktioniert
$myclass->MyProtected(); // Fataler Fehler
$myclass->MyPrivate(); // Fataler Fehler
$myclass->Foo(); // Public, Protected und Private funktionieren


/**
 * Definiere MyClass2
 */
class MyClass2 extends MyClass
{
    
// Dies ist public
    
function Foo2()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate(); // Fataler Fehler
    
}
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Funktioniert
$myclass2->Foo2(); // Public und Protected funktionieren, Private nicht

class Bar 
{
    public function 
test() {
        
$this->testPrivate();
        
$this->testPublic();
    }

    public function 
testPublic() {
        echo 
"Bar::testPublic\n";
    }
    
    private function 
testPrivate() {
        echo 
"Bar::testPrivate\n";
    }
}

class 
Foo extends Bar 
{
    public function 
testPublic() {
        echo 
"Foo::testPublic\n";
    }
    
    private function 
testPrivate() {
        echo 
"Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>



Object Inheritance

Inheritance is a well-esablished programming principle, and PHP makes use of this principle in its object model. This principle will affect the way many classes and objects relate to one another.

For example, when you extend a class, the subclass inherits all of the public and protected methods from the parent class. Unless a class overrides those methods, they will retain their original functionality.

This is useful for defining and abstracting functionality, and permits the implementation of additional functionality in similar objects without the need to reimplement all of the shared functionality.

Beispiel #1 Inheritance Example

<?php

class foo
{
    public function 
printItem($string)
    {
        echo 
'Foo: ' $string PHP_EOL;
    }
    
    public function 
printPHP()
    {
        echo 
'PHP is great.' PHP_EOL;
    }
}

class 
bar extends foo
{
    public function 
printItem($string)
    {
        echo 
'Bar: ' $string PHP_EOL;
    }
}

$foo = new foo();
$bar = new bar();
$foo->printItem('baz'); // Output: 'Foo: baz'
$foo->printPHP();       // Output: 'PHP is great' 
$bar->printItem('baz'); // Output: 'Bar: baz'
$bar->printPHP();       // Output: 'PHP is great'

?>


Gültigkeitsbereichsoperator (::)

Der Gültigkeitsbereichsoperator (auch Paamayim Nekudotayim genannt) oder in einfacheren Worten der Doppel-Doppelpunkt ist ein Kürzel, das Zugriff auf statische, konstante und überschriebene Member oder Methoden einer Klasse erlaubt.

Wenn Sie diese Elemente außerhalb der Klassendefinition ansprechen, benutzen Sie den Namen der Klasse.

Beginnend mit PHP 5.3.0 ist es möglich eine Variable als Klassenreferenz zu nutzen. Der Variablenwert kann kein Schlüsselwort (wie self, parent oder static) sein.

Paamayim Nekudotayim scheint auf den ersten Blick eine eigenartige Wahl für die Benennung eines Doppel-Doppelpunktes zu sein. Jedoch entschied sich das Zend Team ihn so zu nennen, während Sie die Zend Engine 0.5 schrieben (welche PHP 3 antreibt). Tatsächlich bedeutet das Doppel-Doppelpunkt - in Hebräisch.

Beispiel #1 :: außerhalb der Klassendefinition

<?php
class MyClass {
    const 
CONST_VALUE 'Ein konstanter Wert';
}

$classname 'MyClass';
echo 
$classname::CONST_VALUE// Ab PHP 5.3.0

echo MyClass::CONST_VALUE;
?>

Die zwei speziellen Schlüsselwörter self und parent werden benutzt, um auf Member und Methoden von innerhalb der Klassendefinition zuzugreifen.

Beispiel #2 :: innerhalb der Klassendefinition

<?php
class OtherClass extends MyClass
{
    public static 
$my_static 'statische var';

    public static function 
doubleColon() {
        echo 
parent::CONST_VALUE "\n";
        echo 
self::$my_static "\n";
    }
}

$classname 'OtherClass';
echo 
$classname::doubleColon(); // Ab PHP 5.3.0

OtherClass::doubleColon();
?>

Wenn eine abgeleitete Klasse die Definition der Methode eines Vaters überschreibt, wird PHP die Methode des Vaters nicht aufrufen. Es obliegt der abgeleiteten Klasse, ob die Methode der Vaterklasse augerufen wird oder nicht. Dies gilt ebenfalls für Konstruktoren und Destruktoren, Überladung und magische Methodendefinitionen.

Beispiel #3 Eine Vatermethode aufrufen

<?php
class MyClass
{
    protected function 
myFunc() {
        echo 
"MyClass::myFunc()\n";
    }
}

class 
OtherClass extends MyClass
{
    
// Die Definition des Vaters überschreiben
    
public function myFunc()
    {
        
// Aber dennoch die Funktion des Vaters aufrufen
        
parent::myFunc();
        echo 
"OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();
?>


Static Schlüsselwort

Klassenmember oder -methoden als statisch zu deklarieren macht diese zugänglich, ohne dass man die Klasse instantiieren muss. Auf ein als statisch deklariertes Member kann nicht mit einem instantiierten Klassenobjekt zugegriffen werden (obgleich eine statische Methode dies kann).

Für die Abwärtskompatibilität zu PHP 4 werden Member oder Methode behandelt als ob diese als public static deklariert wären, wenn keine Sichtbarkeit deklariert wird.

Als Initialwerte für statische Eigenschaften können nur Zeichenketten und Konstanten zugewiesen werden, die Zuweisung berechneter Ausdrücke ist nicht möglich. Während also die Initialisierung mit einem Integer oder Array möglich ist können der Wert einer anderen Variablen, der Rückgabewert einer Funktion oder ein Objekt nicht als Initialwert zugewiesen werden.

Weil statische Methoden ohne die Instanz eines erzeugten Objektes aufrufbar sind, ist die Pseudovariable $this nicht innerhalb von der als statisch deklarierten Methode verfügbar.

Auf statische Eigenschaften kann nicht durch das Objekt mittels des Pfeiloperators -> zugegriffen werden.

Unstatische Methoden statisch aufzurufen ruft eine Warnung der Stufe E_STRICT hervor.

Beginnend mit PHP 5.3.0 kann die Klasse über eine Variable referenziert werden. Der Variablenwert kann dabei kein Schlüsselwort (wie self, parent oder static) sein.

Beispiel #1 Beispiel für statische Member

<?php
class Foo
{
    public static 
$my_static 'foo';

    public function 
staticValue() {
        return 
self::$my_static;
    }
}

class 
Bar extends Foo
{
    public function 
fooStatic() {
        return 
parent::$my_static;
    }
}


print 
Foo::$my_static "\n";

$foo = new Foo();
print 
$foo->staticValue() . "\n";
print 
$foo->my_static "\n";      // Undefinierte "Eigenschaft" my_static 

print $foo::$my_static "\n";
$classname 'Foo';
print 
$classname::$my_static "\n";

print 
Bar::$my_static "\n";
$bar = new Bar();
print 
$bar->fooStatic() . "\n";
?>

Beispiel #2 Beispiel für statische Methoden

<?php
class Foo {
    public static function 
aStaticMethod() {
        
// ...
    
}
}

Foo::aStaticMethod();
$classname 'Foo';
$classname::aStaticMethod();
?>


Klassenabstraktion

PHP 5 führt abstrakte Klassen und Methoden ein. Es ist nicht erlaubt, eine Instanz einer Klasse zu erzeugen, die abstrakt definiert wurde. Jede Klasse, die wenigstens eine abstrakte Methode enthält, muss ebenso abstrakt sein. Abstrakt definierte Methoden deklarieren einfach die Signatur der Methode, sie dürfen nicht die Implementierung definieren.

Wenn eine abstrakte Klasse abgeleitet wird, müssen alle in der Deklaration der Vaterklasse abstrakt bezeichneten Methoden durch das Kind definiert werden. Zusätzlich müssen diese Methoden mit der selben (oder einer weniger einschränkenden) Sichtbarkeit definiert werden. Wenn die abstrakte Methode zum Beispiel als protected definiert ist, muss die Funktionsimplementierung entweder als protected oder public, aber nicht private, definiert sein.

Beispiel #1 Beispiel für abstrakte Klasse

<?php
abstract class AbstractClass
{
    
// Die abgeleitete Klasse zwingen, diese Methoden zu definieren
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);

    
// Gemeinsame Methode
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}

class 
ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function 
prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class 
ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }
    
    public function 
prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Bestehender Code, der keine benutzerdefinierten Klassen oder Funktionen mit dem Namen 'abstract' besitzt, sollte ohne Änderungen lauffähig sein.



Interfaces

Interfaces erlauben die Erzeugung von Code, der spezifiziert, welche Methoden eine Klasse implementieren muss, ohne definieren zu müssen, wie diese Methoden behandelt werden.

Interfaces werden mit dem interface Schlüsselwort auf die selbe Weise wie eine Standardklasse definiert, ohne dass eine der Methoden ihren Inhalt definiert.

Alle in einem Interface deklarierten Methoden müssen public sein, dies liegt in der Natur eines Interfaces.

implements

Um ein Interface zu implementieren, wird der implements-Operator benutzt. Alle Methoden des Interfaces müssen innerhalb der Klasse implementiert werden; Unterlassung wird zu einem fatalen Fehler führen. Klassen dürfen, falls dies gewünscht wird, mehr als ein Interface implementieren, indem man die Interfaces voneinander mit einem Komma abtrennt.

Hinweis: Eine Klasse kann nicht zwei Interfaces, die sich identische Funktionsnamen teilen, implementieren, da dies zu Doppeldeutigkeiten führen würde.

Hinweis: Ein Interface kann ebenso wie eine Klasse mit Hilfe des Schlüsselwortes extend erweitert werden.

Konstanten

Ein Interface kann Konstanten definieren. Interface-Konstanten funktionieren genauso wie Klassenkonstanten. Eine Interfacekonstante kann von anderen Interfaces oder Klassen, die von diesem Interface erben, nicht verändert werden.

Beispiele

Beispiel #1 Interface-Beispiel

<?php
// Deklariere das Interface 'iTemplate'
interface iTemplate
{
    public function 
setVariable($name$var);
    public function 
getHtml($template);
}

// Implementiere das Interface
// Dies funktioniert
class Template implements iTemplate
{
    private 
$vars = array();
  
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
  
    public function 
getHtml($template)
    {
        foreach(
$this->vars as $name => $value) {
            
$template str_replace('{' $name '}'$value$template);
        }
 
        return 
$template;
    }
}

// Dies wird nicht funktionieren
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private 
$vars = array();
  
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
}

?>

Beispiel #2 Interface-Vererbung

<?php
interface a

public function foo();


interface 
extends a
{
  public function 
baz(Baz $baz);
}

// Dies Funktioniert 
class implements b
{
  public function 
foo()
  {
  }

  public function 
baz(Baz $baz)
  {
  }
}

// Dies funktioniert nicht und führt zu einem fatalen Fehler
class implements b
{
  public function 
foo()
  {
  }

  public function 
baz(Foo $foo)
  {
  }
}
?>

Beispiel #3 Interface-Mehrfachvererbung

<?php
interface a
{
  public function 
foo();
}
    
interface 
b
{
  public function 
bar();
}
    
interface 
extends ab
{
  public function 
baz();
}
    
class 
implements c
{
  public function 
foo()
  {
  }
    
  public function 
bar()
  {
  }
    
  public function 
baz()
  {
  }
}
?>

Beispiel #4 Interfaces mit Konstanten

<?php
interface a
{
  const 
'Interface constant';
}
    
// Ausgabe: Interface constant
echo a::b;
    
// Der folgende Abschnitt wird nicht funktionieren, da
// ein Überschreiben der Konstanten nicht gestattet ist.
// Dies ist das gleiche Konzept wie bei Klassenkonstanten.
class implements a
{
  const 
'Class constant';
}
?>

Siehe auch den instanceof-Operator.



Overloading

Overloading in PHP provides means to dynamically "create" properties and methods. These dynamic entities are processed via magic methods one can establish in a class for various action types.

The overloading methods are invoked when interacting with properties or methods that have not been declared or are not visible in the current scope. The rest of this section will use the terms "inaccessible properties" and "inaccessible methods" to refer to this combination of declaration and visibility.

All overloading methods must be defined as public.

Hinweis: None of the arguments of these magic methods can be passed by reference.

Hinweis: PHP's interpretation of "overloading" is different than most object oriented languages. Overloading traditionally provides the ability to have multiple methods with the same name but different quantities and types of arguments.

Changelog

Version Beschreibung
5.3.0 Added __callStatic(). Added warning to enforce public visibility and non-static declaration.
5.1.0 Added __isset() and __unset().

Property overloading

void __set ( string $name , mixed $value )
mixed __get ( string $name )
bool __isset ( string $name )
void __unset ( string $name )

__set() is run when writing data to inaccessible properties.

__get() is utilized for reading data from inaccessible properties.

__isset() is triggered by calling isset() or empty() on inaccessible properties.

__unset() is invoked when unset() is used on inaccessible properties.

The $name argument is the name of the property being interacted with. The __set() method's $value argument specifies the value the $name'ed property should be set to.

Property overloading only works in object context. These magic methods will not be triggered in static context. Therefore these methods can not be declared static.

Hinweis: The return value of __set() is ignored because of the way PHP processes the assignment operator. Similarly, __get() is never called when chaining assignemnts together like this:

 $a = $obj->b = 8; 

Beispiel #1 Overloading properties via the __get(), __set(), __isset() and __unset() methods

<?php
class PropertyTest {
    
/**  Location for overloaded data.  */
    
private $data = array();

    
/**  Overloading not used on declared properties.  */
    
public $declared 1;

    
/**  Overloading only used on this when accessed outside the class.  */
    
private $hidden 2;

    public function 
__set($name$value) {
        echo 
"Setting '$name' to '$value'\n";
        
$this->data[$name] = $value;
    }

    public function 
__get($name) {
        echo 
"Getting '$name'\n";
        if (
array_key_exists($name$this->data)) {
            return 
$this->data[$name];
        }

        
$trace debug_backtrace();
        
trigger_error(
            
'Undefined property via __get(): ' $name .
            
' in ' $trace[0]['file'] .
            
' on line ' $trace[0]['line'],
            
E_USER_NOTICE);
        return 
null;
    }

    
/**  As of PHP 5.1.0  */
    
public function __isset($name) {
        echo 
"Is '$name' set?\n";
        return isset(
$this->data[$name]);
    }

    
/**  As of PHP 5.1.0  */
    
public function __unset($name) {
        echo 
"Unsetting '$name'\n";
        unset(
$this->data[$name]);
    }

    
/**  Not a magic method, just here for example.  */
    
public function getHidden() {
        return 
$this->hidden;
    }
}


echo 
"<pre>\n";

$obj = new PropertyTest;

$obj->1;
echo 
$obj->"\n\n";

var_dump(isset($obj->a));
unset(
$obj->a);
var_dump(isset($obj->a));
echo 
"\n";

echo 
$obj->declared "\n\n";

echo 
"Let's experiment with the private property named 'hidden':\n";
echo 
"Privates are visible inside the class, so __get() not used...\n";
echo 
$obj->getHidden() . "\n";
echo 
"Privates not visible outside of class, so __get() is used...\n";
echo 
$obj->hidden "\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in <file> on line 70 in <file> on line 29

Method overloading

mixed __call ( string $name , array $arguments )
mixed __callStatic ( string $name , array $arguments )

__call() is triggered when invoking inaccessible methods in an object context.

__callStatic() is triggered when invoking inaccessible methods in a static context.

The $name argument is the name of the method being called. The $arguments argument is an enumerated array containing the parameters passed to the $name'ed method.

Beispiel #2 Overloading methods via the __call() and __callStatic() methods

<?php
class MethodTest {
    public function 
__call($name$arguments) {
        
// Note: value of $name is case sensitive.
        
echo "Calling object method '$name' "
             
implode(', '$arguments). "\n";
    }

    
/**  As of PHP 5.3.0  */
    
public static function __callStatic($name$arguments) {
        
// Note: value of $name is case sensitive.
        
echo "Calling static method '$name' "
             
implode(', '$arguments). "\n";
    }
}

$obj = new MethodTest;
$obj->runTest('in object context');

MethodTest::runTest('in static context');  // As of PHP 5.3.0
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context


Objektiteration

PHP 5 bietet eine Möglichkeit, Objekte so zu definieren, dass es möglich ist, eine Liste von Elementen zu durchlaufen, z.B. mit dem foreach Schlüsselwort. Standardmäßig werden alle sichtbaren Eigenschaften für die Iteration benutzt.

Beispiel #1 Einfache Objektiteration

<?php
class MyClass
{
    public 
$var1 'Wert 1';
    public 
$var2 'Wert 2';
    public 
$var3 'Wert 3';

    protected 
$protected 'protected var';
    private   
$private   'private var';

    function 
iterateVisible() {
       echo 
"MyClass::iterateVisible:\n";
       foreach(
$this as $key => $value) {
           print 
"$key => $value\n";
       }
    }
}

$class = new MyClass();

foreach(
$class as $key => $value) {
    print 
"$key => $value\n";
}
echo 
"\n";


$class->iterateVisible();

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

var1 => Wert 1
var2 => Wert 2
var3 => Wert 3

MyClass::iterateVisible:
var1 => Wert 1
var2 => Wert 2
var3 => Wert 3
protected => protected var
private => private var

Wie die Ausgabe zeigt, lief das foreach über alle sichtbaren Variablen, auf die zugegriffen werden kann. Um es einen Schritt weiter zu treiben, kann man eines der PHP 5 internen Interfaces, nämlich Iterator, implementieren. Das erlaubt dem Objekt zu entscheiden was und wie das Objekt iteriert wird.

Beispiel #2 Objektiteration mit implementiertem Iterator

<?php
class MyIterator implements Iterator
{
    private 
$var = array();

    public function 
__construct($array)
    {
        if (
is_array($array)) {
            
$this->var $array;
        }
    }

    public function 
rewind() {
        echo 
"zurückspulen\n";
        
reset($this->var);
    }

    public function 
current() {
        
$var current($this->var);
        echo 
"aktuell: $var\n";
        return 
$var;
    }

    public function 
key() {
        
$var key($this->var);
        echo 
"key: $var\n";
        return 
$var;
    }

    public function 
next() {
        
$var next($this->var);
        echo 
"nächstes: $var\n";
        return 
$var;
    }

    public function 
valid() {
        
$var $this->current() !== false;
        echo 
"gültig: {$var}\n";
        return 
$var;
    }
}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach (
$it as $a => $b) {
    print 
"$a$b\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

zurückspulen
aktuell: 1
gültig: 1
aktuell: 1
key: 0
0: 1
nächstes: 2
aktuell: 2
gültig: 1
aktuell: 2
key: 1
1: 2
nächstes: 3
aktuell: 3
gültig: 1
aktuell: 3
key: 2
2: 3
nächstes:
aktuell:
gültig:

Man kann eine Klasse ebenfalls so definieren, dass diese nicht alle Funktionen von Iterator definieren muss, indem man einfach das PHP 5 IteratorAggregate Interface implementiert.

Beispiel #3 Objektiteration mit implementiertem IteratorAggregate

<?php
class MyCollection implements IteratorAggregate
{
    private 
$items = array();
    private 
$count 0;

    
// benötigte Funktion des IteratorAggregate Interface
    
public function getIterator() {
        return new 
MyIterator($this->items);
    }

    public function 
add($value) {
        
$this->items[$this->count++] = $value;
    }
}

$coll = new MyCollection();
$coll->add('Wert 1');
$coll->add('Wert 2');
$coll->add('Wert 3');

foreach (
$coll as $key => $val) {
    echo 
"key/value: [$key -> $val]\n\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

zurückspulen
aktuell: Wert 1
gültig: 1
aktuell: Wert 1
key: 0
key/value: [0 -> Wert 1]

nächstes: Wert 2
aktuell: Wert 2
gültig: 1
aktuell: Wert 2
key: 1
key/value: [1 -> Wert 2]

nächstes: Wert 3
aktuell: Wert 3
gültig: 1
aktuell: Wert 3
key: 2
key/value: [2 -> Wert 3]

nächstes:
aktuell:
gültig:

Hinweis: Für mehr Beispiele für die Benutzung von Iteratoren siehe auch SPL Erweiterung.



Pattern

Pattern sind eine Möglichkeit, um optimale Verfahren und gute Entwürfe zu beschreiben. Sie zeigen eine flexible Lösung für verbreitete Programierprobleme.

Factory

Das Factory Pattern erlaubt die Instantiierung von Objekten zur Laufzeit. Es wird Factory Pattern genannt, weil es für die Herstellung eines Objektes zuständig ist. Eine parametrisierte Factory bekommt den Namen der zu instantiierenden Klasse als Parameter übergeben.

Beispiel #1 Parametrisierte Factorymethode

<?php
class Example
{
    
// Die parametrisierte Factorymethode
    
public static function factory($type)
    {
        if (include_once 
'Treiber/' $type '.php') {
            
$classname 'Treiber_' $type;
            return new 
$classname;
        } else {
            throw new 
Exception ('Treiber nicht gefunden');
        }
    }
}
?>

Wenn diese Methode in einer Klasse definiert wird, erlaubt sie dieser, Treiber bei Bedarf zu laden. Wenn die Beispiel Klasse eine Datenbankabstraktionsklasse wäre, könnte das Laden eines MySQL und SQLite Treibers wie folgt aussehen:

<?php
// Lade den MySQL Treiber
$mysql Beispiel::factory('MySQL');

// Lade den SQLite Treiber
$sqlite Beispiel::factory('SQLite');
?>

Singleton

Das Singleton Pattern greift in Situationen, in denen es nur eine Instanz einer Klasse geben darf. Das gebräuchlichste Beispiel ist eine Datenbankverbindung. Die Implementierung dieses Musters erlaubt dem Programmierer diese einzige Instanz leicht für viele andere Objekte zugänglich zu machen.

Beispiel #2 Singleton Funktion

<?php
class Beispiel
{
    
// Speichert die Instanz der Klasse
    
private static $instance;
    
    
// Ein private Konstruktor; verhindert die direkte Erzeugung des Objektes
    
private function __construct() 
    {
        echo 
'Ich bin hergestellt';
    }

    
// Die Singleton Funktion
    
public static function singleton() 
    {
        if (!isset(
self::$instance)) {
            
$c __CLASS__;
            
self::$instance = new $c;
        }

        return 
self::$instance;
    }
    
    
// Beispielmethode
    
public function bellen()
    {
        echo 
'Wuff!';
    }

    
// Halte Benutzer vom Klonen der Instanz ab
    
public function __clone()
    {
        
trigger_error('Klonen ist nicht erlaubt.'E_USER_ERROR);
    }

}

?>

Dies erlaubt das Abrufen einer einzigen Instanz der Beispiel Klasse.

<?php
// Das wird fehlschlagen, weil der Kosntruktor private ist
$test = new Beispiel

// Das wird immer eine einzige Instanz der Klasse abrufen
$test Beispiel::singleton();
$test->bellen();

// Das wird einen E_USER_ERROR ausgeben
$test_clone = clone $test;

?>


Magische Methoden

Die Funktionen __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state und __clone sind in PHP-Klassen magisch. Man kann keine Funktionen gleichen Namens in einer seiner Klassen haben, wenn man nicht die magische Funktionalität, die sie mit sich bringen, haben will.

Achtung

PHP reserviert alle Funktionsnamen, die mit __ beginnen, als magisch. Es wird empfohlen, keine Funktionsnamen mit __ in PHP zu benutzen, es sei denn, man möchte dokumentierte magische Funktionalität verwenden.

__sleep und __wakeup

serialize() prüft, ob Ihre Klasse eine Funktion mit dem magischen Namen __sleep besitzt. Wenn dem so ist, wird die Funktion vor jeder Serialisierung ausgeführt. Sie kann das Objekt aufräumen und es wird von ihr erwartet, dass sie ein Array mit den Namen aller Variablen zurückliefert, die serialisiert werden sollen. Wenn die Methode nichts zurückgibt, so wird NULL serialisiert und eine E_NOTICE ausgegeben.

Die beabsichtigte Verwendung von __sleep ist, nicht gespeicherte Daten zu sichern oder ähnliche Aufräumarbeiten zu erledigen. Die Funktion ist ebenfalls nützlich, wenn Sie sehr große Objekte haben, welche nicht komplett gespeichert werden müssen.

Umgekehrt überprüft unserialize() die Anwesenheit einer Funktion mit dem magischen Namen __wakeup. Falls vorhanden, kann diese Funktion alle Ressourcen, die das Objekt haben könnte, wiederherstellen.

Der beabsichtigte Zweck von __wakeup ist es, alle Datenbankverbindungen wiederherzustellen, die während der Serialisierung verloren gegangen sein könnten, oder auch andere Aufgaben zur erneuten Initialisierung.

Beispiel #1 Sleep- und Wakeup-Beispiel

<?php
class Connection {
    protected 
$link;
    private 
$server$username$password$db;

    public function 
__construct($server$username$password$db)
    {
        
$this->server $server;
        
$this->username $username;
        
$this->password $password;
        
$this->db $db;
        
$this->connect();
    }

    private function 
connect()
    {
        
$this->link mysql_connect($this->server$this->username$this->password);
        
mysql_select_db($this->db$this->link);
    }

    public function 
__sleep()
    {
        return array(
'server''username''password''db');
    }

    public function 
__wakeup()
    {
        
$this->connect();
    }
}
?>

__toString

Die __toString-Methode erlaubt einer Klasse zu entscheiden, wie sie reagieren will, wenn sie in eine Zeichenkette umgewandelt wird.

Beispiel #2 Einfaches Beispiel

<?php
// Deklariere eine einfache Klasse
class TestClass
{
    public 
$foo;

    public function 
__construct($foo) {
        
$this->foo $foo;
    }

    public function 
__toString() {
        return 
$this->foo;
    }
}

$class = new TestClass('Hallo');
echo 
$class;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Hallo

Es muss angemerkt werden, dass die __toString-Methode in Versionen vor PHP 5.2.0 nur in direkter Kombination mit echo() oder print() aufgerufen wurde. Beginnend mit PHP 5.2.0 erfolgt dieser Aufruf in jedem Stringkontext (z.B. in printf() mit %s-Platzhalter), aber in keinem der anderen Typenkontexte (z.B. mit dem %d-Platzhalter). Ebenfalls beginnend mit PHP 5.2.0 bewirkt die Umwandlung eines Objekts ohne __toString-Methode in einen String einen Fehler der Klasse E_RECOVERABLE_ERROR.

__invoke

Die __invole-Methode wird aufgerufen, wenn ein Skript versucht, ein Objekt als Funktion aufzurufen.

Hinweis: Dieses Feature ist ab PHP 5.3.0 verfügbar.

Beispiel #3 Nutzung von __invoke

<?php
class CallableClass {
  function 
__invoke($x) {
    
var_dump($x);
  }
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

int(5)
bool(true)

__set_state

Diese statische Methode wird seit PHP 5.1.0 für Klassen aufgerufen, die mittels var_export() exportiert werden.

Der einzige Parameter dieser Methode ist ein Array, welches aus exportierten Eigenschaften der Form array('Eigenschaft' => Wert, ...) besteht.

Beispiel #4 Verwendung von __set_state (seit PHP 5.1.0)

<?php

class A
{
    public 
$var1;
    public 
$var2;

    public static function 
__set_state($an_array// seit PHP 5.1.0
    
{
        
$obj = new A;
        
$obj->var1 $an_array['var1'];
        
$obj->var2 $an_array['var2'];
        return 
$obj;
    }
}

$a = new A;
$a->var1 5;
$a->var2 'foo';

eval(
'$b = ' var_export($atrue) . ';'); // $b = A::__set_state(array(
                                            //    'var1' => 5,
                                            //    'var2' => 'foo',
                                            // ));
var_dump($b);

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}


Final-Schlüsselwort

PHP 5 führt das final-Schlüsselwort ein, welches Kindklassen davon abhält, Methoden zu überschreiben, indem man der Definition final voranstellt. Wenn die Klasse selbst als final definiert wird, kann sie nicht erweitert werden.

Beispiel #1 Beispiel für final-Methoden

<?php
class BaseClass {
   public function 
test() {
       echo 
"BaseClass::test() aufgerufen\n";
   }

   final public function 
moreTesting() {
       echo 
"BaseClass::moreTesting() aufgerufen\n";
   }
}

class 
ChildClass extends BaseClass {
   public function 
moreTesting() {
       echo 
"ChildClass::moreTesting() aufgerufen\n";
   }
}
// Erzeugt einen fatalen Fehler: Cannot override final method BaseClass::moreTesting()
?>

Beispiel #2 Beispiel für final-Klassen

<?php
final class BaseClass {
   public function 
test() {
       echo 
"BaseClass::test() aufgerufen\n";
   }

   
// Es macht hier keinen Unterschied, ob die Methode final ist oder nicht
   
final public function moreTesting() {
       echo 
"BaseClass::moreTesting() aufgerufen\n";
   }
}

class 
ChildClass extends BaseClass {
}
// Erzeugt einen fatalen Fehler: Class ChildClass may not inherit from final class (BaseClass)
?>

Hinweis: Eigenschaften können nicht als final deklariert werden; nur Klassen und Methoden können als final deklariert werden.



Objekte klonen

Eine Kopie eines Objektes mit vollständig replizierten Eigenschaften zu erzeugen ist nicht immer das gewünschte Verhalten. Ein gutes Beispiel für die Notwendigkeit von Kopierkonstruktoren ist ein Objekt, welches ein GTK Fenster repräsentiert und dieses Objekt enthält die Ressource des GTK-Fensters. Wenn Sie ein Duplikat dieses Objektes erzeugen, könnten Sie ein neues Fenster mit gleichen Eigenschaften erzeugen wollen und das neue Objekt soll die Ressource des neuen Fensters speichern. Ein weiteres Beispiel ist ein Objekt, welches eine Referenz auf ein anderes Objekt, das es benutzt, hält und wenn das Vaterobjekt repliziert wird, will man eine neue Instanz dieses anderen Objektes erzeugen, damit das Replikat eine eigene Kopie besitzt.

Eine Objektkopie wird durch die Nutzung des clone Schlüsselwortes (welches wenn möglich die __clone() Methode des Objektes aufruft) erzeugt. Die __clone() Methode eines Objektes kann nicht direkt aufgerufen werden.

$kopie_des_objektes = clone $objekt;

Wenn ein Objekt geklont wird, wird PHP 5 eine seichte Kopie der Eigenschaften des Objektes durchführen. Alle Eigenschaften, die Referenzen auf andere Variablen sind, werden Referenzen bleiben. Falls eine __clone() Methode definiert ist, wird die __clone() Methode des frisch erzeugten Objektes aufgerufen, um alle notwendigen Eigenschaften die geändert werden müssen ändern zu können.

Beispiel #1 Ein Objekt klonen

<?php
class SubObject
{
    static 
$instanzen 0;
    public 
$instanz;

    public function 
__construct() {
        
$this->instanz = ++self::$instanzen;
    }

    public function 
__clone() {
        
$this->instanz = ++self::$instanzen;
    }
}

class 
MyCloneable
{
    public 
$objekt1;
    public 
$objekt2;

    function 
__clone()
    {
        
// Erzwinge eine Kopie von this->object,
        // andernfalls wird es auf das selbe Objekt zeigen
        
$this->objekt1 = clone $this->objekt1;
    }
}

$obj = new MyCloneable();

$obj->objekt1 = new SubObject();
$obj->objekt2 = new SubObject();

$obj2 = clone $obj;


print(
"Original Objekt:\n");
print_r($obj);

print(
"geklontes Objekt:\n");
print_r($obj2);

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instanz] => 1
        )

    [object2] => SubObject Object
        (
            [instanz] => 2
        )

)
Cloned Object:
MyCloneable Object
(
    [objekt1] => SubObject Object
        (
            [instanz] => 3
        )

    [objekt2] => SubObject Object
        (
            [instanz] => 2
        )

)


Objekte vergleichen

In PHP 5 ist der Vergleich von Objekten komplizierter als in PHP 4 und in stärkerer Übereinstimmung zu dem, was man von einer objektorientierten Programiersprache erwartet (nicht dass PHP 5 eine derartige Sprache wäre).

Wenn man den Vergleichsoperator (==) benutzt, werden Objektvariablen auf einfache Weise verglichen, nämlich: Zwei Objektinstanzen sind gleich, wenn Sie die gleichen Attribute haben und Instanzen der selben Klasse sind.

Wenn man andererseits den Identitätsoperator benutzt (===) sind zwei Objekte identisch, genau dann wenn sie die selbe Instanz der selben Klasse referenzieren.

Ein Beispiel wird diese Regeln verdeutlichen.

Beispiel #1 Beispiel für Objektvergleiche in PHP 5

<?php
function bool2str($bool)
{
    if (
$bool === false) {
        return 
'FALSE';
    } else {
        return 
'TRUE';
    }
}

function 
compareObjects(&$o1, &$o2)
{
    echo 
'o1 == o2 : ' bool2str($o1 == $o2) . "\n";
    echo 
'o1 != o2 : ' bool2str($o1 != $o2) . "\n";
    echo 
'o1 === o2 : ' bool2str($o1 === $o2) . "\n";
    echo 
'o1 !== o2 : ' bool2str($o1 !== $o2) . "\n";
}

class 
Flag
{
    public 
$flag;

    function 
Flag($flag true) {
        
$this->flag $flag;
    }
}

class 
OtherFlag
{
    public 
$flag;

    function 
OtherFlag($flag true) {
        
$this->flag $flag;
    }
}

$o = new Flag();
$p = new Flag();
$q $o;
$r = new OtherFlag();

echo 
"Zwei Instanzen der selben Klasse\n";
compareObjects($o$p);

echo 
"\nZwei Referenzen auf die selbe Instanz\n";
compareObjects($o$q);

echo 
"\nInstanzen zweier verschiedener Klassen\n";
compareObjects($o$r);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Zwei Instanzen der selben Klasse
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE

Zwei Referenzen auf die selbe Instanz
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE

Instanzen zweier verschiedener Klassen
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE

Hinweis: Extensions can define own rules for their objects comparison.



Type Hinting

PHP 5 führt Type Hinting ein. Funktionen sind damit fähig, Parameter zu zwingen, Objekte (indem man den Namen der Klasse im Funktionsprototyp spezifiziert) oder Arrays (seit PHP 5.1) zu sein. Wird dabei NULL als Vorgabewert für einen Parameter angegeben so ist dies ein weiterer gültiger Aufrufwert neben dem spezifizierten Typ.

Beispiel #1 Type Hinting Beispiele

<?php
// Eine Beispielklasse
class MyClass
{
    
/**
     * Eine Testfunktion
     *
     * Der erste Parameter muss ein Objekt des Typs OtherClass sein
     */
    
public function test(OtherClass $otherclass) {
        echo 
$otherclass->var;
    }


    
/**
     * Eine weitere Testfunktion
     *
     * Der erste Parameter muss ein Array sein
     */
    
public function test_array(array $input_array) {
        
print_r($input_array);
    }
}

// Eine weitere Beispielklasse
class OtherClass {
    public 
$var 'Hallo Welt';
}
?>

Wird der Type Hint nicht erfüllt, führt dies zu einem abfangbaren fatalen Fehler.

<?php
// Eine Instanz jeder Klasse
$myclass = new MyClass;
$otherclass = new OtherClass;

// Fatal Error: Argument 1 must be an object of class OtherClass
$myclass->test('hello');

// Fatal Error: Argument 1 must be an instance of OtherClass
$foo = new stdClass;
$myclass->test($foo);

// Fatal Error: Argument 1 must not be null
$myclass->test(null);

// Funktionier: Gibt Hallo Welt aus
$myclass->test($otherclass);

// Fatal Error: Argument 1 must be an array
$myclass->test_array('a string');

// Funktioniert: Gibt das Array aus
$myclass->test_array(array('a''b''c'));
?>

Type Hinting funktioniert ebenfalls mit Methoden

<?php
// Eine Beispielklasse
class MyClass {
    public 
$var 'Hallo Welt';
}

/**
 * Eine Testfunktion
 *
 * Der erste Parameter muss ein Objekt vom Typ MyClass sein
 */
function MyFunction (MyClass $foo) {
    echo 
$foo->var;
}

// Funktioniert
$myclass = new MyClass;
MyFunction($myclass);
?>

Type hinting mit möglichen NULL Werten:

<?php

/* Akzeptiert NULL Werte */
function test(stdClass $obj NULL) {

}

test(NULL);
test(new stdClass);

?>

Type Hints können nur vom Typen object und (seit PHP 5.1) array sein. Traditionelles Type Hinting mit int und string wird nicht unterstützt.



Späte statische Bindung

Beginnend mit PHP 5.3.0 unterstützt PHP späte statische Bindung ("Late static binding"). Hiermit kann die aufgerufene Klasse im Kontext statischer Vererbung referenziert werden.

Diese Funktionalität wurde in Hinblick auf die interne Perspektive als "späte statische Bindung" benannt. "Späte Bindung" bezieht sich auf die Tatsache, dass static:: nicht mehr über die Klasse, in der die aufgerufene Methode definiert ist, aufgelöst wird, stattdessen wird diese mit Hilfe von Laufzeitinformationen bestimmt. Die Benennung als "statische Bindung" beruht darauf, dass dieser Mechanismus unter anderem für statische Methodenaufrufe genutzt werden kann.

Beschränkungen von self::

Statische Referenzen auf die aktuelle Klasse wie self:: oder __CLASS__ werden mit Hilfe der Klasse, zu der die Methode gehört, also in welcher sie definiert ist, aufgelöst.

Beispiel #1 Nutzung von self::

<?php
class {
    public static function 
who() {
        echo 
__CLASS__;
    }
    public static function 
test() {
        
self::who();
    }
}

class 
extends {
    public static function 
who() {
         echo 
__CLASS__;
    }
}

B::test();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

A

Nutzung später statischer Bindung

Späte statische Bindung versucht diese Beschränkung zu umgehen, indem ein neues Schlüsselwort eingeführt wird, dass die Klasse referenziert, die tatsächlich zur Laufzeit genutzt wurde, also im Wesentlichen ein Schlüsselwort, das es Ihnen gestattet im vorangegangenen Beispiel aus der aufgerufenen Methode test() die Klasse B zu referenzieren. Es wurde entschieden, kein neues Schlüsselwort einzuführen sondern statt dessen static zu verwenden, das bereits als reserviertes Schlüsselwort existierte.

Beispiel #2 Einfache Nutzung von static::

<?php
class {
    public static function 
who() {
        echo 
__CLASS__;
    }
    public static function 
test() {
        static::
who(); // statische Bindung
    
}
}

class 
extends {
    public static function 
who() {
         echo 
__CLASS__;
    }
}

B::test();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

B

Hinweis: In statischen Methoden verhält sich static:: nicht wie $this! $this folgt den Vererbungsregeln, während static:: dies nicht tut. Dieser Unterschied wird später in diesem Abschnitt noch genauer beschrieben.

Beispiel #3 Nutzung von static:: außerhalb eines statischen Kontexts

<?php
class TestChild extends TestParent {
    public function 
__construct() {
        static::
who();
    }

    public function 
test() {
        
$o = new TestParent();
    }

    public static function 
who() {
        echo 
__CLASS__."\n";
    }
}

class 
TestParent {
    public function 
__construct() {
        static::
who();
    }

    public static function 
who() {
        echo 
__CLASS__."\n";
    }
}
$o = new TestChild;
$o->test();

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

TestChild
TestParent

Hinweis: Die Auflösung später statischer Bindungen endet mit einem vollständig aufgelösten statischen Aufruf ohne Alternative. Statische Aufrufe, die Schlüsselworte wie parent:: oder self:: nutzen, geben dagegen die Aufrufinformationen weiter.

Beispiel #4 Weitergegebene und nicht weitergegebene Aufrufe

<?php
class {
    public static function 
foo() {
        static::
who();
    }

    public static function 
who() {
        echo 
__CLASS__."\n";
    }
}

class 
extends {
    public static function 
test() {
        
A::foo();
        
parent::foo();
        
self::foo();
    }

    public static function 
who() {
        echo 
__CLASS__."\n";
    }
}
class 
extends {
    public static function 
who() {
        echo 
__CLASS__."\n";
    }
}

C::test();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

A
C
C

Sonderfälle

Es gibt in PHP viele verschiedene Wege den Aufruf einer Methode auszulösen. Da bei später statischer Bindung die Auflösung von Aufrufen auf Laufzeitinformationen beruht, kann sie in speziellen Fällen zu unerwarteten Ergebnissen führen.

Beispiel #5 Späte statische Bindung in 'magischen' Methoden

<?php
class {

   protected static function 
who() {
        echo 
__CLASS__."\n";
   }

   public function 
__get($var) {
       return static::
who();
   }
}

class 
extends {

   protected static function 
who() {
        echo 
__CLASS__."\n";
   }
}

$b = new B;
$b->foo;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

B


Objects and references

One of the key-point of PHP5 OOP that is often mentioned is that "objects are passed by references by default" This is not completely true. This section rectifies that general thought using some examples.

Eine PHP-Referenz ist ein Alias, der es ermöglicht, dass zwei unterschiedliche Variablen sich auf denselben Wert beziehen. Beginnend mit PHP 5 enthält eine Objektvariable nicht mehr das Objekt als Wert, sondern nur einen Objektbezeichner, der bei Objektzugriffen die Identifizierung des eigentlichen Objektes ermöglicht. Wenn ein Objekt als Argument oder Rückgabewert übergeben oder einer anderen Variable zugewiesen wird, so sind die verschiedenen Variablen keine Aliase, sie enthalten vielmehr Kopien des Bezeichners, die auf dasselbe Objekt verweisen.

Beispiel #1 Referenzen und Objekte

<?php
class {
    public 
$foo 1;
}  

$a = new A;
$b $a;     // $a und $b sind Kopien des gleichen Bezeichners
             // ($a) = ($b) = <id>
$b->foo 2;
echo 
$a->foo."\n";


$c = new A;
$d = &$c;    // $c und $d sind Referenzen
             // ($c,$d) = <id>

$d->foo 2;
echo 
$c->foo."\n";


$e = new A;

function 
foo($obj) {
    
// ($obj) = ($e) = <id>
    
$obj->foo 2;
}

foo($e);
echo 
$e->foo."\n";

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2
2
2


Object Serialization

Serializing objects - objects in sessions

serialize() returns a string containing a byte-stream representation of any value that can be stored in PHP. unserialize() can use this string to recreate the original variable values. Using serialize to save an object will save all variables in an object. The methods in an object will not be saved, only the name of the class.

In order to be able to unserialize() an object, the class of that object needs to be defined. That is, if you have an object of class A and serialize this, you'll get a string that refers to class A and contains all values of variabled contained it. If you want to be able to unserialize this in another file, an object of class A, the definition of class A must be prest ent in in that file first. This can be done for example by storing the class definition of class A in an include file and including this file or making use of the spl_autoload_register() function.

<?php
// classa.inc:
  
  
class {
      public 
$one 1;
    
      public function 
show_one() {
          echo 
$this->one;
      }
  }
  
// page1.php:

  
include("classa.inc");
  
  
$a = new A;
  
$s serialize($a);
  
// store $s somewhere where page2.php can find it.
  
file_put_contents('store'$s);

// page2.php:
  
  // this is needed for the unserialize to work properly.
  
include("classa.inc");

  
$s file_get_contents('store');
  
$a unserialize($s);

  
// now use the function show_one() of the $a object.  
  
$a->show_one();
?>

If an application is using sessions and uses session_register() to register objects, these objects are serialized automatically at the end of each PHP page, and are unserialized automatically on each of the following pages. This means that these objects can show up on any of the application's pages once they become part of the session. However, session_register() is deprecated as of PHP 5.3.0, and removed as of PHP 6.0.0. Reliance on this function is not recommended.

It is strongly recommended that if an application serializes objects, for use later in the application, that the application include the class definition for that object throughout the application. Not doing so might result in an object being unserialized without a class definition, which will result in PHP giving the object a class of __PHP_Incomplete_Class_Name, which has no methods and would render the object useless.

So if in the example above $a became part of a session by running session_register("a"), you should include the file classa.inc on all of your pages, not only page1.php and page2.php.




Namespaces

Inhaltsverzeichnis


Namespaces overview

What are namespaces? In the broadest definition namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them. As a concrete example, the file foo.txt can exist in both directory /home/greg and in /home/other, but two copies of foo.txt cannot co-exist in the same directory. In addition, to access the foo.txt file outside of the /home/greg directory, we must prepend the directory name to the file name using the directory separator to get /home/greg/foo.txt. This same principle extends to namespaces in the programming world.

In the PHP world, namespaces are designed to solve two problems that authors of libraries and applications encounter when creating re-usable code elements such as classes or functions:

  1. Name collisions between code you create, and internal PHP classes/functions/constants or third-party classes/functions/constants.
  2. Ability to alias (or shorten) Extra_Long_Names designed to alleviate the first problem, improving readability of source code.

PHP Namespaces provide a way in which to group related classes, functions and constants. Here is an example of namespace syntax in PHP:

Beispiel #1 Namespace syntax example

<?php
namespace my\name// see "Defining Namespaces" section

class MyClass {}
function 
myfunction() {}
const 
MYCONST 1;

$a = new MyClass;
$c = new \my\name\MyClass// see "Global Space" section

$a strlen('hi'); // see "Using namespaces: fallback to global
                   // function/constant" section

$d = namespace\MYCONST// see "namespace operator and __NAMESPACE__
                        // constant" section
$d __NAMESPACE__ '\MYCONST';
echo 
constant($d); // see "Namespaces and dynamic language features" section
?>

Namespaces are available in PHP as of PHP 5.3.0.



Defining namespaces

Although any valid PHP code can be contained within a namespace, only three type of code are affected by namespaces: classes, functions and constants.

Namespaces are declared using the namespace keyword. A file containing a namespace must declare the namespace at the top of the file before any other code - with one exception: the declare keyword.

Beispiel #1 Declaring a single namespace

<?php
namespace MyProject;

const 
CONNECT_OK 1;
class 
Connection /* ... */ }
function 
connect() { /* ... */  }

?>

The only code construct allowed before a namespace declaration is the declare statement, for defining encoding of a source file. In addition, no non-PHP code may precede a namespace declaration, including extra whitespace:

Beispiel #2 Declaring a single namespace

<html>
<?php
namespace MyProject// fatal error - namespace must be the first statement in the script
?>

In addition, unlike any other PHP construct, the same namespace may be defined in multiple files, allowing splitting up of a namespace's contents across the filesystem.



Declaring sub-namespaces

Much like directories and files, PHP namespaces also contain the ability to specify a hierarchy of namespace names. Thus, a namespace name can be defined with sub-levels:

Beispiel #1 Declaring a single namespace with hierarchy

<?php
namespace MyProject\Sub\Level;

const 
CONNECT_OK 1;
class 
Connection /* ... */ }
function 
connect() { /* ... */  }

?>

The above example creates constant MyProject\Sub\Level\CONNECT_OK, class MyProject\Sub\Level\Connection and function MyProject\Sub\Level\connect.



Defining multiple namespaces in the same file

Multiple namespaces may also be declared in the same file. There are two allowed syntaxes.

Beispiel #1 Declaring multiple namespaces, simple combination syntax

<?php
namespace MyProject;

const 
CONNECT_OK 1;
class 
Connection /* ... */ }
function 
connect() { /* ... */  }

namespace 
AnotherProject;

const 
CONNECT_OK 1;
class 
Connection /* ... */ }
function 
connect() { /* ... */  }
?>

This syntax is not recommended for combining namespaces into a single file. Instead it is recommended to use the alternate bracketed syntax.

Beispiel #2 Declaring multiple namespaces, bracketed syntax

<?php
namespace MyProject {

const 
CONNECT_OK 1;
class 
Connection /* ... */ }
function 
connect() { /* ... */  }
}

namespace 
AnotherProject {

const 
CONNECT_OK 1;
class 
Connection /* ... */ }
function 
connect() { /* ... */  }
}
?>

It is strongly discouraged as a coding practice to combine multiple namespaces into the same file. The primary use case is to combine multiple PHP scripts into the same file.

To combine global non-namespaced code with namespaced code, only bracketed syntax is supported. Global code should be encased in a namespace statement with no namespace name as in:

Beispiel #3 Declaring multiple namespaces and unnamespaced code

<?php
namespace MyProject {

const 
CONNECT_OK 1;
class 
Connection /* ... */ }
function 
connect() { /* ... */  }
}

namespace { 
// global code
session_start();
$a MyProject\connect();
echo 
MyProject\Connection::start();
}
?>

No PHP code may exist outside of the namespace brackets except for an opening declare statement.

Beispiel #4 Declaring multiple namespaces and unnamespaced code

<?php
declare(encoding='UTF-8');
namespace 
MyProject {

const 
CONNECT_OK 1;
class 
Connection /* ... */ }
function 
connect() { /* ... */  }
}

namespace { 
// global code
session_start();
$a MyProject\connect();
echo 
MyProject\Connection::start();
}
?>



Using namespaces: Basics

Before discussing the use of namespaces, it is important to understand how PHP knows which namespaced element your code is requesting. A simple analogy can be made between PHP namespaces and a filesystem. There are three ways to access a file in a file system:

  1. Relative file name like foo.txt. This resolves to currentdirectory/foo.txt where currentdirectory is the directory currently occupied. So if the current directory is /home/foo, the name resolves to /home/foo/foo.txt.
  2. Relative path name like subdirectory/foo.txt. This resolves to currentdirectory/subdirectory/foo.txt.
  3. Absolute path name like /main/foo.txt. This resolves to /main/foo.txt.

The same principle can be applied to namespaced elements in PHP. For example, a class name can be referred to in three ways:

  1. Unqualified name, or an unprefixed class name like $a = new foo(); or foo::staticmethod();. If the current namespace is currentnamespace, this resolves to currentnamespace\foo. If the code is global, non-namespaced code, this resolves to foo. One caveat: unqualified names for functions and constants will resolve to global functions and constants if the namespaced function or constant is not defined. See Using namespaces: fallback to global function/constant for details.
  2. Qualified name, or a prefixed class name like $a = new subnamespace\foo(); or subnamespace\foo::staticmethod();. If the current namespace is currentnamespace, this resolves to currentnamespace\subnamespace\foo. If the code is global, non-namespaced code, this resolves to subnamespace\foo.
  3. Fully qualified name, or a prefixed name with global prefix operator like $a = new \currentnamespace\foo(); or \currentnamespace\foo::staticmethod();. This always resolves to the literal name specified in the code, currentnamespace\foo.

Here is an example of the three kinds of syntax in actual code:

file1.php

<?php
namespace Foo\Bar\subnamespace;

const 
FOO 1;
function 
foo() {}
class 
foo
{
    static function 
staticmethod() {}
}
?>

file2.php

<?php
namespace Foo\Bar;
include 
'file1.php';

const 
FOO 2;
function 
foo() {}
class 
foo
{
    static function 
staticmethod() {}
}

/* Unqualified name */
foo(); // resolves to function Foo\Bar\foo
foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod
echo FOO// resolves to constant Foo\Bar\FOO

/* Qualified name */
subnamespace\foo(); // resolves to function Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // resolves to class Foo\Bar\subnamespace\foo,
                                  // method staticmethod
echo subnamespace\FOO// resolves to constant Foo\Bar\subnamespace\FOO
                                  
/* Fully qualified name */
\Foo\Bar\foo(); // resolves to function Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod
echo \Foo\Bar\FOO// resolves to constant Foo\Bar\FOO
?>

Note that to access any global class, function or constant, a fully qualified name can be used, such as \strlen() or \Exception or \INI_ALL.

Beispiel #1 Accessing global classes, functions and constants from within a namespace

<?php
namespace Foo;

function 
strlen() {}
const 
INI_ALL 3;
class 
Exception {}

$a = \strlen('hi'); // calls global function strlen
$b = \INI_ALL// accesses global constant INI_ALL
$c = new \Exception('error'); // instantiates global class Exception
?>



Namespaces and dynamic language features

PHP's implementation of namespaces is influenced by its dynamic nature as a programming language. Thus, to convert code like the following example into namespaced code:

Beispiel #1 Dynamically accessing elements

example1.php:

<?php
class classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "global";

$a 'classname';
$obj = new $a// prints classname::__construct
$b 'funcname';
$b(); // prints funcname
echo constant('constname'), "\n"// prints global
?>

One must use the fully qualified name (class name with namespace prefix). Note that because there is no difference between a qualified and a fully qualified Name inside a dynamic class name, function name, or constant name, the leading backslash is not necessary.

Beispiel #2 Dynamically accessing namespaced elements

<?php
namespace namespacename;
class 
classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "namespaced";

include 
'example1.php';

$a 'classname';
$obj = new $a// prints classname::__construct
$b 'funcname';
$b(); // prints funcname
echo constant('constname'), "\n"// prints global

/* note that if using double quotes, "\\namespacename\\classname" must be used */
$a '\namespacename\classname';
$obj = new $a// prints namespacename\classname::__construct
$a 'namespacename\classname';
$obj = new $a// also prints namespacename\classname::__construct
$b 'namespacename\funcname';
$b(); // prints namespacename\funcname
$b '\namespacename\funcname';
$b(); // also prints namespacename\funcname
echo constant('\namespacename\constname'), "\n"// prints namespaced
echo constant('namespacename\constname'), "\n"// also prints namespaced
?>

Be sure to read the note about escaping namespace names in strings.



namespace keyword and __NAMESPACE__ constant

PHP supports two ways of abstractly accessing elements within the current namespace, the __NAMESPACE__ magic constant, and the namespace keyword.

The value of __NAMESPACE__ is a string that contains the current namespace name. In global, un-namespaced code, it contains an empty string.

Beispiel #1 __NAMESPACE__ example, namespaced code

<?php
namespace MyProject;

echo 
'"'__NAMESPACE__'"'// outputs "MyProject"
?>

Beispiel #2 __NAMESPACE__ example, global code

<?php

echo '"'__NAMESPACE__'"'// outputs ""
?>

The __NAMESPACE__ constant is useful for dynamically constructing names, for instance:

Beispiel #3 using __NAMESPACE__ for dynamic name construction

<?php
namespace MyProject;

function 
get($classname)
{
    
$a __NAMESPACE__ '\\' $classname;
    return new 
$a;
}
?>

The namespace keyword can be used to explicitly request an element from the current namespace or a sub-namespace. It is the namespace equivalent of the self operator for classes.

Beispiel #4 the namespace operator, inside a namespace

<?php
namespace MyProject;

use 
blah\blah as mine// see "Using namespaces: importing/aliasing"

blah\mine(); // calls function MyProject\blah\mine()
namespace\blah\mine(); // calls function MyProject\blah\mine()

namespace\func(); // calls function MyProject\func()
namespace\sub\func(); // calls function MyProject\sub\func()
namespace\cname::method(); // calls static method "method" of class MyProject\cname
$a = new namespace\sub\cname(); // instantiates object of class MyProject\sub\cname
$b = namespace\CONSTANT// assigns value of constant MyProject\CONSTANT to $b
?>

Beispiel #5 the namespace operator, in global code

<?php

namespace\func(); // calls function func()
namespace\sub\func(); // calls function sub\func()
namespace\cname::method(); // calls static method "method" of class cname
$a = new namespace\sub\cname(); // instantiates object of class sub\cname
$b = namespace\CONSTANT// assigns value of constant CONSTANT to $b
?>



Using namespaces: Aliasing/Importing

The ability to refer to an external fully qualified name with an alias, or importing, is an important feature of namespaces. This is similar to the ability of unix-based filesystems to create symbolic links to a file or to a directory.

PHP namespaces support two kinds of aliasing or importing: aliasing a class name, and aliasing a namespace name. Note that importing a function or constant is not supported.

In PHP, aliasing is accomplished with the use operator. Here is an example showing all 3 kinds of importing:

Beispiel #1 importing/aliasing with the use operator

<?php
namespace foo;
use 
My\Full\Classname as Another;

// this is the same as use My\Full\NSname as NSname
use My\Full\NSname;

// importing a global class
use \ArrayObject;

$obj = new namespace\Another// instantiates object of class foo\Another
$obj = new Another// instantiates object of class My\Full\Classname
NSname\subns\func(); // calls function My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // instantiates object of class ArrayObject
// without the "use \ArrayObject" we would instantiate an object of class foo\ArrayObject
?>

Note that for namespaced names (fully qualified namespace names containing namespace separator, such as Foo\Bar as opposed to global names that do not, such as FooBar), the leading backslash is unnecessary and not allowed, as import names must be fully qualified, and are not processed relative to the current namespace.

PHP additionally supports a convenience shortcut to place multiple use statements on the same line

Beispiel #2 importing/aliasing with the use operator, multiple use statements combined

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// instantiates object of class My\Full\Classname
NSname\subns\func(); // calls function My\Full\NSname\subns\func
?>

Importing is performed at compile-time, and so does not affect dynamic class, function or constant names.

Beispiel #3 Importing and dynamic names

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// instantiates object of class My\Full\Classname
$a 'Another';
$obj = new $a;      // instantiates object of class Another
?>

In addition, importing only affects unqualified and qualified names. Fully qualified names are absolute, and unaffected by imports.

Beispiel #4 Importing and fully qualified names

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// instantiates object of class My\Full\Classname
$obj = new \Another// instantiates object of class Another
$obj = new Another\thing// instantiates object of class My\Full\Classname\thing
$obj = new \Another\thing// instantiates object of class Another\thing
?>



Global space

Without any namespace definition, all class and function definitions are placed into the global space - as it was in PHP before namespaces were supported. Prefixing a name with \ will specify that the name is required from the global space even in the context of the namespace.

Beispiel #1 Using global space specification

<?php
namespace A\B\C;

/* This function is A\B\C\fopen */
function fopen() { 
     
/* ... */
     
$f = \fopen(...); // call global fopen
     
return $f;

?>



Using namespaces: fallback to global function/constant

Inside a namespace, when PHP encounters a unqualified Name in a class name, function or constant context, it resolves these with different priorities. Class names always resolve to the current namespace name. Thus to access internal or non-namespaced user classes, One must refer to them with their fully qualified Name as in:

Beispiel #1 Accessing global classes inside a namespace

<?php
namespace A\B\C;
class 
Exception extends \Exception {}

$a = new Exception('hi'); // $a is an object of class A\B\C\Exception
$b = new \Exception('hi'); // $b is an object of class Exception

$c = new ArrayObject// fatal error, class A\B\C\ArrayObject not found
?>

For functions and constants, PHP will fall back to global functions or constants if a namespaced function or constant does not exist.

Beispiel #2 global functions/constants fallback inside a namespace

<?php
namespace A\B\C;

const 
E_ERROR 45;
function 
strlen($str)
{
    return \
strlen($str) - 1;
}

echo 
E_ERROR"\n"// prints "45"
echo INI_ALL"\n"// prints "7" - falls back to global INI_ALL

echo strlen('hi'), "\n"// prints "1"
if (is_array('hi')) { // prints "is not array"
    
echo "is array\n";
} else {
    echo 
"is not array\n";
}
?>



Name resolution rules

For the purposes of these resolution rules, here are some important definitions:

Namespace name definitions
Unqualified name

This is an identifier without a namespace separator, such as Foo

Qualified name

This is an identifier with a namespace separator, such as Foo\Bar

Fully qualified name

This is an identifier with a namespace separator that begins with a namespace separator, such as \Foo\Bar. namespace\Foo is also a fully qualified name.

Names are resolved following these resolution rules:

  1. Calls to fully qualified functions, classes or constants are resolved at compile-time. For instance new \A\B resolves to class A\B.
  2. All unqualified and qualified names (not fully qualified names) are translated during compilation according to current import rules. For example, if the namespace A\B\C is imported as C, a call to C\D\e() is translated to A\B\C\D\e().
  3. Inside a namespace, all qualified names not translated according to import rules have the current namespace prepended. For example, if a call to C\D\e() is performed within namespace A\B, it is translated to A\B\C\D\e().
  4. Unqualified class names are translated during compilation according to current import rules (full name substituted for short imported name). In example, if the namespace A\B\C is imported as C, new C() is translated to new A\B\C().
  5. Inside namespace (say A\B), calls to unqualified functions are resolved at run-time. Here is how a call to function foo() is resolved:
    1. It looks for a function from the current namespace: A\B\foo().
    2. It tries to find and call the global function foo().
  6. Inside namespace (say A\B), calls to unqualified or qualified class names (not fully qualified class names) are resolved at run-time. Here is how a call to new C() or new D\E() is resolved. For new C():
    1. It looks for a class from the current namespace: A\B\C.
    2. It attempts to autoload A\B\C.
    For new D\E():
    1. It looks for a class by prepending the current namespace: A\B\D\E.
    2. It attempts to autoload A\B\D\E.
    To reference any global class in the global namespace, its fully qualified name new \C() must be used.

Beispiel #1 Name resolutions illustrated

<?php
namespace A;
use 
B\DC\as F;

// function calls

foo();      // first tries to call "foo" defined in namespace "A"
            // then calls global function "foo"

\foo();     // calls function "foo" defined in global scope

my\foo();   // calls function "foo" defined in namespace "A\my"

F();        // first tries to call "F" defined in namespace "A"
            // then calls global function "F"

// class references

new B();    // creates object of class "B" defined in namespace "A"
            // if not found, it tries to autoload class "A\B"

new D();    // using import rules, creates object of class "D" defined in namespace "B"
            // if not found, it tries to autoload class "B\D"

new F();    // using import rules, creates object of class "E" defined in namespace "C"
            // if not found, it tries to autoload class "C\E"

new \B();   // creates object of class "B" defined in global scope
            // if not found, it tries to autoload class "B"

new \D();   // creates object of class "D" defined in global scope
            // if not found, it tries to autoload class "D"

new \F();   // creates object of class "F" defined in global scope
            // if not found, it tries to autoload class "F"

// static methods/namespace functions from another namespace

B\foo();    // calls function "foo" from namespace "A\B"

B::foo();   // calls method "foo" of class "B" defined in namespace "A"
            // if class "A\B" not found, it tries to autoload class "A\B"

D::foo();   // using import rules, calls method "foo" of class "D" defined in namespace "B"
            // if class "B\D" not found, it tries to autoload class "B\D"

\B\foo();   // calls function "foo" from namespace "B"

\B::foo();  // calls method "foo" of class "B" from global scope
            // if class "B" not found, it tries to autoload class "B"

// static methods/namespace functions of current namespace

A\B::foo();   // calls method "foo" of class "B" from namespace "A\A"
              // if class "A\A\B" not found, it tries to autoload class "A\A\B"

\A\B::foo();  // calls method "foo" of class "B" from namespace "A\B"
              // if class "A\B" not found, it tries to autoload class "A\B"
?>


FAQ: things you need to know about namespaces

This FAQ is split into two sections: common questions, and some specifics of implementation that are helpful to understand fully.

First, the common questions.

  1. If I don't use namespaces, should I care about any of this?
  2. How do I use internal or global classes in a namespace?
  3. How do I use namespaces classes functions, or constants in their own namespace?
  4. How does a name like \my\name or \name resolve?
  5. How does a name like my\name resolve?
  6. How does an unqualified class name like name resolve?
  7. How does an unqualified function name or unqualified constant name like name resolve?

There are a few implementation details of the namespace implementations that are helpful to understand.

  1. Import names cannot conflict with classes defined in the same file.
  2. Nested namespaces are not allowed.
  3. Neither functions nor constants can be imported via the use statement.
  4. Dynamic namespace names (quoted identifiers) should escape backslash.
  5. Undefined Constants referenced using any backslash die with fatal error
  6. Cannot override special constants NULL, TRUE, FALSE, ZEND_THREAD_SAFE or ZEND_DEBUG_BUILD

If I don't use namespaces, should I care about any of this?

No. Namespaces do not affect any existing code in any way, or any as-yet-to-be-written code that does not contain namespaces. You can write this code if you wish:

Beispiel #1 Accessing global classes outside a namespace

<?php
$a 
= new \stdClass;

This is functionally equivalent to:

Beispiel #2 Accessing global classes outside a namespace

<?php
$a 
= new stdClass;

How do I use internal or global classes in a namespace?

Beispiel #3 Accessing internal classes in namespaces

<?php
namespace foo;
$a = new \stdClass;

function 
test(\ArrayObject $typehintexample null) {}

$a = \DirectoryIterator::CURRENT_AS_FILEINFO;

// extending an internal or global class
class MyException extends \Exception {}
?>

How do I use namespaces classes, functions, or constants in their own namespace?

Beispiel #4 Accessing internal classes, functions or constants in namespaces

<?php
namespace foo;

class 
MyClass {}

// using a class from the current namespace as a type hint
function test(MyClass $typehintexample null) {}
// another way to use a class from the current namespace as a type hint
function test(\foo\MyClass $typehintexample null) {}

// extending a class from the current namespace
class Extended extends MyClass {}

// accessing a global function
$a = \globalfunc();

// accessing a global constant
$b = \INI_ALL;
?>

How does a name like \my\name or \name resolve?

Names that begin with a \ always resolve to what they look like, so \my\name is in fact my\name, and \Exception is Exception.

Beispiel #5 Fully Qualified names

<?php
namespace foo;
$a = new \my\name(); // instantiates "my\name" class
echo \strlen('hi'); // calls function "strlen"
$a = \INI_ALL// $a is set to the value of constant "INI_ALL"
?>

How does a name like my\name resolve?

Names that contain a backslash but do not begin with a backslash like my\name can be resolved in 2 different ways.

If there is an import statement that aliases another name to my, then the import alias is applied to the my in my\name.

Otherwise, the current namespace name is prepended to my\name.

Beispiel #6 Qualified names

<?php
namespace foo;
use 
blah\blah as foo;

$a = new my\name(); // instantiates "foo\my\name" class
foo\bar::name(); // calls static method "name" in class "blah\blah\bar"
my\bar(); // calls function "foo\my\bar"
$a my\BAR// sets $a to the value of constant "foo\my\BAR"
?>

How does an unqualified class name like name resolve?

Class names that do not contain a backslash like name can be resolved in 2 different ways.

If there is an import statement that aliases another name to name, then the import alias is applied.

Otherwise, the current namespace name is prepended to name.

Beispiel #7 Unqualified class names

<?php
namespace foo;
use 
blah\blah as foo;

$a = new name(); // instantiates "foo\name" class
foo::name(); // calls static method "name" in class "blah\blah"
?>

How does an unqualified function name or unqualified constant name like name resolve?

Function or constant names that do not contain a backslash like name can be resolved in 2 different ways.

First, the current namespace name is prepended to name.

Finally, if the constant or function name does not exist in the current namespace, a global constant or function name is used if it exists.

Beispiel #8 Unqualified function or constant names

<?php
namespace foo;
use 
blah\blah as foo;

const 
FOO 1;

function 
my() {}
function 
foo() {}
function 
sort(&$a)
{
    
sort($a);
    
$a array_flip($a);
    return 
$a;
}

my(); // calls "foo\my"
$a strlen('hi'); // calls global function "strlen" because "foo\strlen" does not exist
$arr = array(1,3,2);
$b sort($arr); // calls function "foo\sort"
$c foo(); // calls function "foo\foo" - import is not applied

$a FOO// sets $a to value of constant "foo\FOO" - import is not applied
$b INI_ALL// sets $b to value of global constant "INI_ALL"
?>

Import names cannot conflict with classes defined in the same file.

The following script combinations are legal:

file1.php

<?php
namespace my\stuff;
class 
MyClass {}
?>

another.php

<?php
namespace another;
class 
thing {}
?>

file2.php

<?php
namespace my\stuff;
include 
'file1.php';
include 
'another.php';

use 
another\thing as MyClass;
$a = new MyClass// instantiates class "thing" from namespace another
?>

There is no name conflict, even though the class MyClass exists within the my\stuff namespace, because the MyClass definition is in a separate file. However, the next example causes a fatal error on name conflict because MyClass is defined in the same file as the use statement.

<?php
namespace my\stuff;
use 
another\thing as MyClass;
class 
MyClass {} // fatal error: MyClass conflicts with import statement
$a = new MyClass;
?>

Nested namespaces are not allowed.

PHP does not allow nesting namespaces

<?php
namespace my\stuff {
    namespace 
nested {
        class 
foo {}
    }
}
?>

However, it is easy to simulate nested namespaces like so:

<?php
namespace my\stuff\nested {
    class 
foo {}
}
?>

Neither functions nor constants can be imported via the use statement.

The only elements that are affected by use statements are namespaces and class names. In order to shorten a long constant or function, import its containing namespace

<?php
namespace mine;
use 
ultra\long\ns\name;

$a name\CONSTANT;
name\func();
?>

Dynamic namespace names (quoted identifiers) should escape backslash

It is very important to realize that because the backslash is used as an escape character within strings, it should always be doubled when used inside a string. Otherwise there is a risk of unintended consequences:

Beispiel #9 Dangers of using namespaced names inside a double-quoted string

<?php
$a 
= new "dangerous\name"// \n is a newline inside double quoted strings!
$obj = new $a;

$a = new 'not\at\all\dangerous'// no problems here.
$obj = new $a;
?>

Inside a single-quoted string, the backslash escape sequence is much safer to use, but it is still recommended practice to escape backslashes in all strings as a best practice.

Undefined Constants referenced using any backslash die with fatal error

Any undefined constant that is unqualified like FOO will produce a notice explaining that PHP assumed FOO was the value of the constant. Any constant, qualified or fully qualified, that contains a backslash will produce a fatal error if not found.

Beispiel #10 Undefined constants

<?php
namespace bar;
$a FOO// produces notice - undefined constants "FOO" assumed "FOO";
$a = \FOO// fatal error, undefined namespace constant FOO
$a Bar\FOO// fatal error, undefined namespace constant bar\Bar\FOO
$a = \Bar\FOO// fatal error, undefined namespace constant Bar\FOO
?>

Cannot override special constants NULL, TRUE, FALSE, ZEND_THREAD_SAFE or ZEND_DEBUG_BUILD

Any attempt to define a namespaced constant that is a special, built-in constant results in a fatal error

Beispiel #11 Undefined constants

<?php
namespace bar;
const 
NULL 0// fatal error;
const true 'stupid'// also fatal error;
// etc.
?>




Ausnahmebehandlung

Inhaltsverzeichnis

PHP 5 hat ein Exceptionmodell ähnlich dem anderer Programmiersprachen. Eine Exception kann in PHP geworfen (throw) und abgefangen (catch) werden. Um das Fangen potentieller Exceptions zu ermöglichen, sollte der jeweilige Code von einem try-Block umschlossen werden. Jeder try-Block muss mindestens einen zugehörigen catch Block besitzen. Mehrere catch-Blöcke können verwendet werden, um verschiedene Klassen von Exceptions abzufangen. Die normale Programmausführung (wenn keine Exception innerhalb des try-Blockes geworfen wird oder kein zur Klasse der geworfenen Exception passendes catch vorhanden ist) wird nach dem letzten in Folge definierten catch-Block fortgesetzt. Exceptions können innerhalb eines catch-Blockes geworfen (oder weitergeworfen) werden.

Wenn eine Exception geworfen wird, wird der Programmcode hinter der auslösenden Anweisung nicht ausgeführt, und PHP versucht, den ersten passenden catch-Block zu finden. Falls eine Exception nicht abgefangen wird, wird ein fataler Fehler mit einer "Uncaught Exception ..."-Nachricht ausgegeben, wenn nicht eine Behandlung mittels set_exception_handler() definiert wurde.

Hinweis: Interne PHP-Funktionen verwenden in den meisten Fällen Error-Reporting, nur moderne objektorientierte Extensions nutzen Exceptions. Fehler können allerdings einfach mittels ErrorException in eine Exception umgewandelt werden.

Tipp

Die Standard PHP Library bietet eine große Anzahl eingebauter und direkt verwendbarer Exceptions.

Beispiel #1 Eine Exception werfen

<?php
function inverse($x) {
    if (!
$x) {
       throw new 
Exception('Division durch Null.');
    }
    else return 
1/$x;
}

try {
    echo 
inverse(5) . "\n";
    echo 
inverse(0) . "\n";
} catch (
Exception $e) {
    echo 
'Exception abgefangen: ',  $e->getMessage(), "\n";
}

// Ausführung fortsetzen
echo 'Hallo Welt';
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

0.2
Exception abgefangen: Division durch Null
Hallo Welt

Beispiel #2 Verschachtelte Exceptions

<?php

class MyException extends Exception { }

class 
Test {
    public function 
testing() {
        try {
            try {
                throw new 
MyException('foo!');
            } catch (
MyException $e) {
                
/* weiterwerfen der Exception */
                
throw $e;
            }
        } catch (
Exception $e) {
            
var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(4) "foo!"

Exceptions erweitern

Eine benutzerdefinierte Exceptionklasse kann durch Ableitung von der eingebauten Exceptionklasse erstellt werden. Die unten angegebenen Methoden und Eigenschaften zeigen, was innerhalb der Kindklasse von der eingebauten Exceptionklasse verfügbar ist.

Beispiel #1 Die eingebaute Exceptionklasse

<?php
class Exception
{
    protected 
$message 'Unknown exception';   // Exceptionmitteilung
    
protected $code 0;                        // Benutzerdefinierte Fehlernummer
    
protected $file;                            // Quelldateiname der Exception
    
protected $line;                            // Quelldateizeile der Exception

    
function __construct($message null$code 0);

    final function 
getMessage();                // Mitteilung der Exception
    
final function getCode();                   // Fehlercode der Exception
    
final function getFile();                   // Quelldateiname
    
final function getLine();                   // Quelldateizeile
    
final function getTrace();                  // Array zum Rückverfolgen
    
final function getTraceAsString();          // Formatierter String der
                                                // Rückverfolgung

    /* Überschreibbar */
    
function __toString();                       // Formatierter String für
                                                 // Ausgabe
}
?>

Wenn eine Klasse die eingebaute Exceptionklasse erweitert und den Konstruktor neu definiert, ist es dringend empfohlen, dass der Konstruktor der Klasse parent::__construct() aufruft, um sicherzustellen, dass alle verfügbaren Daten korrekt zugewiesen wurden. Die __toString()-Methode kann überschrieben werden, um eine maßgeschneiderte Ausgabe anzubieten, wenn das Objekt durch eine Zeichenkette repräsentiert werden soll.

Beispiel #2 Die Exceptionklasse erweitern

<?php
/**
 * Eine maßgeschneiderte Exceptionklasse definieren
 */
class MyException extends Exception
{
    
// Die Exceptionmitteilung neu definieren, damit diese nicht optional ist
    
public function __construct($message$code 0) {
        
// etwas Code

        // sicherstellen, dass alles korrekt zugewiesen wird
        
parent::__construct($message$code);
    }

    
// maßgeschneiderte Stringdarstellung des Objektes
    
public function __toString() {
        return 
__CLASS__ ": [{$this->code}]: {$this->message}\n";
    }

    public function 
customFunction() {
        echo 
"Eine eigene Funktion dieses Exceptiontyps\n";
    }
}


/**
 * Erzeuge eine Klasse, um die Exception zu testen
 */
class TestException
{
    public 
$var;

    const 
THROW_NONE    0;
    const 
THROW_CUSTOM  1;
    const 
THROW_DEFAULT 2;

    function 
__construct($avalue self::THROW_NONE) {

        switch (
$avalue) {
            case 
self::THROW_CUSTOM:
                
// eigene Exception werfen
                
throw new MyException('1 ist ein ungültiger Parameter'5);
                break;

            case 
self::THROW_DEFAULT:
                
// Vorgabe werfen
                
throw new Exception('2 ist kein zugelassener Parameter'6);
                break;

            default:
                
// Keine Exception, das Objekt wird erzeugt
                
$this->var $avalue;
                break;
        }
    }
}


// Beispiel 1
try {
    
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
MyException $e) {      // Wird gefangen
    
echo "Meine Exception gefangen\n"$e;
    
$e->customFunction();
} catch (
Exception $e) {        // Übersprungen
    
echo "Standardexception gefangen\n"$e;
}

// Ausführung fortsetzen
var_dump($o);
echo 
"\n\n";


// Beispiel 2
try {
    
$o = new TestException(TestException::THROW_DEFAULT);
} catch (
MyException $e) {      // Dieser Typ passt nicht
    
echo "Meine Exception gefangen\n"$e;
    
$e->customFunction();
} catch (
Exception $e) {        // Wird gefangen
    
echo "Standardexception gefangen\n"$e;
}

// Ausführung fortsetzen
var_dump($o);
echo 
"\n\n";


// Beispiel 3
try {
    
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
Exception $e) {        // Wird gefangen
    
echo "Standardexception gefangen\n"$e;
}

// Ausführung fortsetzen
var_dump($o);
echo 
"\n\n";


// Beispiel 4
try {
    
$o = new TestException();
} catch (
Exception $e) {        // Übersprungen, keine Exception ausgelöst
    
echo "Standardexception gefangen\n"$e;
}

// Ausführung fortsetzen
var_dump($o);
echo 
"\n\n";
?>



Referenzen in PHP

Inhaltsverzeichnis


Was Referenzen sind

Referenzen sind in PHP ein Mechanismus um verschiedene Namen für den gleichen Inhalt von Variablen zu ermöglichen. Sie sind nicht mit Zeigern in C zu vergleichen, sondern Aliasdefinitionen für die Symboltabelle. PHP unterscheidet zwischen Variablenname und Variableninhalt, wobei der gleiche Variableninhalt unterschiedliche Namen besitzen kann. Der bestmögliche Vergleich ist der mit Dateinamen und Dateien im Dateisystem von Unix - Variablennamen sind Verzeichniseinträge, während der Variableninhalt die eigentliche Datei darstellt. Referenzen können nun als Hardlinks im Dateisystem verstanden werden.



Was Referenzen leisten

PHP Referenzen erlauben es, zwei Variablennamen, sich auf den gleichen Variableninhalt beziehen zu lassen. Das heißt im folgenden Beispiel, dass sich $a und $b auf dieselbe Variable beziehen:

<?php
$a 
=& $b
?>

Hinweis: $a und $b sind hier gleichwertig, und $a ist nicht nur ein Zeiger auf $b oder umgekehrt, sondern $a und $b zeigen auf den selben Inhalt.

Hinweis: Wenn ein Array mit Referenzen kopiert wird, werden seine Werte nicht dereferenziert. Dies gilt auch für Array, die per Wert an Funktionen übergeben werden

Hinweis: Wenn man eine undefinierte Variable per Referenz zuweist, übergibt oder zurückgibt, wird sie erstellt.

Beispiel #1 Referenzen mit undefinierten Variablen benutzen

<?php
function foo(&$var) { }

foo($a); // $a wird "erstellt" mit dem Wert null

$b = array();
foo($b['b']);
var_dump(array_key_exists('b'$b)); // bool(true)

$c = new StdClass;
foo($c->d);
var_dump(property_exists($c'd')); // bool(true)
?>


Diese Syntax kann auch mit Funktionen, die Referenzen zurückgeben, benutzt werden und seit PHP 4.0.4 auch in Verbindung mit dem new-Operator.

<?php
$bar 
=& new fooclass();
$foo =& find_var ($bar);
?>

Seit PHP 5 referenziert return new automatisch, also erzeugt die Verwendung der veralteten Syntax =& eine E_STRICT-Warnung.

Hinweis: Wenn der &-Operator nicht verwendet wird, erzeugt PHP eine Kopie des Objekts. Wenn nun $this innerhalb der Klasse verwendet wird, bezieht es sich auf die aktuelle Instanz der Klasse. Die Zuordnung ohne & erzeugt eine Kopie der Instanz (d.h. des Objekts) und $this wird sich auf die Kopie beziehen. In der Regel will man aus Performance- und Speicherverbrausgründen nur eine einzige Instanz einer Klasse erzeugen.
Während man den @-Operator benutzen kann, um Fehler im Konstruktor zu unterdrücken, wenn man ihn als @new benutzt, funktioniert dies nicht bei der Benutzung von &new. Dies ist eine Einschränkung der Zend Engine und resultiert daher in einem Parserfehler.

Warnung

Wenn man einer als global deklarierten Variable eine Referenz innerhalb einer Funktion zuweist, wird die Referenz nur innerhalb der Funktion sichtbar sein. Dies kann durch die Verwendung des $GLOBALS-Arrays vermieden werden.

Beispiel #2 Globale Variablen innerhalb einer Funktion referenzieren

<?php
$var1 
"Beispielvariable";
$var2 "";

function 
global_references($use_globals)
{
    global 
$var1$var2;
    if (!
$use_globals) {
        
$var2 =& $var1// nur innerhalb der Funktion sichtbar
    
} else {
        
$GLOBALS["var2"] =& $var1// auch im globalen Kontext sichtbar
    
}
}

global_references(false);
echo 
"var2 wurde auf '$var2' gesetzt\n"// var2 ist ''
global_references(true);
echo 
"var2 wurde auf '$var2' gesetzt\n"// var2 ist 'Beispielvariable'
?>

Man sollte global $var; als Abkürzung für $var =& $GLOBALS['var']; sehen. Deswegen ändert die Zuweisung per Referenz an $var nur die Referenz der lokalen Variable.

Hinweis: Wenn man einer Variable einen Wert per Referenz in einer foreach-Anweisung zuweist, werden die Referenzen auch geändert.

Beispiel #3 Referenzen und die foreach-Anweisung

<?php
$ref 
0;
$row =& $ref;
foreach (array(
123) as $row) {
    
// do something
}
echo 
$ref// 3 - letztes Element des durchlaufenen Arrays
?>


Eine weitere Einsatzmöglichkeit von Referenzen ist die Übergabe von Parametern an eine Funktion mit pass-by-reference. Hierbei beziehen sich der lokale Variablenname als auch der Variablenname der aufrufenden Instanz auf denselben Variableninhalt:

<?php
function foo(&$var) {
    
$var++;
}

$a=5;
foo($a);
?>

Nach der Ausführung hat $a den Wert 6, da sich in der Funktion foo der Variablenname $var auf denselben Variableninhalt bezieht wie $a in der aufrufenden Instanz (hier das Hauptprogramm). Es gibt auch eine detailliertere Erläuterung der Parameterübergabe by-reference

Daneben besteht die Möglichkeit aus Funktionen heraus Werte mit return by-reference zurückzugeben.



Was Referenzen nicht sind

Wie bereits gesagt: Referenzen sind keine Zeiger. Das bedeutet, der folgende Code tut nicht, was zum Beispiel ein C Programmierer erwarten würde:

<?php
function foo(&$var) {
    
$var =& $GLOBALS["baz"];
}
foo($bar);
?>

Folgendes wird passieren: $var in foo wird zunächst an $bar aus der aufrufenden Instanz, dann aber an $GLOBALS["baz"] gebunden. Es gibt keine andere Möglichkeit als die Verwendung des Referenzmechanismus, um $bar im Sichtbarkeitsbereich an etwas anderes zu binden, da bar in der Funktion foo nicht verfügbar ist (diese ist durch $var repräsentiert, aber $var verfügt nur Variableninhalt und keinen Name-to-Binding-Eintrag in der Symboltabelle der aufrufenden Instanz). Man kann durch die Rückgabe von Referenzen die von der Funktion benutzten Variablen referenzieren.



Parameterübergabe per Referenz

Man kann Variablen an Funktionen per Referenz übergeben, so dass die Funktion ihre Argumente modifizieren kann. Dazu benutzt man folgende Syntax:

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
// $a ist 6
?>

Zu beachten ist, dass kein Referenz-Zeichen beim Funktionsaufruf steht, nur in der Funktionsdefinition. Diese allein ist ausreichend, um das Argument per Referenz zu übergeben. In neueren PHP-Versionen gibt es eine Warnung, dass die Benutzung von "Call-time pass-by-reference" mit Hilfe von & in foo(&$a); veraltet ist.

Folgende Dinge können per Referenz übergeben werden:

  • Variablen, zum Beispiel foo($a)
  • "New"-Ausdrücke, zum Beispiel foo(new foobar())
  • Referenzen, zurückgegeben von einer Funktion, zum Beispiel:

    <?php
    function &bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>

    Es gibt detailliertere Erläuterungen zur Rückgabe by-reference.

Alle anderen Ausdrücke sollte nicht per Referenz übergeben werden, da das Ergebnis undefiniert ist. Folgende Beispiele sind etwa ungültig:

<?php
function bar() // Beachte das fehlende &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Fatal error seit PHP 5.0.5

foo($a 5); // Ausdruck, keine Variable
foo(5); // Fatal error
?>

Diese Anforderungen gelten für PHP 4.0.4 und später.



Referenzen zurückgeben

Das Zurückgeben von Ergebnissen per Referenz aus Funktionen heraus kann manchmal recht nüzlich sein, um herauszufinden, an welche Variable eine Referenz gebunden werden soll. Man sollte diese Funktionalität nicht aus Performancegründen benutzen, der Kern ist ist intelligent genug, um dies selbst zu optimieren. Man sollte Referenzen nur dann zurückgeben, wenn man sinnvolle technische Gründe hat. Hierbei ist folgende Syntax zu beachten:

<?php
class foo {
    public 
$value 42;

    public function &
getValue() {
        return 
$this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue(); // $myValue ist eine  Referenz zu to $obj->value, mit dem Wert 42.
$obj->value 2;
echo 
$myValue;                // Zeigt den neuen Wert von $obj->value, also 2.
?>

In diesem Beispiel wird also die Eigenschaft des von getValue gelieferten Objektes gesetzt, nicht die der Kopie, wie es der Fall wäre, wenn die Funktion getValue ihr Ergebnis nicht per Referenz liefern würde.

Hinweis: Im Gegensatz zur Parameterübergabe per Referenz ist bei der Rückgabe mittels Referenz an beiden Stellen die Angabe des & notwendig. Dies verdeutlicht, dass Sie eine Referenz und nicht wie gewöhnlich eine Kopie zurückgeben. Ebenfalls wird verdeutlicht, dass für $myValue im Gegensatz zur normalen Zuweisung ein Referencebinding durchgeführt wird.

Hinweis: Wenn man versucht, eine Referenz aus einer Funktion mit der Syntax return ($this->value); zurückzugeben, wird das nicht funktionieren, weil man versucht, das Ergebnis eines Ausdrucks zurückzugeben und nicht eine Variable per Referenz. Man kann nur Variablen per Referenz aus einer Funktion zurückgeben - sonst nichts. Seit PHP 4.4.0 und PHP 5.1.0 wird ein E_NOTICE-Fehler erzeugt, wenn versucht wird, einen dynamischen Ausdruck oder das Ergebnis eines new zurückzugeben.



Referenzen aufheben

Wird eine Referenz aufgehoben, so wird nur die Bindung zwischen einem Variablennamen und dem Variableninhalt entfernt. Der Inhalt der Variablen wird hierbei nicht gelöscht. Betrachten wir folgendes Beispiel:

<?php
$a 
1;
$b =& $a;
unset(
$a);
?>

Die Variable $b wird nicht gelöscht, sondern es wird nur die Bindung des Variablennamen $a an den Variableninhalt aufgehoben. Dieser Variableninhalt ist immer noch über $b verfügbar.

Wiederum sieht man die Analogie zwischen Unix und den Referenzen: Das Aufheben einer Referenz entspricht einem Aufruf von unlink unter Unix.



Referenzen entdecken

Viele Sprachelemente von PHP sind intern mit der Benutzung von Referenzen implementiert, daher gilt alles bisher gesagte auch für diese Konstrukte:

global References

Die Verwendung von global $var erzeugt im aktuellen Gültigkeitsbereich eine Referenz auf die globale Variable $var, sie ist also äquivalent zu folgendem:

<?php
$var 
=& $GLOBALS["var"];
?>

Dies hat zur Folge, dass das Anwenden von unset() auf $var keinen Einfluss auf die globale Variable hat.

$this

In einer Objektmethode ist $this immer eine Referenz auf die aufrufende Objektinstanz.




Vordefinierte Variablen

PHP unterstützt eine größere Anzahl vordefinierter Variablen in allen Skripten. Die Variablen repräsentieren die gesamte Spannweite von externen Variablen über built-in-Umgebungsvariablen, letzte Fehlermeldungen bis zu empfangenen Headern.

Lesen Sie ebenfalls die den FAQ-Abschnitt "Wie wirkt sich register_globals auf meine Skripte aus?"


Superglobals

SuperglobalsSuperglobals sind Built-in-Variablen, die immer in allen Gültigkeitsbereichen verfügbar sind

Beschreibung

Etliche vordefinierte Variablen in PHP sind sogenannte "Superglobals", das bedeutet, sie sind in allen Gültigkeitsbereichen (s.g. Scopes) eines Skripts verfügbar. Daher gibt es keinen Grund, global $variable; zu verwenden, um auf sie innerhalb einer Funktion oder Methode zuzugreifen.

Diese Superglobals sind:

Changelog

Version Beschreibung
4.1.0 Superglobals wurden in PHP eingeführt.

Anmerkungen

Hinweis: Verfügbarkeit der Variablen
Standardmäßig sind alle Superglobals verfügbar, allerdings haben einige Einstellung in PHP Einfluss auf ihre Verfügbarkeit. Für weitere Informationen lesen Sie bitte die Dokumentation zu variables_order.

Hinweis: Abwicklung mit register_globals
Sollte die nicht mehr empfohlene Direktive register_globals auf on gesetzt sein, werden die davon betroffenen Variablen ebenfalls im globalen Gültigkeitsbereich des Skripts sichtbar. So existiert zum Beispiel $_POST['foo'] gleichzeitig als $foo.
Wenn Sie mehr über das Thema wissen wollen, werfen Sie am besten einen Blick in die FAQ "Wie wirkt sich register_globals auf meine Skripte aus?"

Hinweis: Variable Variablen
Superglobals können nicht als variable Variablen innerhalb von Funktionen oder Klassenmethoden verwendet werden.



$GLOBALS

$GLOBALSReferenziert alle Variablen, die im globalen Gültigkeitsbereich vorhanden sind

Beschreibung

Ein assoziatives Array, das Referenzen auf alle Variablen enthält, die derzeit im globalen Gültigkeitsbereich (Scope) des Skripts bekannt sind. Die Namen der jeweiligen Variablen sind die Schlüsselwerte, um auf den Inhalt der jeweils referenzierten Variablen zuzugreifen.

Beispiele

Beispiel #1 $GLOBALS-Beispiel

<?php
function test() {
    
$foo "local variable";

    echo 
'$foo in global scope: ' $GLOBALS["foo"] . "\n";
    echo 
'$foo in current scope: ' $foo "\n";
}

$foo "Example content";
test();
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

$foo in global scope: Example content
$foo in current scope: local variable

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.

Hinweis: Verfügbarkeit der Variablen
Im Gegensatz zu allen anderen Superglobals ist $GLOBALS notwendigerweise immer in PHP verfügbar.



$_SERVER

$HTTP_SERVER_VARS [veraltet, nicht empfohlen]

$_SERVER -- $HTTP_SERVER_VARS [veraltet, nicht empfohlen]Informationen über Server und Ausführungsumgebung

Beschreibung

$_SERVER ist ein Array, das Informationen wie Header, Pfade und die verschiedenen Wege, das Skript anzusprechen. Die Einträge in diesem Array werden vom Webserver erstellt. Es gibt keine Garantie dafür, dass jeder Webserver alle möglichen Einträge unterstützt - Server können einige weglassen oder andere Einträge unterstützen, die hier nicht aufgeführt sind. Das meint, die meisten der Variablen werden in der» CGI 1.1-Spezifikation ausgewiesen, daher sollten Sie diese als von Ihrem Webserver unterstützt erwarten können.

$HTTP_SERVER_VARS enthält anfangs die selben Informationen, ist aber kein Superglobal. (Beachten Sie, dass $HTTP_SERVER_VARS und $_SERVER unterschiedliche Variablen sind und von PHP daher entsprechend behandelt werden.)

Indizes

Es kann sein, dass Sie die folgenden Elemente in $_SERVER vorfinden. Beachten Sie, dass einige davon, sofern vorhanden, nur verfügbar sind oder einen sinnvollen Wert haben, wenn PHP auf der Kommandozeile läuft.

'PHP_SELF'
Der Dateiname des aktuell ausgeführten Skripts, relativ zum Document Root. Beispielsweise enthält $_SERVER['PHP_SELF'] in einem Skript, das über die Adresse http://example.com/test.php/foo.bar aufgerufen wird, den Wert /test.php/foo.bar/. Die Konstante __FILE__ enthält den vollständigen Pfad und Dateinamen der aktuellen (z.B. via include eingebundenen) Datei. Läuft PHP als Kommandozeilenprogramm, enthält diese Variable seit PHP 4.3.0 den Namen des Skripts. Davor war die Variable nicht verfügbar.
'argv'
Array der an das Skript übergebenen Argumente. Wenn das Skript auf der Kommandozeile ausgeführt wird, erhalten Sie auf diesem Weg einen an die Sprache C angelehnten Zugriff auf die Kommandozeilenparameter. Wird das Skript via GET aufgerufen, enthält die Variable den Querystring.
'argc'
Enthält die Anzahl der per Kommandozeile an das Skript übergebenen Parameter (sofern das Skript auf der Kommandozeile ausgeführt wird).
'GATEWAY_INTERFACE'
Enthält die Version der vom Server verwendete CGI-Spezifikation, z. B. 'CGI/1.1'.
'SERVER_ADDR'
Die IP-Adresse des Servers, auf dem das aktuelle Skript ausgeführt wird.
'SERVER_NAME'
Der Hostname des Servers, auf dem das aktuelle Skript ausgeführt wird. Wenn das Skript auf einem Virtuellen Host läuft, wird dieser Wert vom Virtuellen Host bestimmt.
'SERVER_SOFTWARE'
Identifikation der verwendeten Server-Software, die bei einer Antwort auf den eingegangenen Request verwendet wird.
'SERVER_PROTOCOL'
Name und Versionsnummer des verwendeten Übertragungsprotokolls, mittels dessen die aktuelle Seite aufgerufen wurde, z. B. 'HTTP/1.0'.
'REQUEST_METHOD'
Enthält die für den Zugriff auf die Seite verwendete Requestmethode, z. B. 'GET', 'HEAD', 'POST' oder 'PUT'.

Hinweis: Ist die Requestmethode HEAD, wird ein PHP-Skript beendet, nachdem die Header gesendet wurden (sofern Ausgaben ohne die Verwendung des Ausgabepuffers (output buffering) erzeugt werden).

'REQUEST_TIME'
Der Timestamp des Zeitpunkts, an dem der Request eintraf. Verfügbar seit PHP 5.1.0.
'QUERY_STRING'
Sofern vorhanden, der Querystring, mittels dessen auf die Seite zugegriffen wurde.
'DOCUMENT_ROOT'
Das Document Root-Verzeichnis, unter dem das aktuelle Skript ausgeführt wird, so wie es in der Konfiguration des Servers festgelegt wurde.
'HTTP_ACCEPT'
Enthält den Inhalt des Accept:-Headers des aktuellen Requests, sofern ein solcher gesendet wurde.
'HTTP_ACCEPT_CHARSET'
Enthält den Inhalt des Accept-Charset:-Headers des aktuellen Requests, sofern ein solcher gesendet wurde. Beispiel: 'iso-8859-1,*,utf-8'.
'HTTP_ACCEPT_ENCODING'
Enthält den Inhalt des Accept-Encoding:-Headers des aktuellen Requests, sofern ein solcher gesendet wurde. Beispiel: 'gzip'.
'HTTP_ACCEPT_LANGUAGE'
Enthält den Inhalt des Accept-Language:-Headers des aktuellen Requests, sofern ein solcher gesendet wurde. Beispiel: 'en'.
'HTTP_CONNECTION'
Enthält den Inhalt des Connection:-Headers des aktuellen Requests, sofern ein solcher gesendet wurde. Beispiel: 'Keep-Alive'.
'HTTP_HOST'
Enthält den Inhalt des Host:-Headers des aktuellen Requests, sofern ein solcher gesendet wurde.
'HTTP_REFERER'
Sofern vorhanden, die Adresse der Seite, auf der der Benutzer einen Link auf die aktuell aufgerufene Seite angeklickt hat. Dieser Wert wird vom Browser des Benutzers gesetzt. Nicht alle Programme unterstützen diesen Wert, manche offerieren als Feature sogar die Möglichkeit, den Wert von HTTP_REFERER selbst zu bestimmen. Kurz, Sie können diesem Wert nicht wirklich vertrauen.
'HTTP_USER_AGENT'
Enthält den Inhalt des User-Agent:-Headers des aktuellen Requests, sofern ein solcher gesendet wurde. Dies ist eine Zeichenkette, die das für den Zugriff auf die Seite verwendete Programm anzeigt. Ein typisches Beispiel ist Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Sie können diesen Wert unter anderem mittels der Funktion get_browser() dafür nutzen, den Inhalt Ihrer Seite auf die Möglichkeiten des jeweiligen Browsers zuzuschneiden.
'HTTPS'
Wird auf einen nicht-leeren Wert gesetzt, wenn das Skript via HTTPS aufgerufen wurde.

Hinweis: Beachten Sie bei der Verwendung von ISAPI unter IIS, dass der Wert auf off gesetzt wird, wenn der Request nicht mittels HTTPS erfolgte.

'REMOTE_ADDR'
Die IP-Adresse, von der aus der Benutzer die aktuelle Seite ansieht.
'REMOTE_HOST'
Der Name des Hosts, von dem aus der Benutzer die aktulle Seite ansieht. Der Auflösung der IP-Adresse (Reverse DNS Lookup) basiert auf der REMOTE_ADDR des Benutzers.

Hinweis: Ihr Webserver muss darauf konfiguriert sein, diese Variable zu erzeugen. Im Apache benötigen Sie dazu zum Beispiel die Direktive HostnameLookups On innerhalb der httpd.conf. Lesen Sie dazu auch die Beschreibung der Funktion gethostbyaddr().

'REMOTE_PORT'
Der vom Rechner des Benutzers verwendete Port, um mit dem Webserver zu kommunizieren.
'SCRIPT_FILENAME'

Der absolute Pfad des aktuell ausgeführten Skripts.

Hinweis: Wenn ein Skript als CLI mit einem relativen Pfad wie file.php oder ../file.php ausgeführt wird, enthält $_SERVER['SCRIPT_FILENAME'] den vom Benutzer angegebenen relativen Pfad.

'SERVER_ADMIN'
Der Wert, der für die SERVER_ADMIN-Direktive (für Apache) im Konfigurationsfile des Webservers eingestellt wurde. Wenn das Skript auf einem Virtuellen Host läuft, wird der für diesen Virtuellen Host definierte Wert verwendet.
'SERVER_PORT'
Der Port, der auf dem Server vom Webserver für die Kommunikation genutzt wird. In einer Standardumgebung ist dies '80'; wenn Sie beispielsweise SSL verwenden, wird dieser Wert auf den Port geändert, über den Sie Ihre verschlüsselte HTTP-Kommunikation abwickeln.
'SERVER_SIGNATURE'
Ein String, der die Version der verwendeten Serversoftware und den Namen des Virtuellen Hosts enthält, der, sofern die Option auf dem Server aktiviert ist, an die servergenerierte Seiten angefügt wird.
'PATH_TRANSLATED'
Auf dem Dateisystem (nicht dem Document Root!) basierender Pfad zum aktuellen Skript, nachdem der Server ein Virtual-to-Real-Mapping durchgeführt hat.

Hinweis: Seit PHP 4.3.2 wird PATH_TRANSLATED nicht länger implizit unter der Apache 2 SAPI gesetzt, im Gegensatz zur Situation unter Apache 1, bei dem diese Variable automatisch auf den Wert von SCRIPT_FILENAME gesetzt wird, sofern Apache nicht selbst einen Wert einfügt. Diese Änderung entspricht dem in der CGI-Spezifikation beschriebenen Verhalten, nach dem PATH_TRANSLATED nur dann gesetzt sein sollte, wenn PAT_INFO definiert ist. Apache 2-Benutzer können die Direktive AcceptPathInfo = On in der httpd.conf verwenden, um einen Wert für PATH_INFO zu definieren.

'SCRIPT_NAME'
Enthält den Pfad zum aktuellen Skript. Dies ist nützlich für Seiten, die auf sich selbst verweisen sollen. Die Konstante __FILE__ enthält den vollständigen Pfad und Dateinamen der aktuellen (z.B. via include eingebundenen) Datei.
'REQUEST_URI'
Der URI, der angegeben wurde, um auf die aktuelle Seite zuzugreifen, beispielsweise '/index.html'.
'PHP_AUTH_DIGEST'
Wenn PHP als Modul unter Apache läuft und Digest HTTP Authentication verwendet wird, wird diese Variable mit dem Inhalt des vom Client gesendeten 'Authorization'-Headers gefüllt, den Sie für eine adäquate Validierung nutzen sollten.
'PHP_AUTH_USER'
Wenn PHP als Modul unter Apache oder IIS (ISAPI bei PHP 5) läuft und HTTP authentication verwendet wird, wird diese Variable mit dem vom Benutzer angegebenen Usernamen gefüllt.
'PHP_AUTH_PW'
Wenn PHP als Modul unter Apache oder IIS (ISAPI bei PHP 5) läuft und HTTP authentication verwendet wird, wird diese Variable mit dem vom Benutzer angegebenen Passwort gefüllt.
'AUTH_TYPE'
Wenn PHP als Modul unter Apache läuft, wird diese Variable mit dem verwendeten HTTP-Authentifizierungsmechanismus gefüllt.
'PATH_INFO'
Enthält, sofern vorhanden, den Teil des Pfadnamens hinter dem Namen des PHP-Skripts, aber vor dem Query-String. Wenn zum Beispiel das aktuelle Skript mittels dem URL http://www.example.com/php/path_info.php/some/stuff?foo=bar aufgerufen wird, würde $_SERVER['PATH_INFO'] /some/stuff enthalten.

Changelog

Version Beschreibung
4.1.0 Einführung von $_SERVER als Ablösung der bis dahin existierenden $HTTP_SERVER_VARS.

Beispiele

Beispiel #1 $_SERVER-Beispiel

<?php
echo $_SERVER['SERVER_NAME'];
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

www.example.com

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.



$_GET

$HTTP_GET_VARS [veraltet, nicht empfohlen]

$_GET -- $HTTP_GET_VARS [veraltet, nicht empfohlen]HTTP GET-Variablen

Beschreibung

Ein assoziatives Array von Variablen, die dem aktuellen Skript mittels der URL-Parameter übergeben werden.

$HTTP_GET_VARS enthält anfangs die selben Informationen, ist aber kein Superglobal. (Beachten Sie, dass $HTTP_GET_VARS und $_GET unterschiedliche Variablen sind und von PHP daher entsprechend behandelt werden.)

Changelog

Version Beschreibung
4.1.0 Einführung von $_GET als Ablösung des bis dahin existierenden $HTTP_GET_VARS.

Beispiele

Beispiel #1 $_GET-Beispiel

<?php
echo 'Hello ' htmlspecialchars($_GET["name"]) . '!';
?>

Angenommen, der Benutzer gab ein http://example.com/?name=Hannes

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Hello Hannes!

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.



$_POST

$HTTP_POST_VARS [veraltet, nicht empfohlen]

$_POST -- $HTTP_POST_VARS [veraltet, nicht empfohlen]HTTP POST-Variablen

Beschreibung

Ein assoziatives Array von Variablen, die dem aktuellen Skript mittels der HTTP POST-Methode übergeben werden.

$HTTP_POST_VARS enthält anfangs die selben Informationen, ist aber kein Superglobal. (Beachten Sie, dass $HTTP_POST_VARS und $_POST unterschiedliche Variablen sind und von PHP daher entsprechend behandelt werden.)

Changelog

Version Beschreibung
4.1.0 Einführung von $_POST als Ablösung des bis dahin existierenden $HTTP_POST_VARS.

Beispiele

Beispiel #1 $_POST-Beispiel

<?php
echo 'Hello ' htmlspecialchars($_POST["name"]) . '!';
?>

Angenommen, der User POSTete name=Hannes

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Hello Hannes!

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.



$_FILES

$HTTP_POST_FILES [veraltet, nicht empfohlen]

$_FILES -- $HTTP_POST_FILES [veraltet, nicht empfohlen]HTTP Dateiupload-Variablen

Beschreibung

Ein assoziatives Array von Elementen, die vom aktuellen Skript via HTTP POST-Methode hochgeladen werden.

$HTTP_FILES_VARS enthält anfangs die selben Informationen, ist aber kein Superglobal. (Beachten Sie, dass $HTTP_FILES_VARS und $_FILES unterschiedliche Variablen sind und von PHP daher entsprechend behandelt werden.)

Changelog

Version Beschreibung
4.1.0 Einführung von $_FILES als Ablösung des bis dahin existierenden $HTTP_FILES_VARS.

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.

Siehe auch



$_REQUEST

$_REQUESTHTTP Request-Variablen

Beschreibung

Ein assoziatives Array, das standardmäßig den Inhalt von $_GET, $_POST und $_COOKIE enthält.

Changelog

Version Beschreibung
5.3.0 request_order eingeführt. Die Direktive wirkt sich auf den Inhalt von $_REQUEST aus.
4.3.0 $_FILES-Informationen aus $_REQUEST entfernt.
4.1.0 $_REQUEST eingeführt.

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.

Hinweis: Wenn das Skript auf der Kommandozeile ausgeführt wird, enthält die Variable nicht den Inhalt von argv und argc; diese finden sich im Array $_SERVER.

Hinweis: Die Variablen in $_REQUEST werden dem Skript mittels der GET-, POST- und COOKIE-Inputmechanismen zur Verfügung gestellt. Daher kann der Inhalt durch einen entfernten Benutzer modifiziert worden sein und ist daher als nicht vertrauenswürdig zu betrachten. Das Vorhandensein und die Reihenfolge des Variableninhalts in diesem Array wird entsprechend der PHP-Konfigurationsdirektive variables_order bestimmt.

Siehe auch



$_SESSION

$HTTP_SESSION_VARS [veraltet, nicht empfohlen]

$_SESSION -- $HTTP_SESSION_VARS [veraltet, nicht empfohlen]Sessionvariablen

Beschreibung

Ein assoziatives Array, das die Sessionvariablen enthält und dem aktuellen Skript zur Verfügung stellt. Lesen Sie den Abschnitt Sessionfunktinen der Dokumentation, um weitere Informationen zur Verwendung zu erhalten.

$HTTP_SESSION_VARS enthält anfangs die selben Informationen, ist aber kein Superglobal. (Beachten Sie, dass $HTTP_SESSION_VARS und $_SESSION unterschiedliche Variablen sind und von PHP daher entsprechend behandelt werden.)

Changelog

Version Beschreibung
4.1.0 Einführung von $_SESSION als Ablösung der bis dahin existierenden $HTTP_SESSION_VARS.

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.

Siehe auch



$_ENV

$HTTP_ENV_VARS [veraltet, nicht empfohlen]

$_ENV -- $HTTP_ENV_VARS [veraltet, nicht empfohlen]Umgebungsvariablen

Beschreibung

Ein assoziatives Array von Variablen, die dem aktuellen Skript mittels der Environment-Methode übergeben werden.

Die Variablen werden aus der Laufzeitumgebung, unter der der PHP-Parser läuft, in PHPs globalen Namespace importiert. Die meisten Werte werden von der Shell, unter der PHP läuft, unterstützt, da es aber die unterschiedlichsten Systeme mit unterschiedlichsten Shells gibt, ist es unmöglich, eine definitive Liste aller verfügbaren Werte zu erstellen. Bitte konsultieren Sie die Dokumentation Ihrer Shell, um eine Liste aller definierten Umgebungsvariablen zu erhalten.

Andere Umgebungsvariablen enthalten die CGI-Variablen, die unabhängig davon eingefügt werden, ob PHP als Servermodul oder CGI-Prozess läuft.

$HTTP_ENV_VARS enthält anfangs die selben Informationen, ist aber kein Superglobal. (Beachten Sie, dass $HTTP_ENV_VARS und $_ENV unterschiedliche Variablen sind und von PHP daher entsprechend behandelt werden.)

Changelog

Version Beschreibung
4.1.0 Einführung von $_ENV als Ablösung des bis dahin existierenden $HTTP_ENV_VARS.

Beispiele

Beispiel #1 $_ENV-Beispiel

<?php
echo 'My username is ' .$_ENV["USER"] . '!';
?>

Angenommen "bjori" führt das Skript aus

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

My username is bjori!

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.

Siehe auch



$_COOKIE

$HTTP_COOKIE_VARS [veraltet, nicht empfohlen]

$_COOKIE -- $HTTP_COOKIE_VARS [veraltet, nicht empfohlen]HTTP Cookies

Beschreibung

Ein assoziatives Array von Variablen, die dem aktuellen Skript mittels HTTP-Cookies übergeben werden.

$HTTP_COOKIE_VARS enthält anfangs die selben Informationen, ist aber kein Superglobal. (Beachten Sie, dass $HTTP_COOKIE_VARS und $_COOKIE unterschiedliche Variablen sind und von PHP daher entsprechend behandelt werden.)

Changelog

Version Beschreibung
4.1.0 Einführung von $_COOKIE als Ablösung des bis dahin existierenden $HTTP_COOKIE_VARS.

Beispiele

Beispiel #1 $_COOKIE-Beispiel

<?php
echo 'Hello ' htmlspecialchars($_COOKIE["name"]) . '!';
?>

Angenommen der Cookie "name" wurde bereits früher gesetzt:

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Hello Hannes!

Anmerkungen

Hinweis: Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.



$php_errormsg

$php_errormsgDie vorangegangene Fehlermeldung

Beschreibung

$php_errormsg ist eine Variable, die den Text der letzten von PHP generierten Fehlermeldung enthält. Die Variable ist nur innerhalb des Gültigkeitsbereichs (Scopes) verfügbar, in dem der Fehler auftrat, und auch nur, wenn die Konfigurationsoption track_errors eingeschaltet wurde (standardmäßig aus).

Hinweis: Die Variable ist nur verfügbar, wenn track_errors in der php.ini eingeschaltet wurde.

Warnung

Wird ein benutzerdefinierter Errorhandler (set_error_handler()) verwendet, wird $php_errormsg nur dann gesetzt, wenn der Errorhandler FALSE zurückgibt.

Beispiele

Beispiel #1 $php_errormsg-Beispiel

<?php
@strpos();
echo 
$php_errormsg;
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Wrong parameter count for strpos()



$HTTP_RAW_POST_DATA

$HTTP_RAW_POST_DATARaw POST-Daten

Beschreibung

$HTTP_RAW_POST_DATA enthält die originalen (raw) POST-Daten. Lesen Sie auch always_populate_raw_post_data



$http_response_header

$http_response_headerHTTP Response-Header

Beschreibung

Das $http_response_header-Array ist vergleichbar mit der Funktion get_headers(). Bei der Verwendung eines HTTP-Wrappers enthält $http_response_header die HTTP Response-Header.

Beispiele

Beispiel #1 $http_response_header-Beispiel

<?php
file_get_contents
("http://example.com");
var_dump($http_response_header);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}



$argc

$argcDie Anzahl der an das Skript übergebenen Argumente

Beschreibung

Enthält die Anzahl der an das aktuelle Skript übergebenen Argumente, wenn das Skript auf der Kommandozeile läuft.

Hinweis: Der Dateiname des Skripts ist immer das erste an das Skript übergebene Argument, damit ist der kleinstmögliche Wert von $argc 1.

Hinweis: Diese Variable ist nur verfügbar, wenn register_argc_argv eingeschaltet ist.

Beispiele

Beispiel #1 $argc-Beispiel

<?php
var_dump
($argc);
?>

Wenn das Beispiel so aufgerufen wird: php script.php arg1 arg2 arg3

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

int(4)



$argv

$argvArray der an das Skript übergebenen Argumente

Beschreibung

Enthält ein Array aller an das Skript übergebenen Argumente, wenn dies auf der Kommandozeile ausgeführt wird.

Hinweis: Das erste Argument ist immer der Dateiname des aktuellen Skripts, damit ist $argv[0] immer der Skriptname.

Hinweis: Diese Variable ist nur verfügbar, wenn register_argc_argv eingeschaltet ist.

Beispiele

Beispiel #1 $argv-Beispiel

<?php
var_dump
($argv);
?>

Wenn das Beispiel so aufgerufen wird: php script.php arg1 arg2 arg3

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

array(4) {
  [0]=>
  string(10) "script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}


Inhaltsverzeichnis

  • Superglobals — Superglobals sind Built-in-Variablen, die immer in allen Gültigkeitsbereichen verfügbar sind
  • $GLOBALS — Referenziert alle Variablen, die im globalen Gültigkeitsbereich vorhanden sind
  • $_SERVER — Informationen über Server und Ausführungsumgebung
  • $_GET — HTTP GET-Variablen
  • $_POST — HTTP POST-Variablen
  • $_FILES — HTTP Dateiupload-Variablen
  • $_REQUEST — HTTP Request-Variablen
  • $_SESSION — Sessionvariablen
  • $_ENV — Umgebungsvariablen
  • $_COOKIE — HTTP Cookies
  • $php_errormsg — Die vorangegangene Fehlermeldung
  • $HTTP_RAW_POST_DATA — Raw POST-Daten
  • $http_response_header — HTTP Response-Header
  • $argc — Die Anzahl der an das Skript übergebenen Argumente
  • $argv — Array der an das Skript übergebenen Argumente


Vordefinierte Exceptions

Inhaltsverzeichnis

Siehe auch das Kapitel SPL-Exceptions.


Exception

Einführung

Exception ist die Basisklasse für alle Exceptions.

Klassenbeschreibung

Exception
Exception {
/* Eigenschaften */
protected string $message ;
private string $string ;
protected int $code ;
protected string $file ;
protected int $line ;
private array $trace ;
/* Methoden */
public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
final public string getMessage ( void )
final public Exception getPrevious ( void )
final public int getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )
final public string getTraceAsString ( void )
public string __toString ( void )
final private void __clone ( void )
}

Eigenschaften

message

Die Exceptionmeldung.

string

Der interne Name der Exception.

code

Die Fehlernummer der Exception.

file

Der Name der Datei, in der die Exception aufgetreten ist (geworfen wurde).

line

Die Zeilennummer, in der die Exception aufgetreten ist (geworfen wurde).

trace

Der Stacktrace.


Exception::__construct

(PHP 5 >= 5.1.0)

Exception::__constructErstellt die Exception

Beschreibung

public Exception::__construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )

Erstellt die Exception.

Parameter-Liste

message

Die auszugebende Beschreibung der Exception.

code

Die Fehlernummer der Exception.

previous

Die vorangegangene Exception, die für Exception-Verkettung verwendet werden soll.

Changelog

Version Beschreibung
5.3.0 Der Parameter previous wurde hinzugefügt.



Exception::getMessage

(PHP 5 >= 5.1.0)

Exception::getMessageGibt die Exceptionbeschreibung zurück

Beschreibung

final public string Exception::getMessage ( void )

Gibt die Exceptionbeschreibung zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt die Exceptionbeschreibung als String zurück.

Beispiele

Beispiel #1 Exception::getMessage()-Beispiel

<?php
try {
    throw new 
Exception("Some error message");
} catch(
Exception $e) {
    echo 
$e->getMessage();
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Some error message



Exception::getPrevious

(PHP 5 >= 5.3.0)

Exception::getPreviousReturns previous Exception

Beschreibung

final public Exception Exception::getPrevious ( void )

Returns previous Exception (the third parameter of Exception::__construct).

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Returns the previous Exception if available or NULL otherwise.

Beispiele

Beispiel #1 Exception::getPrevious example

Looping over, and printing out, exception trace.

<?php
class MyCustomException extends Exception {}

function 
doStuff() {
    try {
        throw new 
InvalidArgumentException("You are doing it wrong!"112);
    } catch(
Exception $e) {
        throw new 
MyCustomException("Something happend"911$e);
    }
}


try {
    
doStuff();
} catch(
Exception $e) {
    do {
        
printf("%s:%d %s (%d) [%s]\n"$e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode(), get_class($e));
    } while(
$e $e->getPrevious());
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

/home/bjori/ex.php:8 Something happend (911) [MyCustomException]
/home/bjori/ex.php:6 You are doing it wrong! (112) [InvalidArgumentException]



Exception::getCode

(PHP 5 >= 5.1.0)

Exception::getCodeGibt die Fehlernummer der Exception zurück

Beschreibung

final public int Exception::getCode ( void )

Gibt die Fehlernummer der Exception zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt die Fehlernummer der Exception als integer zurück.

Beispiele

Beispiel #1 Exception::getCode()-Beispiel

<?php
try {
    throw new 
Exception("Some error message"30);
} catch(
Exception $e) {
    echo 
"The exception code is: " $e->getCode();
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

The exception code is: 30



Exception::getFile

(PHP 5 >= 5.1.0)

Exception::getFileGibt den Namen der Datei zurück, in der die Exception aufgetreten ist

Beschreibung

final public string Exception::getFile ( void )

Gibt den Namen der Datei zurück, die die Exception ausgelöst hat.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt den Namen der Datei zurück, in der die Exception ausgelöst wurde.

Beispiele

Beispiel #1 Exception::getFile()-Beispiel

<?php
try {
    throw new 
Exception;
} catch(
Exception $e) {
    echo 
$e->getFile();
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

/home/bjori/tmp/ex.php



Exception::getLine

(PHP 5 >= 5.1.0)

Exception::getLineGibt die Zeile zurück, in der die Exception auftrat

Beschreibung

final public int Exception::getLine ( void )

Gibt die Zeile zurück, in der die Exception ausgelöst wurde.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt die Zeile zurück, in der die Exception ausgelöst wurde.

Beispiele

Beispiel #1 Exception::getLine()-Beispiel

<?php
try {
    throw new 
Exception("Some error message");
} catch(
Exception $e) {
    echo 
"The exception was thrown on line: " $e->getLine();
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

The exception was thrown on line: 3



Exception::getTrace

(PHP 5 >= 5.1.0)

Exception::getTraceGibt den Stacktrace zurück

Beschreibung

final public array Exception::getTrace ( void )

Gibt den Stacktrace der Exception zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt den Stacktrace der Exception als Array zurück.

Beispiele

Beispiel #1 Exception::getTrace()-Beispiel

<?php
function test() {
 throw new 
Exception;
}

try {
 
test();
} catch(
Exception $e) {
 
var_dump($e->getTrace());
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

array(1) {
  [0]=>
  array(4) {
    ["file"]=>
    string(22) "/home/bjori/tmp/ex.php"
    ["line"]=>
    int(7)
    ["function"]=>
    string(4) "test"
    ["args"]=>
    array(0) {
    }
  }
}



Exception::getTraceAsString

(PHP 5 >= 5.1.0)

Exception::getTraceAsStringGibt den Stacktrace als String zurück

Beschreibung

final public string Exception::getTraceAsString ( void )

Gibt den Stacktrace als String zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt den Stacktrace als String zurück.

Beispiele

Beispiel #1 Exception::getTraceAsString()-Beispiel

<?php
function test() {
    throw new 
Exception;
}

try {
    
test();
} catch(
Exception $e) {
    echo 
$e->getTraceAsString();
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

#0 /home/bjori/tmp/ex.php(7): test()
#1 {main}



Exception::__toString

(PHP 5 >= 5.1.0)

Exception::__toStringStringrepräsentation der Exception

Beschreibung

public string Exception::__toString ( void )

Gibt die Stringrepräsentation der Exception zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt die Stringrepräsentation der Exception zurück.

Beispiele

Beispiel #1 Exception::__toString()-Beispiel

<?php
try {
    throw new 
Exception("Some error message");
} catch(
Exception $e) {
    echo 
$e;
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

exception 'Exception' with message 'Some error message' in /home/bjori/tmp/ex.php:3
Stack trace:
#0 {main}



Exception::__clone

(PHP 5 >= 5.1.0)

Exception::__cloneKlont die Exception

Beschreibung

final private void Exception::__clone ( void )

Versucht, die Exception zu klonen. Dies erzeugt einen Fatal Error.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Fehler/Exceptions

Exceptions sind nicht klonbar.


Inhaltsverzeichnis



ErrorException

Einführung

Eine Error Exception.

Klassenbeschreibung

ErrorException
ErrorException extends Exception {
/* Eigenschaften */
protected int $severity ;
/* Methoden */
public __construct ([ string $message [, int $code [, int $severity [, string $filename [, int $lineno ]]]]] )
final public int getSeverity ( void )
/* Geerbte Methoden */
final public string Exception::getMessage ( void )
final public Exception Exception::getPrevious ( void )
final public int Exception::getCode ( void )
final public string Exception::getFile ( void )
final public int Exception::getLine ( void )
final public array Exception::getTrace ( void )
final public string Exception::getTraceAsString ( void )
public string Exception::__toString ( void )
final private void Exception::__clone ( void )
}

Eigenschaften

severity

Die Schwere einer Exception

Beispiele

Beispiel #1 Verwenden von set_error_handler() zum Verändern von Fehlermeldungen innerhalb ErrorException.

<?php
function exception_error_handler($errno$errstr$errfile$errline ) {
    throw new 
ErrorException($errstr0$errno$errfile$errline);
}
set_error_handler("exception_error_handler");

/* Exception ausloesen */
strpos();
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Fatal error: Uncaught exception 'ErrorException' with message 'Wrong parameter count for strpos()' in /home/bjori/tmp/ex.php:8
Stack trace:
#0 [internal function]: exception_error_handler(2, 'Wrong parameter...', '/home/bjori/php...', 8, Array)
#1 /home/bjori/php/cleandocs/test.php(8): strpos()
#2 {main}
  thrown in /home/bjori/tmp/ex.php on line 8


ErrorException::__construct

(PHP 5 >= 5.1.0)

ErrorException::__constructErstellt die Exception

Beschreibung

public ErrorException::__construct ([ string $message [, int $code [, int $severity [, string $filename [, int $lineno ]]]]] )

Erstellt die Exception.

Parameter-Liste

message

Die auszugebende Exceptionbeschreibung.

code

Die Fehlernummer der Exception.

severity

Die Schwere des aufgetretenen Fehlers.

filename

Der Name der Datei, in der die Exception aufgetreten ist.

lineno

Die Zeilennummer, in der die Exception aufgetreten ist.



ErrorException::getSeverity

(PHP 5 >= 5.1.0)

ErrorException::getSeverityLiefert die Schwere der Exception

Beschreibung

final public int ErrorException::getSeverity ( void )

Gibt die Schwere der Exception zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt die Schwere der Exception zurück.

Beispiele

Beispiel #1 ErrorException::getSeverity()-Beispiel

<?php
try {
    throw new 
ErrorException("Exception message"075);
} catch(
ErrorException $e) {
    echo 
"This exception severity is: " $e->getSeverity();
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

This exception severity is: 75


Inhaltsverzeichnis




Vordefinierte Interfaces

Inhaltsverzeichnis

Siehe auch SPL-Interfaces.


Das Traversable-Interface

Einführung

Interface, um herauszufinden, ob eine Klasse mittels foreach traversierbar ist.

Das abstrakte Interface kann nicht direkt implementiert werden. Stattdessen müssen Sie es entweder mittels IteratorAggregate oder Iterator implementieren.

Hinweis: Interne (eingebaute) Klassen, die dieses Interface implementieren, können in foreach-Konstrukten verwendet werden und benötigen keine explizite Implementierung von IteratorAggregate oder Iterator.

Hinweis: Es handelt sich um ein internes Interface der Engine, das nicht in PHP-Skripten implementiert werden kann. Statt dessen müssen IteratorAggregate oder Iterator verwendet werden.

Interface-Übersicht

Traversable
Traversable {
}

Dieses Interface besitzt keine Methoden, sein einziger Sinn ist es, als Basisinterface für alle traversierbaren Klassen zu dienen.



Das Iterator-Interface

Einführung

Interface für externe Iteratoren oder Objekte, die selbstiterierend sind.

Interface-Übersicht

Iterator
Iterator extends Traversable {
/* Methoden */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public boolean valid ( void )
}

Beispiel #1 Basisnutzung

Dieses Beispiel demonstriert, in welcher Reihenfolge Methoden aufgerufen werden, wenn Sie foreach auf einem Iterator anwenden.

<?php
class meinIterator implements Iterator {
    private 
$position 0;
    private 
$array = array(
        
"erstesElement",
        
"zweitesElement",
        
"letztesElement",
    );

    public function 
__construct() {
        
$this->position 0;
    }

    function 
rewind() {
        
var_dump(__METHOD__);
        
$this->position 0;
    }

    function 
current() {
        
var_dump(__METHOD__);
        return 
$this->array[$this->position];
    }

    function 
key() {
        
var_dump(__METHOD__);
        return 
$this->position;
    }

    function 
next() {
        
var_dump(__METHOD__);
        ++
$this->position;
    }

    function 
valid() {
        
var_dump(__METHOD__);
        return isset(
$this->array[$this->position]);
    }
}

$it = new meinIterator;

foreach(
$it as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

string(18) "meinIterator::rewind"
string(17) "meinIterator::valid"
string(19) "meinIterator::current"
string(15) "meinIterator::key"
int(0)
string(12) "erstesElement"

string(16) "meinIterator::next"
string(17) "meinIterator::valid"
string(19) "meinIterator::current"
string(15) "meinIterator::key"
int(1)
string(13) "zweitesElement"

string(16) "meinIterator::next"
string(17) "meinIterator::valid"
string(19) "meinIterator::current"
string(15) "meinIterator::key"
int(2)
string(11) "letztesElement"

string(16) "meinIterator::next"
string(17) "meinIterator::valid"

Iterator::current

(PHP 5 >= 5.1.0)

Iterator::currentGibt das aktuelle Element zurück

Beschreibung

abstract public mixed Iterator::current ( void )

Gibt das aktuelle Element zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Kann Werte jeden Typs zurückgeben.



Iterator::key

(PHP 5 >= 5.1.0)

Iterator::keyGibt den Schlüssel des aktuellen Elements zurück

Beschreibung

abstract public scalar Iterator::key ( void )

Gibt den Schlüssel des aktuellen Elements zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt bei Erfolg einen Skalar zurück, im Fehlerfall wird der Integerwert 0 zurückgegeben.

Fehler/Exceptions

Wirft im Fehlerfall eine Meldung vom Typ E_WARNING.



Iterator::next

(PHP 5 >= 5.1.0)

Iterator::nextRückt den Zeiger auf das nächste Element vor

Beschreibung

abstract public void Iterator::next ( void )

Verschiebt die aktuelle Position auf das nächste Element.

Hinweis: Diese Methode wird nach jedem Durchlauf der foreach-Schleife aufgerufen.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Jeder zurückgegebene Wert wird ignoriert.



Iterator::rewind

(PHP 5 >= 5.1.0)

Iterator::rewindSetzt den Iterator auf das erste Element zurück

Beschreibung

abstract public void Iterator::rewind ( void )

Setzt den Zeiger auf das erste Element des Iterators zurück.

Hinweis: Dies ist die erste Methode, die aufgerufen wird, wenn eine foreach-Schleife gestartet wird. Sie wird nicht nach foreach-Durchläufen ausgeführt.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Zurückgegebene Werte werden ignoriert.



Iterator::valid

(PHP 5 >= 5.1.0)

Iterator::validPrüft, ob die aktuelle Position zulässig ist

Beschreibung

abstract public boolean Iterator::valid ( void )

Diese Methode wird nach Iterator::rewind und Iterator::next aufgerufen, um zu prüfen, ob die aktuelle Position zulässig ist.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Der Rückgabewert wird in den Typ boolean gecastet und dann evaluiert. Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.


Inhaltsverzeichnis



Das IteratorAggregate-Interface

Einführung

Interface, um einen externen Iterator zu erzeugen.

Interface-Übersicht

IteratorAggregate
IteratorAggregate extends Traversable {
/* Methoden */
abstract public Traversable getIterator ( void )
}

Beispiel #1 Basisnutzung

<?php
class meineDaten implements IteratorAggregate {
    public 
$property1 "Öffentliche Eigenschaft eins";
    public 
$property2 "Öffentliche Eigenschaft zwei";
    public 
$property3 "Öffentliche Eigenschaft drei";

    public function 
__construct() {
        
$this->property4 "letzte Eigenschaft";
    }

    public function 
getIterator() {
        return new 
ArrayIterator($this);
    }
}

$obj = new meineDaten;

foreach(
$obj as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

string(9) "property1"
string(19) "Öffentliche Eigenschaft eins"

string(9) "property2"
string(19) "Öffentliche Eigenschaft zwei"

string(9) "property3"
string(21) "Öffentliche Eigenschaft drei"

string(9) "property4"
string(13) "letzte Eigenschaft"


IteratorAggregate::getIterator

(PHP 5 >= 5.1.0)

IteratorAggregate::getIteratorHolt einen externen Iterator

Beschreibung

abstract public Traversable IteratorAggregate::getIterator ( void )

Gibt einen externen Iterator zurück.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Eine Instanz eines Objektes, das Iterator oder Traversable implementiert.

Fehler/Exceptions

Wirft im Fehlerfall eine Exception.


Inhaltsverzeichnis



Das ArrayAccess-Interface

Einführung

Interface, um Objekte als Arrays ansprechen zu können

Interface-Übersicht

ArrayAccess
ArrayAccess {
/* Methoden */
abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )
}

Beispiel #1 Basisnutzung

<?php
class obj implements arrayaccess {
    private 
$container = array();
    public function 
__construct() {
        
$this->container = array(
            
"eins"  => 1,
            
"zwei"  => 2,
            
"drei"  => 3,
        );
    }
    public function 
offsetSet($offset$value) {
        
$this->container[$offset] = $value;
    }
    public function 
offsetExists($offset) {
        return isset(
$this->container[$offset]);
    }
    public function 
offsetUnset($offset) {
        unset(
$this->container[$offset]);
    }
    public function 
offsetGet($offset) {
        return isset(
$this->container[$offset]) ? $this->container[$offset] : null;
    }
}

$obj = new obj;

var_dump(isset($obj["zwei"]));
var_dump($obj["zwei"]);
unset(
$obj["zwei"]);
var_dump(isset($obj["zwei"]));
$obj["zwei"] = "Ein Wert";
var_dump($obj["zwei"]);

?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

bool(true)
int(2)
bool(false)
string(7) "Ein Wert"

ArrayAccess::offsetExists

(PHP 5 >= 5.1.0)

ArrayAccess::offsetExistsPrüft, ob ein Offset-Punkt existiert

Beschreibung

abstract public boolean ArrayAccess::offsetExists ( mixed $offset )

Prüft, ob ein Offset-Punkt existiert oder nicht.

Diese Methode wird aufgerufen, wenn die Funktionen isset() oder empty() auf Objekte angewendet werden, die ArrayAccess implementieren.

Hinweis: Wenn empty() verwendet wird, wird die Funktion ArrayAccess::offsetGet() aufgerufen und untersucht, ob bereits ein Wert zugewiesen wurde, sofern ArrayAccess::offsetExists() TRUE zurückliefert.

Parameter-Liste

offset

Der zu untersuchende Offset-Punkt.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Hinweis: Der Rückgabewert wird zu boolean gecastet, sofern sonst ein nicht-boolscher Wert zurückgegeben würde.

Beispiele

Beispiel #1 ArrayAccess::offsetExists()-Beispiel

<?php
class obj implements arrayaccess {
    public function 
offsetSet($offset$wert) {
        
var_dump(__METHOD__);
    }
    public function 
offsetExists($var) {
        
var_dump(__METHOD__);
        if (
$var == "foobar") {
            return 
true;
        }
        return 
false;
    }
    public function 
offsetUnset($var) {
        
var_dump(__METHOD__);
    }
    public function 
offsetGet($var) {
        
var_dump(__METHOD__);
        return 
"Wert";
    }
}

$obj = new obj;

echo 
"Ausführung obj::offsetExists()\n";
var_dump(isset($obj["foobar"]));

echo 
"\nAusführung obj::offsetExists() und obj::offsetGet()\n";
var_dump(empty($obj["foobar"]));

echo 
"\nAusführung obj::offsetExists(), "
    
."obj:offsetGet() wird *nicht* ausgeführt, "
    
."wenn nichts zurückgegeben werden kann\n";
var_dump(empty($obj["foobaz"]));
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Ausführung obj::offsetExists()
string(17) "obj::offsetExists"
bool(true)

Ausführung obj::offsetExists() und obj::offsetGet()
string(17) "obj::offsetExists"
string(14) "obj::offsetGet"
bool(false)

Ausführung obj::offsetExists(), obj:offsetGet() wird *nicht* ausgeführt, wenn nichts zurückgegeben werden kann
string(17) "obj::offsetExists"
bool(true)



ArrayAccess::offsetGet

(PHP 5 >= 5.1.0)

ArrayAccess::offsetGetGibt den Wert eines Offset-Punkts zurück

Beschreibung

abstract public mixed ArrayAccess::offsetGet ( mixed $offset )

Gibt den Wert des angegebenen Offset-Punkts zurück.

Diese Methode wird ausgeführt, wenn geprüft wird, ob ein Offset-Punkt empty() ist.

Parameter-Liste

offset

Der zu untersuchende Offset-Punkt.

Rückgabewerte

Kann Werte aller Typen zurückgeben.

Siehe auch



ArrayAccess::offsetSet

(PHP 5 >= 5.1.0)

ArrayAccess::offsetSetZu setzender Offset-Punkt

Beschreibung

abstract public void ArrayAccess::offsetSet ( mixed $offset , mixed $value )

Weist dem angegebenen Offset-Punkt einen Wert zu.

Parameter-Liste

offset

Der Offset-Punkt, dem ein Wert zugewiesen werden soll.

value

Der zuzuweisende Wert.

Rückgabewerte

Es wird kein Wert zurückgegeben.



ArrayAccess::offsetUnset

(PHP 5 >= 5.1.0)

ArrayAccess::offsetUnsetzu löschender Offset

Beschreibung

abstract public void ArrayAccess::offsetUnset ( mixed $offset )

Löscht einen Offset-Punkt.

Hinweis: Diese Methode wird nicht aufgerufen, wenn ein Typecast auf (unset) durchgeführt wird.

Parameter-Liste

offset

Der zu löschende Offset-Punkt.

Rückgabewerte

Es wird kein Wert zurückgegeben.


Inhaltsverzeichnis



Das Serializable-Interface

Einführung

Interface für benutzerdefiniertes Serialisieren.

Klassen, die dieses Interface implementieren, unterstützen __sleep und __wakeup nicht mehr. Die Methode serialize wird immer aufgerufen, wenn eine Instanz serialisiert werden muss. Dabei wird weder __destruct() aufgerufen noch irgend ein anderer Seiteneffekt erzeugt, es sei denn, ein solcher wird in der Methode serialize explizit erzeugt. Wenn die Daten deserialisiert werden, ist die Klasse bekannt und die passende unserialize()-Methode wird anstelle des Konstruktors __construct() aufgerufen. Falls notwendig, kann der Standardkonstruktor innerhalb von unserialize() aufgerufen werden.

Interface-Übersicht

Serializable
Serializable {
/* Methoden */
abstract public string serialize ( void )
abstract public mixed unserialize ( string $serialized )
}

Beispiel #1 Basisnutzung

<?php
class obj implements Serializable {
    private 
$data;
    public function 
__construct() {
        
$this->data "Meine private-Daten";
    }
    public function 
serialize() {
        return 
serialize($this->data);
    }
    public function 
unserialize($data) {
        
$this->data unserialize($data);
    }
    public function 
getData() {
        return 
$this->data;
    }
}

$obj = new obj;
$ser serialize($obj);

$newobj unserialize($ser);

var_dump($newobj->getData());
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

string(15) "Meine private-Daten"

Serializable::serialize

(PHP 5 >= 5.1.0)

Serializable::serializeStringrepräsentation eines Objekts

Beschreibung

abstract public string Serializable::serialize ( void )

Die Funktion sollte die Stringrepräsentation des Objekts zurückgeben.

Hinweis: Diese Methode agiert wie der Destruktor des Objekts. Die __destruct()-Methode wird nach dieser Methode nicht aufgerufen.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Gibt die Stringrepräsentation des Objekts oder NULL zurück.

Fehler/Exceptions

Wirft Exception, wenn andere Typen als String oder NULL zurückgegeben werden.

Siehe auch



Serializable::unserialize

(PHP 5 >= 5.1.0)

Serializable::unserializeErstellt das Objekt

Beschreibung

abstract public mixed Serializable::unserialize ( string $serialized )

Wird beim Deserialisieren des Objekts aufgerufen.

Hinweis: Diese Methode agiert wie der Konstruktor des Objekts. Die __construct()-Methode wird nach dieser Methode nicht aufgerufen.

Parameter-Liste

serialized

Die das Objekt repräsentierende Zeichenkette.

Rückgabewerte

Gibt den deserialisierten Originalwert zurück.

Siehe auch


Inhaltsverzeichnis




Kontextoptionen und -parameter

PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params().


Socket-Kontextoptionen

Socket-KontextoptionenListe der Socket-Optionen

Beschreibung

Socket context options are available for all wrappers that work over sockets, like tcp, http and ftp.

Optionen

bindto

Used to specify the IP address (either IPv4 or IPv6) and/or the port number that PHP will use to access the network. The syntax is ip:port. Setting the IP or the port to 0 will let the system choose the IP and/or port.

Hinweis: As FTP creates two socket connections during normal operation, the port number cannot be specified using this option.

Changelog

Version Beschreibung
5.1.0 Added bindto.

Beispiele

Beispiel #1 Basic bindto usage example

<?php
// connect to the internet using the '192.168.0.100' IP
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:0',
    ),
);


// connect to the internet using the '192.168.0.100' IP and port '7000'
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:7000',
    ),
);


// connect to the internet using port '7000'
$opts = array(
    
'socket' => array(
        
'bindto' => '0:7000',
    ),
);


// create the context...
$context stream_context_create($opts);

// ...and use it to fetch the data
echo file_get_contents('http://www.example.com'false$context);

?>



HTTP context options

HTTP context optionsHTTP context option listing

Beschreibung

Context options for http:// and https:// transports.

Optionen

method string

GET, POST, or any other HTTP method supported by the remote server.

Defaults to GET.

header string

Additional headers to be sent during request. Values in this option will override other values (such as User-agent:, Host:, and Authentication:).

user_agent string

Value to send with User-Agent: header. This value will only be used if user-agent is not specified in the header context option above.

By default the user_agent php.ini setting is used.

content string

Additional data to be sent after the headers. Typically used with POST or PUT requests.

proxy string

URI specifying address of proxy server. (e.g. tcp://proxy.example.com:5100).

request_fulluri boolean

When set to TRUE, the entire URI will be used when constructing the request. (i.e. GET http://www.example.com/path/to/file.html HTTP/1.0). While this is a non-standard request format, some proxy servers require it.

Defaults to FALSE.

max_redirects integer

The max number of redirects to follow. Value 1 or less means that no redirects are followed.

Defaults to 20.

protocol_version float

HTTP protocol version.

Defaults to 1.0.

timeout float

Read timeout in seconds, specified by a float (e.g. 10.5).

By default the default_socket_timeout php.ini setting is used.

ignore_errors boolean

Fetch the content even on failure status codes.

Defaults to FALSE

Changelog

Version Beschreibung
5.3.0 Added ignore_errors .
5.2.1 Added timeout .
5.1.0 Added HTTPS proxying through HTTP proxies.
5.1.0 Added max_redirects .
5.1.0 Added protocol_version .

Beispiele

Beispiel #1 Fetch a page and send POST data

<?php

$postdata 
http_build_query(
    array(
        
'var1' => 'some content',
        
'var2' => 'doh'
    
)
);

$opts = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $postdata
    
)
);

$context  stream_context_create($opts);

$result file_get_contents('http://example.com/submit.php'false$context);

?>

Anmerkungen

Hinweis: Underlying socket stream context options
Additional context options may be supported by the underlying transport For http:// streams, refer to context options for the tcp:// transport. For https:// streams, refer to context options for the ssl:// transport.



FTP-Kontextoptionen

FTP-KontextoptionenListe der FTP-Kontextoptionen

Beschreibung

Kontextoptionen für ftp:// und ftps://.

Optionen

overwrite boolean

Gestattet das Überschreiben bereits existierender Dateien auf einem Server. Hat nur Auswirkungen auf den Schreibmodus (Upload).

Die Standardeinstellung ist FALSE.

resume_pos integer

Dateioffset von dem aus die Übertragung begonnen werden soll. Hat nur Auswirkungen auf den Lesemodus (Download).

Standardwert ist 0 (Dateianfang).

proxy string

Leitet FTP-Anfragen über einen Proxyserver um. Hat nur Auswirkungen auf Lesezugriffe. Beispiel: tcp://squid.example.com:8000.

Changelog

Version Beschreibung
5.1.0 proxy wurde hinzugefügt.
5.0.0 overwrite und resume_pos wurden hinzugefügt.

Anmerkungen

Hinweis: Kontextoptionen des zugrundeliegenden Socket Streams
Der zugrundeliegende Transportmechanismus kann weitere Optionen zur Verfügung stellen. Für ftp:// Streams siehe hierzu die Optionen des tcp://-Mechanismus, für ftps:// Streams stehen entsprechend die Optionen des ssl://-Mechanismus zur Verfügung.



SSL context options

SSL context optionsSSL context option listing

Beschreibung

Context options for ssl:// and tls:// transports.

Optionen

verify_peer boolean

Require verification of SSL certificate used.

Defaults to FALSE.

allow_self_signed boolean

Allow self-signed certificates.

Defaults to FALSE

cafile string

Location of Certificate Authority file on local filesystem which should be used with the verify_peer context option to authenticate the identity of the remote peer.

capath string

If cafile is not specified or if the certificate is not found there, the directory pointed to by capath is searched for a suitable certificate. capath must be a correctly hashed certificate directory.

local_cert string

Path to local certificate file on filesystem. It must be a PEM encoded file which contains your certificate and private key. It can optionally contain the certificate chain of issuers.

passphrase string

Passphrase with which your local_cert file was encoded.

CN_match string

Common Name we are expecting. PHP will perform limited wildcard matching. If the Common Name does not match this, the connection attempt will fail.

verify_depth integer

Abort if the certificate chain is too deep.

Defaults to no verification.

ciphers string

Sets the list of available ciphers. The format of the string is described in » ciphers(1).

Defaults to DEFAULT.

capture_peer_cert boolean

If set to TRUE a peer_certificate context option will be created containing the peer certificate.

capture_peer_chain boolean

If set to TRUE a peer_certificate_chain context option will be created containing the certificate chain.

Changelog

Version Beschreibung
5.0.0 Added capture_peer_cert , capture_peer_chain and ciphers .

Anmerkungen

Hinweis: Because ssl:// is the underlying transport for the https:// and ftps:// wrappers, any context options which apply to ssl:// also apply to https:// and ftps://.



CURL Kontextoptionen

CURL KontextoptionenListe der CURL Kontextoptionen

Beschreibung

Die CURL Kontextoptionen sind verfügbar wenn die CURL-Erweiterun mit Hilfe der configure-Option --with-curlwrappers kompiliert wurde.

Optionen

method string

GET, POST, oder jede andere vom angesprochenen Server unterstützte HTTP-Methode.

Vorgabewert ist GET.

header string

Additional headers to be sent during request. Values in this option will override other values (such as User-agent:, Host:, and Authentication:).

user_agent string

Der in der User-Agent: Kopfzeile zu übermittelnde Wert

Vorgabewert ist die php.ini-Einstellung user_agent.

content string

Additional data to be sent after the headers. This option is not used for GET or HEAD requests.

proxy string

URI specifying address of proxy server. (e.g. tcp://proxy.example.com:5100).

max_redirects integer

The max number of redirects to follow. Value 1 or less means that no redirects are followed.

Defaults to 20.

curl_verify_ssl_host boolean

Verify the host.

Defaults to FALSE

Hinweis: This option is available for both the http and ftp protocol wrappers.

curl_verify_ssl_peer boolean

Require verification of SSL certificate used.

Defaults to FALSE

Hinweis: This option is available for both the http and ftp protocol wrappers.

Beispiele

Beispiel #1 Fetch a page and send POST data

<?php

$postdata 
http_build_query(
    array(
        
'var1' => 'some content',
        
'var2' => 'doh'
    
)
);

$opts = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $postdata
    
)
);

$context  stream_context_create($opts);

$result file_get_contents('http://example.com/submit.php'false$context);

?>



Phar context options

Phar context optionsPhar context option listing

Beschreibung

Context options for phar:// wrapper.

Optionen

compress int

One of Phar compression constants.

metadata mixed

Phar metadata. See Phar::setMetadata().



Kontextparameter

KontextparameterListe der Kontextparameter

Beschreibung

Diese Parameter eines Kontextes können mit Hilfe der Funktion stream_context_set_params() gesetzt werden.

Optionen

notification callback

Ein callback, der bei dem Auftreten eines Ereignisses auf einem Stream aufgerufen wird.

Für weitere Informationen siehe auch stream_notification_callback().


Inhaltsverzeichnis




Sicherheit


Einführung

PHP ist eine mächtige Sprache, und der Interpreter, der in einen Webserver als Modul oder als separate CGI-Version eingebunden werden kann, kann auf Dateien zugreifen, Befehle ausführen und Netzwerkverbindungen zu einem Server herstellen. Diese Eigenschaften können einen Webserver unsicher machen, wenn man es bei den Voreinstellungen belässt. PHP wurde besonders dafür entwickelt, um eine sicherere Sprache als Perl oder C für die Erstellung von CGI-Programmen bereitzustellen. Mit der richtigen Wahl der Einstellungen beim Kompilieren und zur Laufzeit bietet PHP genau die Kombination aus Freiheit und Sicherheit, die gerade benötigt wird.

Da es sehr viele verschiedene Möglichkeiten gibt, PHP zu nutzen, gibt es viele Konfigurationseinstellungen, die das Verhalten von PHP beeinflussen. Eine große Auswahl an Einstellungen garantiert, dass man PHP für viele Zwecke einsetzen kann. Allerdings bedeutet das auch, dass es Kombinationen gibt, die eine Installation mit nur ungenügender Sicherheit zur Folge haben.

Die Flexibilität der Konfiguration konkurriert mit der Flexibilität in der Programmierung. Mit PHP können komplette Server Applikationen mit allen Möglichkeiten eines Shell Benutzers erstellt werden, oder auch nur einfache Server Side Includes mit einem minimalen Risiko in einer streng kontrollierten Umgebung. Wie die Umgebung erstellt wird, und wie sicher diese ist, ist zu einem großen Teil die Sache des PHP Entwicklers.

Dieses Kapitel beginnt mit einigen generellen Ratschlägen zur Sicherheit, erklärt die verschiedenen Kombinationen der Konfigurationseinstellungen und unter welchen Gegebenheiten sie sicher genutzt werden können, und beschreibt verschiedene Überlegungen zur Programmierung für verschiedene Sicherheitsstufen.



Allgemeine Überlegungen

Ein komplett sicheres System ist praktisch ein Ding der Unmöglichkeit, weshalb ein unter Sicherheitsprofis oft genutzter Ansatz ist, einen Mittelweg zwischen Risiko und Verwendbarkeit zu finden. Wenn jede von einem Benutzer übermittelte Variable zwei Formen von biometrischer Prüfung (wie z.B. ein Scan der Netzhaut und ein Fingerabdruck) verlangen würde, wäre eine extrem hohe Ebene der Verantwortlichkeit erreicht. Ein sehr komplexes Formular auszufüllen würde auch eine halbe Stunde in Anspruch nehmen, die Benutzer dazu ermuntern könnte, Wege zur Umgehung der Sicherheitsmaßnahmen zu suchen.

Die beste Sicherheit ist oft unaufdringlich genug um den Anforderungen zu entsprechen, ohne den Benutzer an seiner Arbeit zu hindern oder den Code-Autor mit übertriebener Komplexität zu überlasten. Tatsächlich sind einige Sicherheitsangriffe nur die Folge von allzu strengen Sicherheitsmaßnahmen, was mit der Zeit nur zu deren Unterminierung führt.

Eine Phrase die es wert ist, sich an sie zu erinnern: Ein System ist nur so gut wie das schwächste Glied in der Kette. Wenn alle Transaktionen mittels Zeit, Ort, Transaktionstyp, etc. streng mitprotokolliert werden, der Benutzer aber nur mittels einem einzigen Cookie verifiziert wird, lässt die Zuverlässigkeit für die Bindung des Benutzers an das Transaktions-Log bedrohlich nach.

Denken Sie während der Tests daran, dass Sie selbst für die einfachsten Seiten nicht alle Möglichkeiten testen können. Der von Ihnen vielleicht erwartete Input wird zu dem eines verstimmten Mitarbeiters oder eines Crackers der Monate Zeit hat, oder einer Katze, die über die Tastatur läuft in keinerlei Zusammenhang stehen. Deshalb betrachten Sie Ihren Code am Besten aus der logischen Perspektive um zu erkennen, wo unerwartete Daten eingebracht werden können und fragen sich dann, wie diese modifiziert, reduziert, oder weiter ausgeführt werden.

Das Internet ist voll von Leuten die versuchen, sich durch Entschlüsseln/zerstören Ihres Codes, den Zusammenbruch Ihres Systems, Einsetzen von unangebrachten Inhalten, und anderen, Ihren Tag interessant gestaltenden Maßnahmen, einen Namen zu machen. Es ist egal, ob Sie eine kleine oder große Site haben, Sie sind einfach ein Ziel wenn Sie online sind oder wenn Sie einen Server haben, zu dem man eine Verbindung aufbauen kann. Viele Cracker-Programme erkennen nicht die Größe, sondern durchsieben einfach gewaltige IP Blöcke im Netz, um Opfer zu finden. Versuchen Sie, keines zu werden.



CGI-Version

Inhaltsverzeichnis


Mögliche Angriffe

PHP als CGI zu nutzen, ist eine Möglichkeit für Installationen, bei denen aus irgendwelchen Gründen kein Modul in die Serversoftware eingebunden werden soll (wie beim Apache) oder für Systeme, bei denen verschiedene CGI-Wrapper genutzt werden sollen, um sichere chroot- und setuid-Umgebungen fürr Skripte zu schaffen. Bei dieser Konfiguration wird das ausführbare PHP-Binary üblicherweise im cgi-bin Verzeichnis des Webservers installiert. CERT advisory » CA-96.11 spricht sich gegen die Platzierung von Interpretern im cgi-bin Verzeichnis aus. Obwohl das PHP-Binary als eigenständiger Interpreter verwendet werden kann, wurde PHP so entwickelt, um den durch diese Konfiguration möglich werdenden Angriffe vorzubeugen:

  • Zugriff auf Systemdateien: http://my.host/cgi-bin/php?/etc/passwd Die auf ein Fragezeichen (?) folgende Abfrageinformation in einer URL wird durch das CGI-Interface als Kommandozeilenargument an den Interpreter weitergereicht. In der Kommandozeile wird üblicherweise die im ersten Argument angegebene Datei von Interpretern geöffnet und ausgeführt. Beim Aufruf als CGI-Binary verweigert PHP die Interpretation der Kommandozeilenargumente.
  • Zugriff auf beliebige Web-Dokumente auf dem Server: http://my.host/cgi-bin/php/secret/doc.html Der Teil der URL-Pfadinformation nach dem Namen der PHP Binärdatei, /secret/doc.html wird im allgemeinen benutzt, um den Namen der Datei zu übergeben, die durch das CGI-Programm geöffnet und interpretiert werden soll. Normalerweise werden einige Einträge in der Konfigurationsdatei des Webservers benutzt (Apache: Action), um Aufrufe von Dokumenten wie http://my.host/secret/script.php an den PHP-Interpreter umzuleiten. Bei dieser Konfiguration überprüft der Webserver zuerst die Zugriffsrechte im Verzeichnis /secret und erstellt anschließend den umgeleiteten Aufruf http://my.host/cgi-bin/php/secret/script.php. Unglücklicherweise wird, wenn der Aufruf bereits in dieser Form geschieht, vom Webserver keine Zugriffsüberprüfung der Datei /secret/script.php, sondern lediglich der Datei /cgi-bin/php vorgenommen. So ist jeder Benutzer, der auf /cgi-bin/php zugreifen darf in der Lage, sich zu jedem geschützten Dokument auf dem Webserver Zugriff zu verschaffen. Bei PHP können beim Kompilieren die Konfigurationsoption --enable-force-cgi-redirect und zur Laufzeit die Konfigurationsdirektiven doc_root und user_dir benutzt werden, um diesen Angriff zu verhindern, falls der Verzeichnisbaum des Servers Verzeichnisse mit Zugriffsbeschränkungen beinhaltet. Ausführliche Informationen über die verschiedenen Kombinationen siehe weiter unten.


Fall 1: Nur öffentliche Dateien vorhanden

Wenn der Server keine Inhalte hat, die durch Passwort oder IP-basierte Zugriffskontrolle geschützt sind, werden diese Konfigurationsoptionen nicht benötigt. Wenn der Webserver keine Redirects erlaubt oder keine Möglichkeit hat, dem PHP-Binary mitzuteilen dass es sich um eine sicher umgeleitete Anfrage handelt, kann die Option --enable-force-cgi-redirect im configure-Script angegeben werden. Nichtsdestotrotz müssen Sie sicherstellen, dass Ihre PHP-Skripte nicht auf die eine oder andere Art des Aufrufs angewiesen sind, weder direkt durch http://my.host/cgi-bin/php/dir/script.php noch durch einen Redirect http://my.host/dir/script.php.

Beim Apache kann der Redirect durch den Gebrauch von AddHandler und Action konfiguriert werden (siehe unten).



Fall 2: --enable-force-cgi-redirect benutzen

Diese beim Kompilieren verwendete Option verhindert grundsätzlich den Aufruf von PHP mit einer URL wie http://my.host/cgi-bin/php/secretdir/script.php. Stattdessen parst PHP in diesem Modus nur dann, wenn der Aufruf durch einen korrekten Redirect des Webservers erfolgte.

Normalerweise wird der Redirect in der Apache-Konfiguration mit den folgenden Einträgen festgelegt:

Action php-script /cgi-bin/php
AddHandler php-script .php

Diese Option wurde nur mit dem Apache Webserver getestet und ist abhängig davon, wie Apache die nicht standardmäßige CGI-Umgebungsvariable REDIRECT_STATUS bei Redirect-Anfragen setzt. Sollte Ihr Webserver keine Möglichkeit unterstützen, zu übermitteln, ob es sich um einen direkte Aufruf oder einen Redirect handelt, können Sie diese Option nicht verwenden und müssen einen der anderen hier beschriebenen Wege gehen, die CGI-Version zu nutzen.



Fall 3: doc_root oder user_dir festlegen

Aktiven Inhalt, wie beispielsweise Skripts und ausführbare Dateien, in den Dokumentverzeichnissen des Webservers abzulegen, wird manchmal als unsichere Methode angesehen. Wenn, beispielsweise aufgrund von Konfigurationsfehlern, die Skripte nicht ausgeführt, sondern als reguläre HTML-Dokumente angezeigt werden kann dies ein Durchsickern von geistigem Eigentum und sicherheitsrelevanter Informationen (Passwörter!) zur Folge haben. Deshalb ziehen es viele Systemadministratoren vor, eine zweite Verzeichnisstruktur für Skripte einzurichten, auf die nur durch das PHP-CGI zugegriffen werden kann. Diese werden dann stets interpretiert und nicht angezeigt.

Auch wenn die Methode zum sichergestellten Verhindern einer Umleitung von Anfragen (wie im vorangegangenen Kapitel beschrieben) nicht verfügbar ist, ist es notwendig, ein doc_root für Skripte zusätzlich zum Web-Dokumentenverzeichnis einzurichten.

Sie können das PHP-Skriptverzeichnis durch die Direktive doc_root in der Konfigurationsdatei festlegen, oder Sie setzen die Umgebungsvariable PHP_DOCUMENT_ROOT. Wenn sie gesetzt ist, wird die CGI-Version von PHP den Namen der zu öffnenden Datei stets aus doc_root und der Pfadinformation der Anfrage zusammensetzen, sodass man sicher sein kann, dass außerhalb dieses Verzeichnisses keine Skripte ausgeführt werden (außer user_dir , siehe unten).

Eine weitere hier nützliche Option ist user_dir. Wenn das user_dir nicht gesetzt ist, hat nur doc_root Einfluss auf die zu öffnende Datei. Der Aufruf einer URL wie http://my.host/~user/doc.php hat nicht zum Ergebnis, dass eine Datei im Home-Verzeichnis des Benutzers geöffnet wird, sondern eine Datei namens ~user/doc.php unterhalb des doc_root (Ja, ein Verzeichnisname, der mit einer Tilde anfängt [~]).

Ist das user_dir beispielsweise auf public_php gesetzt, wird eine Anfrage wie http://my.host/~user/doc.php eine Datei namens doc.php im Verzeichnis public_php im Heimatverzeichnis des Benutzers öffnen. Wenn das Heimatverzeichnis des Benutzers /home/user ist, so ist die ausgeführte Datei /home/user/public_php/doc.php.

Die user_dir -Expansion erfolgt ohne Berücksichtigung der doc_root Einstellung. So können Zugriffe auf die Dokumenten- und Benutzerverzeichnisse separat gesteuert werden.



Fall 4: PHP-Parser außerhalb des Webverzeichnisbaums

Eine sehr sichere Sache ist es, das PHP-Parser-Binary irgendwo außerhalb des Webverzeichnisbaums zu platzieren, beispielsweise in /usr/local/bin. Der einzige Nachteil dieses Verfahrens ist, dass eine Zeile ähnlich der folgenden:

#!/usr/local/bin/php

als erste Zeile in jeder Datei, die PHP-Tags enthält, stehen muss. Außerdem muss die Datei ausführbar sein. Ansonsten ist sie genauso zu behandeln wie ein beliebiges CGI-Script in Perl oder sh oder anderen gebräuchlichen Scriptsprachen, die den #! shell-escape-Mechanismus nutzen, um sich selbst aufzurufen.

Damit PHP bei dieser Konfiguration die PATH_INFO- und PATH_TRANSLATED-Informationen korrekt auswertet, sollte der PHP-Parser mit der Option --enable-discard-path kompiliert werden.




Verwendung als Apache-Modul

Wenn PHP als Apache-Modul eingesetzt wird, übernimmt es die Benutzerrechte des Apache (üblicherweise die des Users "nobody"). Das hat verschiedene Auswirkungen auf Sicherheit und Authentifizierung. Wenn Sie beispielsweise via PHP auf eine Datenbank zugreifen, müssen Sie dem Benutzer "nobody" Zugriffsrechte auf die Datenbank erteilen, es sei denn, diese Datenbank hat eine integrierte Zugriffskontrolle. Das heißt, dass ein böswilliges Skript auch ohne Benutzerkennung und Passwort auf die Datenbank zugreifen und sie verändern könnte. Es ist durchaus möglich, dass ein Web-Spider über die Webseite eines Datenbankadministrators stolpert und alle Ihre Datenbanken löscht. Sie können sich dagegen mit Apache-Authentifizierung schützen, oder ein eigenes Zugangsmodell unter Verwendung von LDAP, .htaccess Dateien etc. entwerfen, und diesen Code als Teil Ihrer PHP-Skripte einbinden.

Ist erst einmal eine Sicherheitsstruktur bis zu dem Punkt eingerichtet, an dem der PHP-User (in diesem Falle der Apache-User) nur noch ein geringes Risiko darstellt, hat man meist die Situation, dass PHP gehindert wird, beliebige Dateien in das Benutzerverzeichnis zu schreiben. Oder vielleicht ist PHP dann nicht mehr in der Lage, auf Datenbanken lesend oder verändernd zuzugreifen. In gleicher Weise wird auch verhindert, "gute" oder "bösartige" Dateien zu schreiben, oder "gute" bzw. "bösartige" Datenbanktransaktionen durchzuführen.

Ein an diesem Punkt oft geöffnetes Sicherheitsloch ist die Zuweisung von Root-Rechten an den Apache-Prozess oder die Ausweitung der Rechte des Apache auf anderem Wege.

Die Ausweitung der Benutzerrechte für Apache auf root ist extrem gefährlich und kann das gesamte System kompromittieren, daher sollten Prozesse, die wie sudo oder chroot mit Rootrechten arbeiten, niemandem zugänglich sein, der kein Sicherheitsprofi ist.

Es gibt deutlich einfachere Lösungen. Mit open_basedir können Sie kontrollieren, welche Verzeichnisse PHP benutzen darf oder nicht. Sie können auch einen Bereich nur für Apache einrichten, um alle webbasierten Aktivitäten auf dem System oder nicht dem Benutzer gehörende Dateien zu verhindern.



Dateisystem - Sicherheit

Inhaltsverzeichnis

PHP ist von den in den meisten Serversystemen implementierten Sicherheitseinstellungen hinsichtlich der Berechtigungen auf Datei- und Verzeichnisebene abhängig. Dies verleiht Ihnen Kontrolle darüber, welche Dateien in dem Dateisystem gelesen werden dürfen. Vorsicht ist bei weltweit lesbaren Dateien geboten um sicherzustellen, dass diese sicher von allen Usern mit Zugriff auf dieses Dateisystem (nur) gelesen werden können.

Da PHP entwickelt wurde um Zugriffe auf das Dateisystem auf Benutzebene zu erlauben, ist es natürlich auch möglich ein PHP Skript zu schreiben das Ihnen erlaubt Systemdateien wie /etc/passwd zu lesen, Ethernetverbindungen zu modifizieren, enorme Druckaufträge zu senden, etc. Dies hat offensichtliche Implikationen, indem Sie sicherstellen müssen, dass alle von Ihnen zu lesenden bzw. zu schreibenden Dateien auch die richtigen sind.

Stellen Sie sich folgendes Skript vor, in dem ein User zum Ausdruck bringt, dass gerne eine Datei in seinem Heimatverzeichnis löschen möchte. Dies geht von einer Situation aus, in der ein PHP Web-Interface regelmäßig zum Dateimanagement verwendet wird, und der Apache User ist auch berechtigt, in seinem Heimatverzeichnis Dateien zu löschen.

Beispiel #1 Schlechte Variablenprüfung führt zu....

<?php
// Löschen einer Datei aus dem Heimatverzeichnis des Users
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";
unlink("$homedir/$userfile");
echo 
"Die Datei wurde gelöscht!";
?>

Da der Benutzer- und Dateiname über ein Benutzerformular bereitgestellt werden kann jeder jemand anderes Benutzer- und Dateinamen übertragen und so Dateien ohne über die entsprechnde Erlaubnis zu verfügen. In diesem Fall empfiehlt es sich, eine andere Form der Authentifizierung zu verwenden. Stellen Sie sich vor was passieren würde, wenn die übertragenen Variablen "../etc/" und "passwd" beinhalten würden. Der Code würde dann effektiv lesen:

Beispiel #2 ... Ein Angriff auf das Dateisystem

<?php
// löscht eine Datei irgendwo auf der Festplatte, wo der
// Benutzer die nötigen Rechte besitzt. Wenn PHP root hat:
$username $_POST['user_submitted_name']; // "../etc"
$userfile $_POST['user_submitted_filename']; // "passwd"
$homedir  "/home/$username"// "/home/../etc"

unlink("$homedir/$userfile"); // "/home/../etc/passwd"

echo "Die Datei wurde gelöscht!";?>

Es gibt zwei wichtige Kriterien die Sie beachten sollten, um diese Dinge zu vermeiden:

  • Erteilen Sie dem PHP Web-user (Binärdatei) nur eingeschränkte Rechte.
  • Prüfen Sie alle übertragenen Variablen.

Hier ist ein verbessertes Skript:

Beispiel #3 Etwas sicherere Prüfung des Dateinamens

<?php
// löscht eine Datei von der Festplatte, auf die
// der PHP user Zugriff hat.
$username $_SERVER['REMOTE_USER']; // using an authentication mechanisim
$userfile basename($_POST['user_submitted_filename']);
$homedir  "/home/$username";

$filepath "$homedir/$userfile";

if (
file_exists($filepath) && unlink($filepath)) {
    
$logstring "$filepath gelöscht\n";
} else {
    
$logstring "$filepath konnte nicht gelöscht\n";
}
$fp fopen("/home/logging/filedelete.log""a");
fwrite($fp$logstring);
fclose($fp);

echo 
htmlentities($logstringENT_QUOTES);
?>

Auch dies nicht völlig makellos. Wenn Ihr Authentifizierungssystem Benutzern erlauben sollte, deren eigene Logins zu kreieren, und ein Benutzer wählt den Login "../etc", ist das System wieder aufgedeckt. Aus diesem Grund ziehen Sie es vielleicht vor, einen besseren Check zu schreiben:

Beispiel #4 Sicherere Dateinamensprüfung

<?php
$username     
$_SERVER['REMOTE_USER']; // Nutzung des Authentifikationsmechanismus
$userfile     $_POST['user_submitted_filename'];
$homedir      "/home/$username";

$filepath     "$homedir/$userfile";

if (!
ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD'$userfile)) {
    die(
"Ungültiger Benutzer- oder Dateiname");
}

//etc...
?>

Abhängig vom Betriebssystem gibt es eine große Anzahl Dateien mit der Sie sich befassen sollten, inklusive Einträge für Geräte (/dev/ oder com1), Konfigurationsdateien (/etc/ Dateien und die .ini Dateien), gut bekannte Verzeichnisse (/home/, My Documents), etc. Aus diesem Grund ist es gewöhnlich einfacher eine Vorgangsweise einzuführen, bei der außer den von Ihnen explizit erlaubten Dingen alles verboten ist.


Probleme im Zusammenhang mit Nullbytes

Da PHP die Funktionen der C-Standardbibliothek für Dateisystemoperationen nutzt kann es Nullbytes in unerwarteter Weise verarbeiten. Da Nullbytes in C das Stringende festlegen werden Strings die solche enthalten nicht vollständig verarbeitet sondern nur bis zum ersten Auftreten eines Nullbytes. Das folgende Beispiel zeigt verwundbaren Programmkode der das Problem demonstriert:

Beispiel #1 Skript mit Nullbyte-Verwundbarkeit

<?php
  $file 
$_GET['file']; // "../../etc/passwd\0"
  
if (file_exists('/home/wwwrun/'.$file.'.php')) {
    
// file_exists gibt true zurück da /home/wwwrun/../../etc/passwd existiert
    
include '/home/wwwrun/'.$file.'.php';
    
// die Datei /etc/passwd wird eingebunden
  
}
?>

Daher sollte jede nicht vertrauenswürdige Zeichenkette, die in Dateisystemoperationen verwendet wird, ordentlich geprüft werden. Hier sehen Sie eine eine bessere Versiond des vorhergehenden Beispiels:

Beispiel #2 Korrekte Validierung der Eingabe

<?php
  $file 
$_GET['file'];
  
  
// Gestatte gültige Werte
  
switch ($file) {
    case 
'main':
    case 
'foo':
    case 
'bar':
      include 
'/home/wwwrun/include/'.$file.'.php';
      break;
    default:
      include 
'/home/wwwrun/include/main.php';
  }
?>



Datenbank - Sicherheit

Inhaltsverzeichnis

Heutzutage sind Datenbanken die Hauptkomponenten jeder Webbasierten Applikation, aufgrund welcher Websites verschiedene dynamische Inhalte anbieten können. Nachdem heikle oder geheime Informationen in solch einer Datenbank gespeichert werden können, sollten Sie deren Schutz ernsthaft bedenken.

Um Informationen zu bekommen oder zu speichern, müssen Sie eine legitime Abfrage senden, das Ergebnis holen, und die Verbindung schließen. Heutzutage ist die allgemein verwendete Abfragesprache für solche Interaktionen die Structured Query Language (SQL). Sehen Sie, wie sich ein Angreifer an einer SQL Abfrage zu schaffen machen kann.

Sie werden merken, dass PHP Ihre Datenbank alleine nicht schützen kann. Die folgenden Abschnitte sind eine Einführung in die Grundlagen, wie man innerhalb von PHP Skripten auf Datenbanken zugreift und diese manipuliert.

Denken Sie an diese einfache Regel: tief gestaffelte Verteidigung. Je mehr Platz Sie den Maßnahmen zum Schutz Ihrer Datenbank geben, desto geringer ist die Wahrscheinlichkeit, dass ein Angreifer Erfolg hat, und gespeicherte Geheiminformationen aufdeckt oder missbraucht. Gutes Design des Datenbankschemas und die Applikation wird mit Ihren größten Befürchtungen fertig.


Datenbanken designen

Der erste Schritt liegt immer im Erstellen der Datenbank, außer Sie wollen eine bereits existierende Dritter verwenden. Ist eine Datenbank erstellt, ist sie einem Eigentümer zugewiesen, welcher das Kommando zum Erstellen ausgeführt hat. Gewöhnlich kann nur der Eigentümer (oder ein Superuser) alles mit den Objekten in dieser Datenbank machen, und um anderen Benutzern die Verwendung zu erlauben, müssen Rechte vergeben werden.

Applikationen sollten sich mit der Datenbank nie als deren Eigentümer oder als ein Superuser verbinden, da diese Benutzer jede gewollte Abfrage ausführen können, um z.B. das Schema zu modifizieren (z.B. Tabellen löschen) oder den gesamten Inhalt löschen.

Sie können verschiedene Datenbanknutzer mit sehr limitierten Rechten auf Datenbankobjekte für jeden Aspekt Ihrer Applikation anlegen. Nur die wirklich benötigten Rechte sollten gewährt werden, und vermeiden Sie, dass der gleiche Benutzer in verschiedenen Anwendungsfällen mit der Datenbank interagieren kann. Das heißt, dass Eindringlinge, welche unter Verwendung einer dieser Referenzen Zugriff auf Ihre Datenbank erlangt haben, nur so viele Änderungen durchführen können, wie es Ihre Applikation kann.

Implementieren Sie nicht alle Geschäftslogik in die Webapplikation (z.B. Ihr Skript), sondern tun Sie das im Datenbankschema unter Verwendung von Sichten, Triggern, oder Regeln. Wenn sich das System entwickelt, werden neu zu öffnende Ports zu der Datenbank vorgesehen, und Sie müssen die Logik in jedem Datenbank-Client neu implementieren. Überdies können Trigger verwendet werden, um transparent und automatisch mit Feldern umzugehen, welche beim debuggen Ihrer Applikation oder beim Zurückverfolgen von Transaktionen oft einen Einblick gewähren.



Zur Datenbank verbinden

Vielleicht wollen Sie die Verbindungen über SSL herstellen, um die Client/Server Kommunikation für eine erhöhte Sicherheit zu verschlüsseln, oder aber auch ssh verwenden, um die Netzwerkverbindung zwischen den Clients und dem Datenbankserver zu verschlüsseln. Ist eines davon realisiert, wird ein Monitoring Ihres Verkehrs und das Erlangen von Informationen zu harter Arbeit.



Verschlüsseltes Speichermodell

SSL/SSH schützt zwar die gerade auf dem Weg befindlichen Daten vom Client zum Server, jedoch nicht die dauernd in einer Datenbank gespeicherten Daten. SSL ist ein "auf-der-Leitung" Protokoll.

Hat ein Angreifer direkten Zugriff auf Ihre Datenbank (den Webserver umgehend), können die gespeicherten heiklen Daten aufgedeckt oder zweckentfremdet werden, außer wenn die Information von der Datenbank selbst geschützt ist. Die Daten zu verschlüsseln ist ein guter Weg, diese Gefahr zu mildern, doch bieten nur wenige Datenbanken diese Art der Verschlüsselung von Daten.

Der einfachste Weg, dieses Problem zu umgehen ist, erst einmal Ihr eigenes Verschlüsselungspaket zu erstellen, und dieses dann in Ihren PHP Skripten zu nutzen. PHP kann Ihnen in diesem Fall mit seinen verschiedenen Erweiterungen helfen, wie z.B. Mcrypt and Mhash, welche eine große Auswahl an Verschlüsselungsalgorhythmen abdecken. Das Skript verschlüsselt die Daten vor dem Speichern, und entschlüsselt diese wieder beim Erhalt. Siehe die Verweise für weitere Beispiele, wie Verschlüsselung arbeitet.

Im Fall von wirklich versteckten Daten, wenn deren unverfälschte Repräsentation nicht nötig ist (z.B. keine Anzeige), ist hashing ebenfalls überlegenswert. Das bekannte Beispiel für das Hashing ist das Speichern des MD5 hash eines Passwortes in einer Datenbank, anstatt des Passwortes selbst. Siehe auch crypt() und md5().

Beispiel #1 Verwenden eines hashed Passwortfeldes

// Speichern des Passwort hash
$query  = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
            pg_escape_string($username), md5($password));
$result = pg_query($connection, $query);

// Afragen, ob der User das richtige Passwort übermittelt hat
$query = sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
            pg_escape_string($username), md5($password));
$result = pg_query($connection, $query);

if (pg_num_rows($result) > 0) {
    echo "Welcome, $username!";
} else {
    echo "Authentication failed for $username.";
}


SQL Injection

Viele Entwickler sind sich nicht bewusst, wie man sich an SQL Abfragen zu schaffen machen kann und nehmen an, dass eine SQL Abfrage ein vertrauenswürdiges Kommando ist. Das heißt, dass SQL Abfragen Zugriffskontrollen hinters Licht führen, und dadurch Standard Authentifizierungs- und Authorisationschecks umgehen können, und manchmal können SQL Abfragen sogar Zugriff zu Kommandos auf Betriebssystemebene erlauben.

Direkt SQL Command Injection ist eine Technik, wo ein Angreifer SQL Kommandos erstellt oder existierende verändert, um versteckte Daten sichtbar zu machen, wertvolle Daten zu überschreiben, oder sogar gefährliche Kommandos auf Systemebene des Datenbank-Hosts auszuführen. Dies wird durch die Applikation erreicht, welche den Input des Benutzers mit statischen Parametern kombiniert, um eine SQL Abfrage zu erstellen. Die folgenden Beispiele basieren - leider - auf wahren Begebenheiten.

Dank dem Mangel an Input Validierungen, und dem Verbinden zum Datenbankserver als ein Superuser oder jemand der Benutzer anlegen kann, kann ein Angreifer einen Superuser in Ihrer Datenbank anlegen.

Beispiel #1 Die Ergebnisliste in mehrere Seiten aufsplitten ... und Superuser anlegen (PostgreSQL and MySQL)

$offset = $argv[0]; // Vorsicht, keine Validierung des Input !
$query  = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
// mit PostgreSQL
$result = pg_query($conn, $query);
// mit MySQL
$result = mysql_query($query);

Normale Benutzer klicken auf die 'nächste' bzw. 'vorige' Links, wo $offset in der URL enthalten ist. Das Skript erwartet, dass die ankommende $offset einen Dezimalwert enthält. Ganz gleich, jemand versucht einzubrechen, indem er das folgende in einer urlencode()'d Form an die URL anhängt

// Im Fall von PostgreSQL
0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--

// Im Fall von MySQL
0;
UPDATE user SET Password=PASSWORD('crack') WHERE user='root';
FLUSH PRIVILEGES;

Wenn es passiert ist, würde ihm das Skript einen Zugriff als Superuser präsentieren. Beachten Sie, dass 0; ein gültiges Offset zur ursprünglichen Abfrage liefert, und sie beendet.

Hinweis: Es ist eine übliche Technik, den SQL Parser mittels dem Kommentarzeichen in SQL -- zu zwingen, den Rest der vom Entwickler geschriebenen Abfrage zu ignorieren.

Ein gangbarer Weg um Passwörter zu finden ist, Ihre Seiten mit den Suchergebnissen hinters Licht zu führen. Der Angreifer braucht nur zu probieren, ob irgendeine übertragene Variable, die in dem SQL Statement verwendet wird, nicht richtig gehandhabt wird. Diese Filter können gewöhnlich in einer vorausgehenden Form gesetzt werden, indem WHERE, ORDER BY, LIMIT und OFFSET Klauseln in SELECT Statements umgebaut werden. Wenn Ihre Datenbank das UNION Konstrukt unterstützt, kann der Angreifer versuchen, eine komplette Abfrage an das Original anzuhängen, um Paßwörter aus einer willkürlichen Tabelle aufzulisten. Die Verwendung von verschlüsselten Passwortfeldern wird ausdrücklich empfohlen.

Beispiel #2 Artikel auflisten ... und ein paar Passwörter (irgendein Datenbankserver)

$query  = "SELECT id, name, inserted, size FROM products
                  WHERE size = '$size'
                  ORDER BY $order LIMIT $limit, $offset;";
$result = odbc_exec($conn, $query);

Der statische Teil der Abfrage kann mit einem anderen SELECT Statement kombiniert werden, welches alle Passwörter preisgibt

'
union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable;
--

Wenn diese Abfrage (mit dem ' und --) einer der in $query verwendeten Variablen zugewiesen würde, wäre das "Abfragebiest" erwacht.

SQL UPDATEs sind ebenfalls ein Anlass, Ihre Datenbank anzugreifen. Diese Abfragen sind auch durch das Ändern und Anhängen einer komplett neuen Abfrage gefährdet. Aber der Angreifer könnte auch mit der SET Klausel herumspielen. In diesem Fall muss eine Schemainformation vorhanden sein, um die Abfrage erfolgreich manipulieren zu können. Diese kann durch Untersuchen der Variablennamen im Formular, oder simpel mittels brute force gesammelt werden. Es gibt nicht so viele Namenskonventionen für Felder, welche Passwörter oder Benutzernamen speichern.

Beispiel #3 Vom Zurücksetzen eines Passwortes ... zum Erlangen von mehr Rechten (irgendein Datenbankserver)

$query = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";

Aber ein böswilliger Benutzer übermittelt den Wert ' or uid like'%admin%'; -- zu $uid, um das Administrator Passwort zu ändern, oder setzt einfach $pwd auf "hehehe', admin='yes', trusted=100 " (mit dem hinteren Leerzeichen), um mehr Rechte zu erhalten. Dann wird die Abfrage verdreht:

// $uid == ' or uid like'%admin%'; --
$query = "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%'; --";

// $pwd == "hehehe', admin='yes', trusted=100 "
$query = "UPDATE usertable SET pwd='hehehe', admin='yes', trusted=100 WHERE ...;"

Ein furchterregendes Beispiel, wie der Zugriff auf Kommandos auf Betriebssystemebene bei manchen Datenbankservern erfolgen kann.

Beispiel #4 Angriff auf das Betriebssystem des Datenbank Hosts (MSSQL Server)

$query  = "SELECT * FROM products WHERE id LIKE '%$prod%'";
$result = mssql_query($query);

Wenn ein Angreifer den Wert a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- zu $prod überträgt, wird $query zu:

$query  = "SELECT * FROM products
                    WHERE id LIKE '%a%'
                    exec master..xp_cmdshell 'net user test testpass /ADD'--";
$result = mssql_query($query);

Der MSSQL Server führt die SQL Statements in dem Batch aus, inklusive einem Kommando zum Anlegen eines neuen Benutzers in der Datenbank Accounts. Würde diese Applikation als sa und der MSSQLSERVER Service mit genügend Rechten laufen, hätte der Angreifer nun ein Konto, mit welchem er Zugriff auf diese Maschine hätte.

Hinweis: Manche der obigen Beispiele sind an einen spezifischen Datenbankserver gebunden. Das heißt jedoch nicht, dass nicht ein ähnlicher Angriff auf andere Produkte möglich wäre. Ihr Datenbankserver könnte auf andere Weise genauso verwundbar sein.

Techniken zur Vermeidung

Sie könnten sich nun darauf berufen, dass der Angreifer in den meisten Beispielen ein Stück Information über das Datenbankschema haben muss. Sie haben recht, aber Sie wissen nie, wann und wie es genommen werden kann, und wenn es passiert, kann Ihre Datenbank entblößt werden. Wenn Sie ein Open Source, oder öffentlich verfügbares Paket zur Handhabung von Datenbanken verwenden, welches vielleicht zu einem Content Management System oder Forum gehört, können Eindringlinge leicht eine Kopie eines Stücks Ihres Codes erstellen. Es kann auch ein Sicherheitsrisiko sein, wenn es sich um ein schlecht designtes Paket handelt.

Diese Angriffe basieren hauptsächlich auf dem Ausnutzen des Codes, welcher ohne Bedenken auf die Sicherheit geschrieben wurde. Vertrauen Sie nie auf irgendeine Art von Input, speziell wenn er von der Clientseite kommt, selbst wenn er von einer Auswahlbox, einem versteckten Eingabefeld, oder einem Cookie kommt. Das erste Beispiel zeigt, dass solch eine untadelige Abfrage ein Disaster anrichten kann.

  • Stellen Sie nie als Superuser oder Owner einer Datenbank eine Verbindung zur Datenbank her. Verwenden Sie immer speziell angelegte Benutzer mit sehr limitierten Rechten.
  • Prüfen Sie, ob der gegebene Input dem erwarteten Datentyp entspricht. PHP bietet eine große Auswahl an Funktionen zum Validieren des Input, von den einfachsten unter Variablenfunktionen und Character Type Functions (z.B. is_numeric() bzw. ctype_digit()), bis hin zu den Perl kompatiblen Regulären Ausdrücken.
  • Wenn die Applikation numerischen Input erwartet, erwägen Sie die Prüfung der Daten mit is_numeric(), oder die Änderung des Typs mit settype(), oder verwenden Sie die numerische Repräsentation mittels sprintf().

    Beispiel #5 Ein sicherer Weg, eine Abfrage zu erstellen

    settype($offset, 'integer');
    $query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";

    // Beachten Sie %d im Formatstring, %s zu verwenden wäre sinnlos
    $query = sprintf("SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;",
                     $offset);

  • Escapen Sie jede nicht numerische Benutzereingabe, welcher zur Datenbank weitergereicht werden soll mit der jeweiligen datenbankspezifischen Escape-Funktion (z.B. mysql_real_escape_string(), sqlite_escape_string() usw.). Wenn keine datenbankspezifischen Escapemechanismen existieren können in der Regel (je nach Datenbanktyp) auch die Funktion addslashes() und addcslashes() von Nutzen sein. Siehe auch das erste Beispiel. Wie dieses Beispiel zeigt, sind in den statischen Teil der Abfrage eingebrachten Escapes nicht genug, und können leicht gehacked werden.
  • Geben Sie keinerlei datenbankspezifische Informationen aus, speziell über das Schema, egal wie (auf ehrliche oder unehrliche Weise). Siehe auch Fehlerbehandlung und Error Handling and Logging Functions.
  • Sie können stored procedures und vorher definierte Cursor verwenden, um den Datenzugriff zu abstrahieren, sodass Benutzer nicht direkt auf Tabellen oder Views zugreifen, aber diese Lösung hat andere Auswirkungen.

Abgesehen davon profitieren Sie von einer Protokollierung der Abfragen entweder in Ihrem Skript, oder durch die Datenbank selbst, wenn es hilft. Klar, die Protokollierung kann nicht irgendeinen schädlichen Versuch verhindern, aber es kann helfen herauszufinden, welche Applikation umgangen wurde. Das Log ist durch die in ihm enthaltene Information nützlich, und je mehr Details es enthält, desto besser ist es im Allgemeinen.




Fehlerbehandlung

PHP Security hat zwei Seiten der Fehlerbehandlung. Eine ist für die Erhöhung der Sicherheit vorteilhaft, die andere ist schädlich.

Eine Standard-Angriffstaktik beinhaltet die Erstellung eines Profils des anzugreifenden Systems, indem die aufgrund der Einspeisung von unzulässigen Daten zurückgegebenen Fehlermeldungen anhand deren Art und des Kontextes ausgewertet werden. Dies erlaubt es einem Angreifer, nach Informationen über den Server zu suchen, um seine potentielle Verwundbarkeit herauszufinden. Wenn z.B. ein Angreifer Informationen über eine auf einem eingesendeten Formular basierte Seite zusammengetragen hat, kann er versuchen, Variablen zu überschreiben bzw. zu modifizieren:

Beispiel #1 Variablen mit einer eigenen HTML-Seite angreifen

<form method="post" action="attacktarget?username=badfoo&password=badfoo">
<input type="hidden" name="username" value="badfoo">
<input type="hidden" name="password" value="badfoo">
</form>

Die normalerweise zurückgegebenen PHP-Fehler können für den Entwickler hilfreich sein, wenn dieser ein Skript debuggen möchte, da sie z.B. Hinweise auf eine nicht vorhandene Funktion oder Datei, die PHP-Datei und die Zeilennummer des auftretenden Fehlers ausgeben. Dies alles sind Informationen, die ausgenutzt werden können. Es ist für einen PHP-Entwickler nicht unüblich, show_source(), highlight_string() oder highlight_file() zur Fehlersuche zu verwenden, jedoch kann dies in einem produktiven System auch versteckte Variablen, ungeprüfte Syntax und andere gefährliche Informationen aufdecken. Besonders gefährlich ist es, Code aus bekannten Quellen mit integrierten Debugging-Handlern auszuführen, oder weit verbreitete Debuggingtechniken zu verwenden. Wenn ein Angreifer die von Ihnen benutzte generelle Technik herausfindet, kann er versuchen, Ihre Seite mittels Bruteforce zu knacken, indem er verschiedene allgemein gebräuchliche Debugstrings sendet:

Beispiel #2 Ausnutzen von gebräuchlichen Debugging-Variablen

<form method="post" action="attacktarget?errors=Y&amp;showerrors=1&amp;debug=1">
<input type="hidden" name="errors" value="Y" />
<input type="hidden" name="showerrors" value="1" />
<input type="hidden" name="debug" value="1" />
</form>

Ungeachtet der Fehlerbehandlungsmethode führt die Möglichkeit, ein System nach Fehlermeldungen zu sondieren, dazu, dass einem Angreifer mehr Informationen geboten werden.

Zum Beispiel weist schon alleine der Stil einer Standardfehlermeldung darauf hin, dass auf einem System PHP läuft. Wenn der Angreifer auf eine .html Seite kommt und untersuchen möchte, welches System im Hintergrund läuft (um nach bekannten Systemschwächen Ausschau zu halten), könnte dieser mittels der Einspeisung von falschen Daten herausfinden, dass ein System mit PHP aufgebaut ist.

Ein Fehler einer Funktion gibt Aufschluss darüber, ob ein System eine bestimmte Datenbankapplikation benutzt, oder gibt Hinweise darauf, wie eine Webseite programmiert bzw. entworfen wurde. Dies erlaubt eine tiefere Überprüfung von offenen Datenbankports oder die Suche nach spezifischen Bugs bzw. Schwächen einer Webseite. Mit der Einspeisung von falschen Daten kann ein Angreifer z.B. die Reihenfolge der Authentifizierung in einem Skript bestimmen (anhand der Zeilennummern in den Fehlermeldungen). Ebenso lassen sich auch durch "Herumstochern" Missbrauchsmöglichkeiten an verschiedenen Stellen im Skript herausfinden.

Eine Fehlermeldung des Dateisystems oder eines generellen PHP-Errors kann darüber Auskunft geben, welche Rechte der Webserver hat, ebenso darüber, wie die Dateien auf dem Webserver strukturiert und organisiert sind. Vom Entwickler geschriebene Fehlermeldungen können das Problem verschlimmern, bis hin zum Preisgeben von zuvor "versteckten" Informationen.

Es gibt drei bedeutende Lösungen zu diesem Thema. Die erste ist, alle Funktionen zu überprüfen und zu versuchen, einen Großteil der Fehlermeldungen zu ersetzen. Die zweite ist, die Ausgabe von Fehlermeldungen bei produktivem Code generell zu deaktivieren. Die dritte ist, sich unter Verwendung der PHP-Funktionen zur Fehlerbehandlung einen eigenen Errorhandler zu schreiben. Abhängig von Ihrer Sicherheitspolitik könnte jede der drei Lösungen für Sie geeignet sein.

Ein Weg, diesen Punkt zügig abzuarbeiten, ist, das PHP-eigene error_reporting() zu benutzen, um Ihren Code sicherer zu gestalten und möglicherweise gefährliche Nutzungen von Variablen zu entdecken. Wenn Sie Ihren Code noch vor dem Einsatz mit E_ALL testen, können Sie schnell Bereiche entdecken, in denen Ihre Variablen eventuell für Verseuchung oder andere Modifikationen offen sind. Ist Ihr Code einsatzbereit, können Sie entweder das Errorreporting komplett ausschalten, indem Sie error_reporting() auf 0 setzen, oder Sie schalten die Fehleranzeige mittels der php.ini-Option display_errors aus, um Ihren Code vor dem Ausspähen zu schützen. Wenn Sie letztere Möglichkeit wählen, sollten Sie mittels der Ini-Direktive error_log einen Pfad definieren, in dem sich das Logfile befindet, und log_errors anschalten.

Beispiel #3 Gefährliche Variablen mit E_ALL finden

<?php
if ($username) {  // Vor Verwendung nicht initialisiert oder geprüft
    
$good_login 1;
}
if (
$good_login == 1) { // Wenn der obige Test fehlschlägt, ist vor der
                        // Verwendung nicht initialisiert oder geprüft
    
readfile ("/highly/sensitive/data/index.html");
}
?>



Verwendung von Register Globals

Warnung

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.

Ein Feature von PHP zur Erhöhung der Sicherheit ist die Konfiguration von PHP mit register_globals = off. Mit Deaktivierung der Möglichkeit, irgendeine vom Benutzer übertragenen Variable in den PHP Code zu injizieren, können Sie die Anzahl "vergifteter" Variablen reduzieren, welche ein potentieller Angreifer zufügen könnte. Dieser benötigt mehr Zeit, um sich Übermittlungen auszudenken, und Ihre internen Variablen sind effektiv von den übergebenen Benutzervariablen isoliert.

Während dies den benötigten Aufwand mit PHP zu arbeiten leicht erhöht ist dargelegt, dass die Vorteile gegenüber dem Aufwand klar überwiegen.

Beispiel #1 Mit register_globals=on arbeiten

<?php
if ($username) {  // kann vom User mit get/post/cookies übermittelt werden
    
$good_login 1;
}

if (
$good_login == 1) { // kann vom User mit get/post/cookies übermittelt werden
    
fpassthru ("/highly/sensitive/data/index.html");
}
?>

Beispiel #2 Mit register_globals = off arbeiten

<?php
if($_COOKIE['username']){
    
// kann nur von einem Cookie kommen
    
$good_login 1;
    
fpassthru ("/highly/sensitive/data/index.html");
}
?>

Dies weise genutzt ist es auch möglich, präventive Messungen durchzuführen, um bei versuchten Vorstößen zu warnen. Wenn Sie im Voraus wissen, woher eine Variable kommen soll, können Sie prüfen, ob die übermittelten Daten nicht einen unpassenden Weg genommen haben. Obwohl dies nicht garantiert, dass Daten nicht nur ausgedacht sind, erfordert es von einem Angreifer, auch den richtigen Weg zu finden.

Beispiel #3 Entdecken einfacher Manipulationen von Variablen

<?php
if ($_COOKIE['username'] &&
    !
$_POST['username'] &&
    !
$_GET['username'] ) {
    
// Durchführen anderer Checks, ob der Benutzername gültig ist...
    
$good_login 1;
    
fpassthru ("/highly/sensitive/data/index.html");
} else {
   
mail("admin@example.com""Possible breakin attempt"$_SERVER['REMOTE_ADDR']);
   echo 
"Security violation, admin has been alerted.";
   exit;
}
?>

Natürlich bedeutet ein einfaches Deaktivieren von register_globals nicht, dass Ihr Code nun automatisch sicher ist. Jeder Teil mit Daten sollte auch auf andere Arten geprüft werden. Überprüfen Sie immer die Eingaben von Benutzern und initialisieren Sie Ihre Variablen! Um Ihre Skripte auf nicht initialisierte Variablen zu prüfen, können Sie error_reporting() so einstellen, dass Fehler des Levels E_NOTICE angezeigt werden.

Sie knnen die On und Off Einstellungen von register_globals emulieren, nheres hierzu finden Sie in den FAQ.

Hinweis: Superglobals: Hinweis zur Verfügbarkeit
Seit PHP 4.1.0 stehen superglobale Arrays wie $_GET, $_POST,$_SERVER, etc. zur Verfügung. Weitere Informationen können Sie dem Abschnitt zu superglobals entnehmen.



Vom Nutzer übermittelte Daten

In vielen PHP Programmen liegt die größte Schwäche nicht an der Sprache selbst, sondern bloß an Code, der nicht mit dem nötigen Augenmerk auf die Sicherheit geschrieben wurde. Deshalb sollten Sie sich immer Zeit nehmen, die Implikationen eines gegebenen Codestücks zu bedenken, um einen möglichen Schaden durch eine eventuell unerwartete übergebene Variable festzustellen.

Beispiel #1 Gefährliche Verwendung von Variablen

<?php
// lösche eine Datei aus dem Benutzer-Verzeichnis...
// oder vielleicht dem eines anderen Benutzers?
unlink ($evil_var);

// Schreibe die Log-Information von deren Zugriff...
// oder vielleicht einen /etc/passwd Eintrag?
fputs ($fp$evil_var);

// Führe etwas triviales aus... oder rm -rf *?
system ($evil_var);
exec ($evil_var);

?>

Sie sollten Ihren Code immer sorgfältig kontrollieren, um eine sorgfältige Prüfung irgendwelcher von einem Web-Browser übertragenen Variablen sicherzustellen, und sich selbst folgende Fragen stellen:

  • Wird sich dieses Skript nur auf die vorgesehenen Dateien auswirken?
  • Kann auf ungewöhnliche oder unerwünschte Daten reagiert werden?
  • Kann dieses Skript auf nicht vorgesehene Art genutzt werden?
  • Kann dies in Verbindung mit anderen Skripten in einer negativen Art benutzt werden?
  • Werden alle Transaktionen ausreichend geloggt?

Wenn Sie sich diese Fragen anstatt danach schon während dem Schreiben des Skriptes stellen, ersparen Sie sich das unangenehme Umschreiben, wenn eine Erhöhung der Sicherheit erforderlich wird. Mit dieser Art zu denken werden Sie die Sicherheit des Systems zwar nicht garantieren, aber sie können helfen, sie zu erhöhen.

Sie könnten auch Überlegungen anstellen, ob Sie nicht register_globals, magic_quotes, oder andere bequeme Einstellungen abschalten, welche Sie in Punkto Gültigkeit, Herkunft, oder Inhalt einer gegebenen Variable durcheinanderbringen könnten. Mit PHP im error_reporting(E_ALL) Modus zu arbeiten kann auch helfen, Sie vor Variablen zu warnen, welche benutzt werden, bevor sie geprüft oder initialisiert wurden (so können Sie verhindern, dass mit ungewöhnlichen Daten gearbeitet wird).



Magic Quotes

Inhaltsverzeichnis

Warnung

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.

Magic Quotes is a process that automagically escapes incoming data to the PHP script. It's preferred to code with magic quotes off and to instead escape the data at runtime, as needed.


What are Magic Quotes

When on, all ' (single-quote), " (double quote), \ (backslash) and NULL characters are escaped with a backslash automatically. This is identical to what addslashes() does.

There are three magic quote directives:

  • magic_quotes_gpc Affects HTTP Request data (GET, POST, and COOKIE). Cannot be set at runtime, and defaults to on in PHP. See also get_magic_quotes_gpc().
  • magic_quotes_runtime If enabled, most functions that return data from an external source, including databases and text files, will have quotes escaped with a backslash. Can be set at runtime, and defaults to off in PHP. See also set_magic_quotes_runtime() and get_magic_quotes_runtime().
  • magic_quotes_sybase If enabled, a single-quote is escaped with a single-quote instead of a backslash. If on, it completely overrides magic_quotes_gpc. Having both directives enabled means only single quotes are escaped as ''. Double quotes, backslashes and NULL's will remain untouched and unescaped. See also ini_get() for retrieving its value.


Why did we use Magic Quotes

Warnung

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.

  • There is no reason to use magic quotes because they are no longer a supported part of PHP. However, they did exist and did help a few beginners blissfully and unknowingly write better (more secure) code. But, when dealing with code that relies upon this behavior it's better to update the code instead of turning magic quotes on. So why did this feature exist? Simple, to help prevent SQL Injection. Today developers are better aware of security and end up using database specific escaping mechanisms and/or prepared statements instead of relying upon features like magical quotes.


Why not to use Magic Quotes

Warnung

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.

  • Portability Assuming it to be on, or off, affects portability. Use get_magic_quotes_gpc() to check for this, and code accordingly.
  • Performance Because not every piece of escaped data is inserted into a database, there is a performance loss for escaping all this data. Simply calling on the escaping functions (like addslashes()) at runtime is more efficient. Although php.ini-development enables these directives by default, php.ini-production disables it. This recommendation is mainly due to performance reasons.
  • Inconvenience Because not all data needs escaping, it's often annoying to see escaped data where it shouldn't be. For example, emailing from a form, and seeing a bunch of \' within the email. To fix, this may require excessive use of stripslashes().


Disabling Magic Quotes

Warnung

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.

The magic_quotes_gpc directive may only be disabled at the system level, and not at runtime. In otherwords, use of ini_set() is not an option.

Beispiel #1 Disabling magic quotes server side

An example that sets the value of these directives to Off in php.ini. For additional details, read the manual section titled How to change configuration settings.

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

If access to the server configuration is unavailable, use of .htaccess is also an option. For example:

php_flag magic_quotes_gpc Off

In the interest of writing portable code (code that works in any environment), like if setting at the server level is not possible, here's an example to disable magic_quotes_gpc at runtime. This method is inefficient so it's preferred to instead set the appropriate directives elsewhere.

Beispiel #2 Disabling magic quotes at runtime

<?php
if (get_magic_quotes_gpc()) {
    function 
stripslashes_deep($value)
    {
        
$value is_array($value) ?
                    
array_map('stripslashes_deep'$value) :
                    
stripslashes($value);

        return 
$value;
    }

    
$_POST array_map('stripslashes_deep'$_POST);
    
$_GET array_map('stripslashes_deep'$_GET);
    
$_COOKIE array_map('stripslashes_deep'$_COOKIE);
    
$_REQUEST array_map('stripslashes_deep'$_REQUEST);
}
?>




PHP verstecken

Generell ist Sicherheit durch Unklarheit eine der schwächsten Formen von Sicherheit. Aber in manchen Fällen ist ein klein wenig mehr an zusätzlicher Sicherheit wünschenswert.

Ein paar einfache Techniken helfen, PHP zu verstecken, um nach Schwächen in Ihrem System suchende Angreifer unter Umständen langsamer zu machen. Wenn Sie in Ihrer php.ini expose_php auf off setzen, reduzieren Sie damit die zur Verfügung stehenden Informationen.

Eine andere Taktik ist, den Webserver wie z.B. Apache entweder mittels einer .htaccess-Direktive oder in der Apache-Konfigurationsdatei selbst so einzustellen, dass dieser verschiedene Dateitypen durch PHP parst. So können Sie irreführende Dateierweiterungen verwenden:

Beispiel #1 PHP als andere Sprache ausgeben

# Lasse PHP-Code wie andere Arten von Code aussehen
AddType application/x-httpd-php .asp .py .pl

Oder komplett unklar machen:

Beispiel #2 Verwenden von unbekannten Typen für PHP-Dateierweiterungen

# Lasse PHP Code wie unbekannte Typen aussehen
AddType application/x-httpd-php .bop .foo .133t

Oder verstecken Sie ihn als HTML-Code, was einen leichten Performanceverlust bedeutet, da so alle HTML-Dateien durch die PHP-Engine geparst werden:

Beispiel #3 Verwenden von HTML-Typen für PHP-Dateierweiterungen

# Lasse PHP-Code wie HTML aussehen
AddType application/x-httpd-php .htm .html

Um dies effektiv arbeiten zu lassen, müssen Sie Ihre PHP-Dateien nach den obigen Dateierweiterungen umbenennen. Obwohl dies eine Form der Sicherheit durch Verhüllung ist, ist es eine geringfügige präventive Maßnahme mit nur wenigen Nachteilen.



Aktuell bleiben

PHP wird, wie jedes andere große System auch, ständig geprüft und weiterentwickelt. Neue Versionen enthalten in der Regel sowohl kleinere als auch größere Änderungen, um die Sicherheit zu erhöhen und sowohl Fehler als auch Konfigurationspannen und andere Probleme auszugleichen, die die Gesamtsicherheit und -stabilität Ihres Systems beeinflussen können.

Wie auch bei anderen Scriptsprachen und Programmen auf Systemebene, ist der beste Ansatz ein regelmäßiges Updaten, und sich laufend über die letzten Versionen und deren Änderungen zu informieren.




Features


HTTP-Authentifizierung mit PHP

Die HTTP-Authentifizierung durch PHP ist nur verfügbar, wenn PHP als Apache-Modul läuft und funktioniert daher nicht mit der CGI-Version. In einem PHP-Skript für ein Apache-Modul kann man die Funktion header() benutzen, um die Nachricht "Authentifizierung erforderlich" an den Client-Browser zu senden, damit dieser ein Fenster zur Eingabe von Benutzername/Passwort öffnet. Hat der Benutzer diese eingegeben, wird die URL des PHP-Scripts mit den vordefinierten Variablen PHP_AUTH_USER, PHP_AUTH_PW und AUTH_TYPE, die den Benutzernamen, das Passwort und den Typ der Authentifizierung enthalten, erneut aufgerufen. Diese vordefinierten Variablen befinden sich in den Arrays $_SERVER und $HTTP_SERVER_VARS. Es werden sowohl die "Basic"- als auch (seit PHP 5.1.0) die "Digest"-Authentifizierungsmethode unterstützt. Näheres hierzu bei der header() Funktion.

Hinweis: Anmerkung zur PHP Version
Superglobale, wie $_SERVER, sind seit PHP » 4.1.0 verfügbar.

Ein Auszug aus einem Skript, das die Clientauthentifizierung auf einer Seite erzwingt, würde so aussehen:

Beispiel #1 Beispiel: Basic-HTTP-Authentifizierung

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    
header('WWW-Authenticate: Basic realm="My Realm"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
'Text, der gesendet wird, falls der Benutzer auf Abbrechen drückt';
    exit;
} else {
    echo 
"<p>Hallo {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo 
"<p>Sie gaben {$_SERVER['PHP_AUTH_PW']} als Passwort ein.</p>";
}
?>

Beispiel #2 Beispiel: Digest-HTTP-Authentifizierung

In diesem Beispiel wird gezeigt, wie ein einfaches Skript für die Digest-HTTP-Authentifizierung implementiert wird. Weitere Informationen dazu finden Sie im » RFC 2617.

<?php
$realm 
'Geschützter Bereich';

// Benutzer => Passwort
$benutzer = array('admin' => 'mypass''gast' => 'gast');

if (empty(
$_SERVER['PHP_AUTH_DIGEST'])) {
    
header('HTTP/1.1 401 Unauthorized');
    
header('WWW-Authenticate: Digest realm="' $realm .
           
'",qop="auth",nonce="' uniqid() . '",opaque="' md5($realm) .
           
'"');

    die(
'Text, der gesendet wird, falls der Benutzer auf Abbrechen drückt');
}

// Analysieren der Variable PHP_AUTH_DIGEST
if (!($daten http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
    !isset(
$benutzer[$daten['username']]))
    die(
'Falsche Zugangsdaten!');

// Erzeugen einer gültigen Antwort
$A1 md5($daten['username'] . ':' $realm ':' .
          
$benutzer[$daten['username']]);
$A2 md5($_SERVER['REQUEST_METHOD'] . ':' $daten['uri']);
$gueltige_antwort md5($A1 ':' $daten['nonce'] . ':' $daten['nc'] .
                        
':' $daten['cnonce'] . ':' $daten['qop'] . ':' .
                        
$A2);

if (
$daten['response'] != $gueltige_antwort)
    die(
'Falsche Zugangsdaten!');

// OK, gültige Benutzername & Passwort
echo 'Sie sind angemeldet als: ' $daten['username'];

// Funktion zum analysieren der HTTP-Auth-Header
function http_digest_parse($txt) {
    
// gegen fehlende Daten schützen
    
$noetige_teile = array('nonce'=>1'nc'=>1'cnonce'=>1'qop'=>1,
                           
'username'=>1'uri'=>1'response'=>1);
    
$daten = array();

    
preg_match_all('@(\w+)=(?:([\'"])([^\2]+)\2|([^\s,]+))@'$txt$treffer,
                   
PREG_SET_ORDER);

    foreach (
$treffer as $t) {
        
$daten[$t[1]] = $t[3] ? $t[3] : $t[4];
        unset(
$noetige_teile[$t[1]]);
    }

    return 
$noetige_teile false $daten;
}
?>

Hinweis: Hinweis zur Kompatibilität
Achten Sie für die maximale Kompatibilität mit allen Clients bei den Header-Zeilen auf die richtige Schreibweise! Das Schlüsselwort "Basic" sollte genau so geschrieben werden, der Realm-String muss in doppelte (nicht einfache) Anführungszeichen gesetzt werden und in der HTTP/1.0 401-Zeile darf nur genau ein Leerzeichen vor dem 401-Code stehen. Wie im Beispiel oben zu sehen, müssen die Authentifizierungsparameter durch Kommata getrennt werden.

Anstatt PHP_AUTH_USER und PHP_AUTH_PW wie im Beispiel oben einfach nur auszugeben, werden Sie den Benutzernamen und das Passwort auf Gültigkeit überprüfen wollen. Dies kann durch abfragen einer Datenbank oder die Suche des Benutzers in einer Textdatei geschehen.

Vorsicht bei einigen Internet Explorer-Versionen - sie scheinen sehr wählerisch zu sein, was die Reihenfolge der Header angeht. Abhilfe schafft hier das Senden des WWW-Authenticate-Headers vor dem HTTP/1.0 401-Header.

Um zu unterbinden, dass ein Skript das Passwort einer durch einen traditionellen externen Mechanismus geschützten Seite ausliest, werden die PHP_AUTH Variablen ab PHP 4.3.0 nicht gesetzt, wenn eine externe Authentifizierung für diese bestimmte Seite und Safe Mode aktiviert sind. In diesem Fall kann die Variable REMOTE_USER benutzt werden, um den Benutzer durch die externe Zugriffskontrolle zu identifizieren. Es kann also $_SERVER['REMOTE_USER'] benutzt werden.

Hinweis: Konfigurationshinweis
PHP prüft das Vorhandensein einer AuthType Apache-Direktive, um zu entscheiden, ob eine externe Authentifizierung aktiv ist.

Zu beachten ist, dass obenstehendes keinesfalls jemanden, der auf dem selben Server die Kontrolle über eine nicht authentifizierte URL hat, davon abhalten kann, Passwörter von authentifizierten URLs auszulesen.

Sowohl Netscape als auch der Internet Explorer löschen den lokalen Authentifizierungscache des Browserfensters, wenn der Server eine 401-Meldung zurückgibt. Dies kann benutzt werden, um einen Benutzer "auszuloggen" und eine erneute Eingabe des Benutzernamens/Passworts zu erzwingen. Manchmal wird dieses Verhalten für das automatische Ausloggen nach Ablauf einer bestimmten Zeitspanne oder für einen Logout-Button genutzt.

Beispiel #3 HTTP-Authentifizierung, mit erneuter Anforderung von Name/Passwort

<?php
function authentifizieren() {
    
header('WWW-Authenticate: Basic realm="Test Authentication System"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
"Bitte geben Sie eine gültige Login-ID und das Passwort für den
        Zugang ein\n"
;
    exit;
}

if (!isset(
$_SERVER['PHP_AUTH_USER']) ||
    (
$_POST['Gesehen'] == &&
    
$_POST['AlteAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    
authentifizieren();
} else {
    echo 
"<p>Willkommen: {$_SERVER['PHP_AUTH_USER']}<br />";
    echo 
"Alt: {$_REQUEST['AlteAuth']}";
    echo 
"<form action='{$_SERVER['PHP_SELF']}' METHOD='post'>\n";
    echo 
"<input type='hidden' name='Gesehen' value='1' />\n";
    echo 
"<input type='hidden' name='AlteAuth'
        value='
{$_SERVER['PHP_AUTH_USER']}' />\n";
    echo 
"<input type='submit' value='Erneut Anmelden' />\n";
    echo 
"</form></p>\n";
}
?>

Dieses Verhalten wird vom Authentifizierungsstandard HTTP Basic nicht gefordert, daher sollte man sich nie darauf verlassen. Tests mit Lynx haben gezeigt, dass Lynx die Authentifizierungsinformationen bei Erhalt einer 401-Meldung nicht löscht. Solange der benötigte Berechtigungsnachweis nicht geändert wird, kann der Benutzer auf die vorhergehende Seite zurück und danach vorwärts und die angeforderte Adresse wieder öffnen. Der Benutzer kann die Authentifizierungsinformationen aber durch Drücken von '_' löschen.

Weiterhin muss beachtet werden, dass die HTTP-Authentifizierung vor PHP 4.3.3 unter dem Microsoft IIS mit der CGI-Version von PHP aufgrund einer Einschränkung des IIS nicht funktioniert. Damit sie mit PHP 4.3.3+ funktioniert, müssen Sie die "Directory Security" Ihrer IIS-Konfiguration ändern. Klicken Sie auf "Edit" und aktivieren Sie nur "Anonymous Access". Alle anderen Felder sollten deaktiviert bleiben.

Eine andere Einschränkung gibt es, falls Sie das IIS-Modul (ISAPI) und PHP 4 verwenden: Sie können nicht die PHP_AUTH_*-Variablen benutzen, aber stattdessen steht die Variable HTTP_AUTHORIZATION zur Verfügung. Schauen Sie sich dazu z.B. folgenden Code an: list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

Hinweis: IIS-Anmerkung:
Damit die HTTP-Authentifizierung mit dem IIS funktioniert, muss die PHP-Konfigurationsanweisung cgi.rfc2616_headers auf 0 (die Voreinstellung) gesetzt sein.

Hinweis: Falls safe mode aktiviert ist, wird die uid des Skripts dem realm-Teil des WWW-Authenticate-Headers hinzugefügt.



Cookies

PHP unterstützt HTTP-Cookies. Hierbei handelt es sich um einen Mechanismus, um Informationen beim Client zu speichern und somit wiederkehrende Besucher zu identifizieren oder ihren Weg innerhalb des Angebotes nachzuvollziehen. Cookies können durch die Funktionen setcookie() und setrawcookie() gesetzt werden. Sie sind Bestandteil des HTTP-Headers, was bedeutet, dass die Funktion setcookie() aufgerufen werden muss, bevor irgendeine Ausgabe an den Browser erfolgt. Dies ist die gleiche Einschränkung, der auch die Funktion header() unterliegt. Sie können die Funktionen zur Ausgabesteuerung benutzen, um die Ausgaben des Skriptes zu verzögern, bis entschieden ist, ob Cookies gesetzt bzw. Header gesendet werden sollen oder nicht.

Vom Client gesendete Cookies werden automatisch im auto-globalen Array $_COOKIE abgelegt, wenn die variables_order-Konfigurationsvariable den Kennbuchstaben "C" enthält. Sollen einem Cookie mehrere Werte zugewiesen werden, so muss dem Cookienamen lediglich [] angefügt werden.

Abhängig von Ihrer register_globals Konfiguration können Cookie-Inhalte auch in regulären Variablen abgelegt werden. Es wird aber empfohlen sich nicht hierauf zu verlassen da dies oft aus Sicherheitsgründen deaktiviert ist. In älteren PHP-Versionen stehen diese Daten in $HTTP_COOKIE_VARS gespeichert, sofern die Konfigurationsvariable track_vars gesetzt ist. (Diese Konfigurationsvariable ist seit PHP 4.0.3 immer eingeschaltet.)

Weitere Informationen sowie Anmerkungen zu Browser-Bugs finden Sie im Abschnitt setcookie() und setrawcookie().



Sessions

Sessionunterstützung in PHP besteht aus einer Möglichkeit, bestimmte Daten für nachfolgende Zugriffe aufzubewahren. Dies erlaubt es Ihnen, stärker angepasste Anwendungen zu entwickeln und den Reiz Ihrer Webseite zu erhöhen. Alle Informationen finden sich im Abschnitt mit der Session Referenz.



Mit XForms umgehen

» XForms definieren eine Variation traditioneller Webformulare, welche den Einsatz auf einer größeren Anzahl von Plattformen und Browsern oder sogar in untraditionellen Medien wie PDF Dokumenten erlauben.

Der erste große Unterschied von XForms besteht darin, wie das Formular zum Client gesendet wird. » XForms for HTML Authors enthält eine detaillierte Beschreibung davon, wie man XForms erzeugt. Für den Zweck dieser Einführung beschränken wir uns auf ein einfaches Beispiel.

Beispiel #1 Ein einfachese XForms-Suchformular

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Suche</h:title>
 <model>
  <submission action="http://example.com/search"
              method="post" xml:id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Finde</label></input>
  <submit submission="s"><label>Suche</label></submit>
 </h:p>
</h:body>
</h:html>

Das oben angegebene Formular zeigt ein Texteingabefeld (genannt q ), sowie einen Absendeknopf. Wenn der Absendeknopf geklickt wird, wird das Formular an die unter action angegebene Seite gesendet.

Hier beginnt es aus der Sicht der Webapplikation anders auszusehen. In einem normalen HTML Formular würden die Daten application/x-www-form-urlencoded gesendet, in der Welt von XForms werden diese Informationen als XML formatierte Daten gesendet.

Wenn Sie sich für die Arbeit mit XForms entscheiden, dann wollen Sie die Daten wahrscheinlich als XML; in diesem Fall schauen Sie in $HTTP_RAW_POST_DATA, wo Sie das vom Browser erzeugte XML Dokument finden werden, das Sie an Ihre bevorzugte XSLT-Engine oder Dokumentenparser weiterreichen können.

Wenn Sie nicht an der Formatierung interessiert sind und Ihre Daten in die traditionelle $_POST Variable geladen haben möchten, können Sie den Browser anweisen, die Daten als application/x-www-form-urlencoded zu senden, indem Sie das method Attribut auf urlencoded-post abändern.

Beispiel #2 XForm verwenden, um $_POST zu bestücken

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Suche</h:title>
 <model>
  <submission action="http://example.com/search"
              method="urlencoded-post" xml:id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Finde</label></input>
  <submit submission="s"><label>Suche</label></submit>
 </h:p>
</h:body>
</h:html>

Hinweis: Zum Zeitpunkt des Schreibens beherrschen viele Browser XForms nicht. Prüfen Sie Ihre Browserversion, wenn obiges Beispiel scheitert.



Steuerung von Dateiuploads

Inhaltsverzeichnis


Dateiuploads mit POST

PHP kann Dateiuploads mit jedem RFC-1867 konformen Browser (dazu gehören der Netscape Navigator 3 oder höher, Microsoft Internet Explorer 3 mit einem Patch von Microsoft oder höher ohne Patch) durchführen. Es können sowohl Text- als auch Binärdaten hochgeladen werden. Mit PHP´s Authentifizierungs- und Dateifunktionen besteht volle Kontrolle darüber, wer Dateien hochladen darf und was mit den Dateien geschehen soll, wenn der Upload beendet ist.

Hinweis: Diesbezügliche Konfigurationshinweise
Siehe auch die Anweisungen file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size und max_input_time in der php.ini

PHP unterstützt auch Dateiuploads nach der PUT-Methode, die beispielsweise vom Netscape Composer und den W3C Amaya Clients benutzt wird. Siehe dazu PUT-Unterstützung für nähere Informationen.

Eine Maske für den Dateiupload kann erstellt werden, indem man ein Formular entwirft, das ungefähr so aussieht:

Beispiel #1 Formular für den Dateiupload

<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

"_URL_" im obigen Beispiel sollte durch den URL eines PHP Skripts ersetzt werden. Das "hidden" Feld MAX_FILE_SIZE muss dem "file" Eingabefeld vorangestellt werden, der angegebene Wert bestimmt die maximale akzeptierte Dateigröße in Bytes. Es ist auch wichtig dass in ihrem Formular enctype="multipart/form-data" angegeben ist da die Dateiübertragung nur so funktioniert.

Warnung

Die maximale Dateigröße MAX_FILE_SIZE ist für den Browser nur ein Hinweis und es ist leicht diese Grenze zu umgehen. Die Änderung dieses Wertes auf der Browserseite ist relativ einfach, daher können Sie sich nicht darauf verlassen, dass die Übertragung größerer Dateien hierdurch verhindert wird. Die PHP-seitige Einstellung für die maximale Dateigröße kann dagegen nicht ausgehebelt werden. Sie sollten allerdings die MAX_FILE_SIZE Formularvariable trotzdem setzen um zu verhindern das ein Benutzer zunächst auf die Übertragung einer zu großen Datei warten muss um erst anschließend festzustellen das diese zu groß war und die Übertragung abgebrochen wurde.

Die für hochgeladene Dateien definierten Variablen sind je nach PHP Version und Konfiguration verschieden. Die Autoglobale $_FILES existiert seit PHP 4.1.0 und das Array $HTTP_POST_FILES seit PHP 4.0.0. Diese Arrays enthalten alle Informationen über Ihre hochgeladenen Dateien. Die Verwendung von $_FILES wird bevorzugt. Ist die PHP Anweisung register_globals auf on, stehen auch entsprechende Variablennamen zur Verfügung. Seit PHP » 4.2.0 steht register_globals standardmäßig auf off.

Im Folgenden sind die Inhalte von $_FILES aus unserem Beispielskript aufgelistet. Beachten Sie, dass dies auf der Annahme basiert, dass der Name des Dateiuploads wie in dem obigen Beispielskript userfile ist. Es kann aber auch jeder andere Name genutzt werden.

$_FILES['userfile']['name']

Der ursprüngliche Dateiname auf der Client Maschine.

$_FILES['userfile']['type']

Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat. Ein Beispiel wäre "image/gif".

$_FILES['userfile']['size']

Die Größe der hochgeladenen Datei in Bytes.

$_FILES['userfile']['tmp_name']

Der temporäre Dateiname, unter dem die hochgeladene Datei auf dem Server gespeichert wurde.

$_FILES['userfile']['error']

Der Fehlercode im Zusammenhang mit dem hochladen der Datei. ['error'] wurde in PHP 4.2.0 eingeführt.

Hinweis: In den Versionen vor PHP 4.1.0 war dies $HTTP_POST_FILES, und ist keine 'Autoglobale' Variable wie $_FILES. PHP 3 unterstützt $HTTP_POST_FILES nicht.

Ist register_globals in der php.ini aktiviert, stehen zusätzliche Variablen zur Verfügung. Zum Beispiel entspricht $userfile_name $_FILES['userfile']['name'], $userfile_type entspricht $_FILES['userfile']['type'], etc. Beachten Sie, dass register_globals standardmäßig deaktiviert ist, jedoch wird empfohlen, sich nicht darauf zu verlassen.

Standardmäßig werden Dateien in dem vorgegebenen temporären Verzeichnis des Servers gespeichert, außer es wurde mittels upload_tmp_dir in der php.ini ein anderer Ort konfiguriert. Das Standardverzeichnis des Servers kann durch das Setzen der Umgebungsvariablen TMPDIR in der Umgebung, in der PHP ausgeführt wird, geändert werden. Das Setzen mittels der Funktion putenv() innerhalb eines Skriptes ist nicht möglich. Mittels dieser Umgebungsvariable kann auch sichergestellt werden, dass auch andere Operationen an hochgeladenen Dateien arbeiten können.

Beispiel #2 Dateiuploads prüfen

Weitere Informationen finden Sie auch in den Beschreibungen für is_uploaded_file() und move_uploaded_file(). Das folgende Beispiel verarbeitet einen von einem HTML-Formular kommenden Dateiupload.

<?php 
// In PHP kleiner als 4.1.0 sollten Sie $HTTP_POST_FILES anstatt 
// $_FILES verwenden. In PHP kleiner als 4.0.3 verwenden Sie copy() 
// und is_uploaded_file() anstatt von move_uploaded_file()

$uploaddir '/var/www/uploads/';
$uploadfile $uploaddirbasename($_FILES['userfile']['name']);

print 
"<pre>";
if (
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    print 
"File is valid, and was successfully uploaded.";
    print 
"Here's some more debugging info:\n";
    
print_r($_FILES);
} else {
    print 
"Possible file upload attack!  Here's some debugging info:\n";
    
print_r($_FILES);
}
print 
"</pre>";

?>

Das die hochgeladene Datei empfangende Skript sollte die notwendige Logik zur Entscheidung enthalten, was mit der hochgeladenen Datei geschehen soll. Sie können zum Beispiel $_FILES['userfile']['size'] benutzen, um zu kleine bzw. zu große Dateien wegzuwerfen. Sie können $_FILES['userfile']['type'] nutzen, um Dateien eines unerwünschten Typs wegzuwerfen. Seit PHP 4.2.0 können Sie Ihre Logik auch mittels $_FILES['userfile']['error'] anhand der Fehlercodes planen. Egal welche Logik Sie verwenden, Sie sollten die Datei in dem temporären Verzeichnis entweder löschen, oder an einen anderen Ort verschieben.

Wenn im Formular keine Datei ausgewählt wurde so wird $_FILES['userfile']['size'] von PHP auf 0 gesetzt und $_FILES['userfile']['tmp_name'] ist leer.

Wurde die Datei in dem temporären Verzeichnis nicht verschoben oder umbenannt, wird sie am Ende des Requests gelöscht.



Fehlermeldungen erklärt

Seit PHP 4.2.0 gibt PHP zusammen mit dem Datei-Array entsprechende Fehlermeldungen. Die Fehlermeldung befindet sich im Segment ['error'] des Datei-Arrays, welches während des Hochladens der Datei erstellt wird. In anderen Worten kann der Fehler in $_FILES['userfile']['error'] gefunden werden.

UPLOAD_ERR_OK

Wert: 0; Es liegt kein Fehler vor, die Datei wurde erfolgreich hochgeladen.

UPLOAD_ERR_INI_SIZE

Wert: 1; Die hochgeladene Datei überschreitet die in der Anweisung upload_max_filesize in php.ini festgelegte Größe.

UPLOAD_ERR_FORM_SIZE

Wert: 2; Die hochgeladene Datei überschreitet die in dem HTML Formular mittels der Anweisung MAX_FILE_SIZE angegebene maximale Dateigröße.

UPLOAD_ERR_PARTIAL

Wert: 3; Die Datei wurde nur teilweise hochgeladen.

UPLOAD_ERR_NO_FILE

Wert: 4; Es wurde keine Datei hochgeladen.

Hinweis: Dies wurden Konstanten in PHP 4.3.0.



Häufige Probleme

Der mit MAX_FILE_SIZE eingestellte Wert kann nicht größer sein als der des ini-Parameters upload_max_filesize. Der Standardwert ist 2 Megabyte.

Ist memory limit aktiviert, könnte eine Erhöhung von memory_limit nötig sein. Stellen Sie sicher, dass der Wert von memory_limit groß genug ist.

Wenn max_execution_time zu kurz konfiguriert ist, könnte das Skript den Wert überschritten haben. Stellen Sie sicher, dass der Wert von max_execution_time groß genug ist.

Hinweis: max_execution_time beschränkt nur die Ausführungszeit des Skripts selbst. Jegliche Zeit die auf Dinge entfällt die außerhalb des Skripts selbst stattfinden, wie z.B. Systemaufrufe über die system() Funktion, sleep(), Datenbankabfragen und die für das Hochladen von Dateien benötigte Zeit werden bei der Bestimmung der Ausführungszeit nicht mit einbezogen.

Warnung

max_input_time legt die maximale Zeit in Sekunden fest während der es einem Skript gestattet ist Eingaben zu empfangen. Diese beinhaltet auch die für das Hochladen von Dateien benötigte Zeit. Werden viele oder große Dateien übertragen oder ist die Verbindung zum Benutzer langsam so kann die Standardeinstellung von 60 Sekunden überschritten werden.

Ist post_max_size zu klein konfiguriert, können große Dateien nicht hochgeladen werden. Stellen Sie sicher, dass der Wert von post_max_size groß genug ist.

Nicht zu prüfen an welcher Datei Sie arbeiten kann bedeuten, dass Benutzer auf sensible Informationen in anderen Verzeichnissen Zugriff erhalten.

Beachten Sie, dass CERN httpd in dem vom Client erhaltenen Content-Type Mime Header alles nach dem ersten Whitespace wegzuschneiden scheint. Solange dies der Fall ist, unterstützt CERN httpd keine Dateiuploads.

Aufgrund der vielen möglichen Arten der Darstellung von Verzeichnissen können wir nicht garantieren, dass Dateien mit exotischen Namen (wie z.B. mit enthaltenen Leerzeichen) auch wirklich richtig verarbeitet werden.

Es ist nicht möglich für normale Formularfelder und Dateifelder die gleiche Formularvariable (wie z.B. foo[]) zu nutzen.



Upload mehrerer Dateien

Mehrere Dateien können hochgeladen werden, indem Sie verschiedene Namen name für input verwenden.

Es ist ebenfalls möglich, mehrere Dateien simultan hochzuladen, und die Informationen automatisch in Arrays zu erhalten. Um dies zu tun, verwenden Sie in dem HTML Formular die gleiche Array-Sende-Syntax wie bei Auswahllisten mit Mehrfachauswahl und Checkboxen:

Hinweis: Die Unterstützung für den Upload von mehreren Dateien wurde in PHP 3.0.10 hinzugefügt.

Beispiel #1 Upload mehrerer Dateien

<form action="file-upload.php" method="POST" enctype="multipart/form-data">
  Send these files:<br>
  <input name="userfile[]" type="file"><br>
  <input name="userfile[]" type="file"><br>
  <input type="submit" value="Send files">
</form>

Wenn das obige Formular übermittelt ist, werden die Arrays $_FILES['userfile'], $_FILES['userfile']['name'] und $_FILES['userfile']['size'] initialisiert (wie auch in $HTTP_POST_FILES vor PHP Version 4.1.0.). Ist register_globals aktiviert, werden auch globale Variablen für die hochgeladenen Dateien initialisiert. Jedes von ihnen ist ein numerisch indiziertes Array mit den entsprechenden Werten für die hochgeladenen Dateien.

Nehmen wir zum Beispiel an, dass die Dateinamen /home/test/review.html und /home/test/xwp.out übermittelt wurden. In diesem Fall würde $_FILES['userfile']['name'][0] review.html enthalten, und $_FILES['userfile']['name'][1] hätte den Wert xwp.out. Genauso würde $_FILES['userfile']['size'][0] die Dateigröße von review.html enthalten, usw.

$_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0] und $_FILES['userfile']['type'][0] sind ebenfalls gesetzt.



PUT-Unterstützung

Die Unterstützung der PUT-Methode hat sich zwischen PHP 3 und PHP 4 geändert. In PHP 4 sollten Sie den Standard Input-Datenstrom benutzen, um die Inhalte eines HTTP PUT zu lesen.

Beispiel #1 Speichern von HTTP PUT Dateien mit PHP 4

<?php
/* PUT Daten kommen in den stdin Stream */
$putdata fopen("php://stdin","r");

/* Eine Datei zum Schreiben öffnen */
$fp fopen("myputfile.ext","w");

/* Jeweils 1kB Daten lesen und
   in die Datei schreiben */
while ($data fread($putdata,1024))
  
fwrite($fp,$data);

/* Die Streams schließen */
fclose($fp);
fclose($putdata);
?>

Hinweis: Sämtliche untenstehende Dokumentation betrifft nur PHP 3.

PHP unterstützt die HTTP PUT-Methode, wie sie von Clients wie Netscape Composer oder W3C Amaya benutzt wird. PUT-Anfragen sind weitaus unkomplizierter als ein Dateiupload und sehen etwa so aus:


PUT /path/filename.html HTTP/1.1

Das würde normalerweise bedeuten, dass der entfernte Client den folgenden Inhalt als /path/filename.html im Webverzeichnisbaum speichert. Natürlich ist es keine gute Idee, dass PHP oder Apache jeden Benutzer beliebige Dateien überschreiben lassen. Um eine solche Anfrage bearbeiten zu können, muss der Webserver erst angewiesen werden, ein bestimmtes PHP-Skript für die Abarbeitung aufzurufen. Im Apache wird dies durch die Script - Direktive festgelegt. Sie kann fast überall in der Apache-Konfigurationsdatei platziert werden, gebräuchlich ist die Platzierung innerhalb einer <Directory>- oder <Virtualhost>- Sektion. Eine Zeile wie die folgende erledigt dies:


Script PUT /put.php

Diese Zeile legt fest, dass Apache alle PUT-Anfragen für URIs, die dem Kontext entsprechen, in dem diese Zeile steht, an das put.php Skript weiterleitet. Dies setzt natürlich voraus, dass PHP aktiv und für die .php-Dateierweiterung registriert ist.

Innerhalb der put.php-Datei könnte folgendes stehen:

<?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>

Dies kopiert die Datei an den vom Client angegebenen Ort. Möglicherweise sollen vor dem Kopieren der Datei noch Überprüfungen und/oder Benutzerauthentifizierung stattfinden. Wenn PHP eine PUT-Anfrage erhält, wird die Datei genau wie bei der POST-Methode in einem temporären Verzeichnis gespeichert. Nach dem Abarbeiten der Anfrage wird die temporäre Datei gelöscht. Also muss das PHP-Skript, das die PUT-Anfrage bearbeitet, die Datei irgendwohin kopieren. Der Name der temporären Datei findet sich in der Variablen $PHP_PUT_FILENAME; der Name der zu speichernden Datei steht in $REQUEST_URI (kann bei Nicht-Apache Webservern variieren). Dieser Zieldateiname wird vom Client festgelegt. Man kann den Client auch umgehen; beispielsweise könnten alle hochgeladenen Dateien in ein spezielles Upload-Directory kopiert werden.




Zugriff auf entfernte Dateien

Wenn allow_url_fopen in der php.ini aktiviert ist, können HTTP- und FTP-URLs bei den meisten Funktionen verwendet werden, die einen Dateinamen als Parameter benötigen. Darüber hinaus können URLs in include()-, include_once()-, require()- und require_once()-Anweisungen verwendet werden (ab PHP 5.2.0 muss dafür allow_url_include aktiviert sein). Weitere Informationen zu den Protokollen, die von PHP unterstützt werden, finden Sie im Abschnitt List of Supported Protocols/Wrappers.

Hinweis: Bis einschließlich PHP 4.0.3 muss PHP mit der Option --enable-url-fopen-wrapper konfiguriert worden sein, damit die URL-Wrapper verwendet werden können.

Hinweis: Vor PHP 4.3 war mit folgenden Funktionen der Windows-Versionen von PHP kein Zugriff auf entfernte Dateien möglich: include(), include_once(), require(), require_once() und die imagecreatefromXXX-Funktionen der Image-Funktionen-Erweiterung.

Beispielsweise kann damit eine Datei auf einem anderen Webserver geöffnet und nach benötigten Daten analysiert werden. Diese Daten können zur Abfrage einer Datenbank benutzt werden oder passend zum Rest der eigenen Website ausgegeben werden.

Beispiel #1 Den Titel einer entfernten Seite auslesen

<?php
$datei 
fopen ("http://www.example.com/""r");
if (!
$datei) {
    echo 
"<p>Datei konnte nicht geöffnet werden.\n";
    exit;
}
while (!
feof ($datei)) {
    
$zeile fgets ($datei1024);
    
/* Funktioniert nur, wenn Titel und title-Tags in einer Zeile stehen */
    
if (preg_match ("@\<title\>(.*)\</title\>@i"$zeile$treffer)) {
        
$title $treffer[1];
        break;
    }
}
fclose($datei);
?>

Auch eine Datei auf einem FTP-Server kann geschrieben werden, vorausgesetzt man ist als Benutzer mit entsprechenden Zugriffsrechten angemeldet. Auf diesem Weg können nur neue Dateien angelegt werden. Falls Sie versuchen eine schon existierende Datei zu überschreiben, wird der fopen()-Aufruf fehlschlagen.

Um sich statt als 'anonymous' als anderer Benutzer anzumelden, muss ein Benutzername (und möglicherweise ein Passwort) innerhalb der URL angegeben werden, wie z.B. 'ftp://benutzer:passwort@ftp.example.com/pfad/zur/datei'. Die selbe Syntax kann verwendet werden, um auf Dateien via HTTP zuzugreifen, wenn diese eine Basic-Authentifizierung benötigen.

Beispiel #2 Daten auf einen entfernten Server speichern

<?php
$datei 
fopen ("ftp://ftp.example.com/incoming/outputfile""w");
if (!
$datei) {
    echo 
"<p>Datei konnte nicht zum schreiben geöffnet werden.\n";
    exit;
}
/* Schreibe die Daten hier hin. */
fputs ($datei$_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($datei);
?>

Hinweis: Obiges Beispiel könnte dazu verleiten, dieses Verfahren zu benutzen, um in eine entfernte Log-Datei zu schreiben. Das würde aber leider nicht funktionieren, weil der fopen()-Aufruf fehlschlagen würde, wenn die entfernte Datei bereits existiert. Für eine dezentralisierte Protokollierung sollten Sie sich die Funktion syslog() anschauen.



Verbindungssteuerung

PHP erhält intern einen Verbindungsstatus. Dieser kann drei Zustände annehmen:

  • 0 - NORMAL
  • 1 - ABORTED
  • 2 - TIMEOUT

Wenn ein PHP-Skript aktiv ist, ist der Status üblicherweise NORMAL. Sollte der Client-Rechner die Verbindung beenden, wird der Status auf ABORTED gesetzt. Ein clientseitiges Beenden der Verbindung wird für gewöhnlich veranlasst, wenn der Benutzer den STOP-Button seines Browsers drückt. Wenn das eingestellte Zeitlimit (siehe set_time_limit()) überschritten wird, wird der Status TIMEOUT gesetzt.

Sie können entscheiden, ob der Verbindungsabbruch seitens des Clients den Abbruch des Skriptes zur Folge haben soll. Manchmal ist es sinnvoll, Skripte sauber zu beenden, auch wenn kein Browser mehr zur Verfügung steht, der die Ausgabe empfängt. Die Abarbeitung eines Skriptes wird standardmäßig abgebrochen, wenn der Client die Verbindung beendet. Dieses Verhalten kann sowohl durch die Option ignore_user_abort in der Konfigurationsdatei php.ini, durch die entsprechende Option php_value ignore_user_abort in der Apache-Konfigurationsdatei httpd.conf als auch durch ignore_user_abort() beeinflußt werden. Wenn PHP nicht angewiesen wird, einen Verbindungsabbruch durch den Benutzer zu ignorieren und die Verbindung dann durch den Benutzer beendet wird, wird die Abarbeitung des Scriptes abgebrochen. Die einzige Ausnahme ist, wenn durch die Funktion register_shutdown_function() eine Shutdown-Funktion angegeben wird, die bei clientseitigem Abbruch ausgeführt wird. Wenn dann der Benutzer den STOP-Button seines Browsers drückt, wird PHP bei der nächsten Ausgabe des Skriptes feststellen, dass die Verbindung abgebrochen wurde und die Shutdown-Funktion aufrufen. Diese Shutdown-Funktion wird auch aufgerufen, wenn das Skript auf normalem Wege beendet wird, daher sollte man, wenn man für den Fall eines Benutzerabbruchs etwas anderes vorgesehen hat, die Funktion connection_aborted() verwenden. Sie gibt TRUE zurück, wenn die Verbindung abgebrochen wurde.

Ein Skript kann ebenfalls durch den eingebauten Script-Timer beendet werden. Der Standard-Timeout beträgt 30 Sekunden. Er kann durch die Option max_execution_time in der php.ini, durch den entsprechenden Eintrag php_value max_execution_time in der Apache-Konfigurationsdatei httpd.conf oder durch die Funktion set_time_limit() beeinflußt werden. Bei Zeitüberschreitung wird das Skript beendet und, genau wie im obigen Fall des Verbindungsabbruchs, eine registrierte Shutdown-Funktion ausgeführt. Um zu überprüfen, ob es sich um einen Abbruch aufgrund von Zeitüberschreitung handelt, kann die Funktion connection_status() benutzt werden. Sie gibt 2 zurück, wenn es sich um eine Zeitüberschreitung handelt.

Zu bemerken ist, dass der ABORTED- und der TIMEOUT-Status gleichzeitig auftreten können. Dies ist möglich, wenn PHP angewiesen wird, Benutzerabbrüche zu ignorieren. PHP wird feststellen, dass der Benutzer die Verbindung abgebrochen hat, das Skript allerdings läuft weiter. Sollte es dann das Zeitlimit erreichen, wird es abgebrochen und eine Shutdown-Funktion, wenn definiert, wird aufgerufen. Zu diesem Zeitpunkt kann man feststellen, dass connection_timeout() und connection_aborted() TRUE zurückgeben. Diese beiden Statusmöglichkeiten können auch durch einen Aufruf der Funktion connection_status() abgefragt werden. Sie liefert ein Bitfeld des aktiven Status. Wenn beispielsweise TIMEOUT und ABORTED aktiv sind, wird 3 zurückgegeben.



Persistente Datenbankverbindungen

Persistente Verbindungen sind Verbindungen, die nach Abarbeitung des Skriptes nicht geschlossen werden. Wenn eine persistente Verbindung angefordert wird, prüft PHP zuerst, ob bereits eine identische persistente Verbindung (die vielleicht vorher offen geblieben ist) existiert und benutzt sie in diesem Fall. Sollte keine Verbindung existieren, wird eine hergestellt. Eine 'identische' Verbindung ist eine Verbindung, die zu dem gleichen Host mit dem gleichen Usernamen und Passwort hergestellt wurde.

Wer nicht durchgängig mit der Art und Weise vertraut ist, wie Webserver arbeiten und die Last verteilen, könnte missverstehen, wofür persistente Verbindungen gedacht sind. Im Besonderen bieten sie keine Möglichkeit, 'Benutzersitzungen' über die gleiche Verbindung zu öffnen und keine Möglichkeit, eine Transaktion effizient aufzubauen, und sie können auch viele andere Dinge nicht. Um absolute Klarheit zu schaffen: Persistente Verbindungen bieten keine Funktionalität, die nicht auch von nicht-persistenten Verbindungen bereitgestellt wird.

Warum?

Das hat mit der Arbeitsweise von Webservern zu tun. Es gibt drei Möglichkeiten, wie ein Webserver PHP zur Generierung von Webseiten einsetzen kann.

Die erste Methode ist, PHP als CGI-'Wrapper' zu benutzen. Wenn diese Methode eingesetzt wird, wird für jede Anfrage nach einer PHP-Seite vom Webserver eine Instanz des PHP- Interpreters gestartet und anschließend wieder beendet. Durch die Beendigung des Interpreters nach abgeschlossener Anfrage werden alle Ressourcen, auf die zugegriffen wurde (wie beispielsweise eine Verbindung zu einem SQL- Datenbankserver) wieder geschlossen. In diesem Fall erreicht man nichts, wenn man persistente Verbindungen benutzt - sie sind eben nicht beständig.

Die zweite und populärste Methode ist der Einsatz von PHP als Modul in einem Multiprozess-Webserver, was momentan nur auf den Apache zutrifft. Typischerweise hat ein Multiprozess-Webserver einen Prozess (den 'Eltern' Prozess), der einen Satz weiterer Prozesse (die 'Kinder') koordiniert, welche die eigentliche Arbeit des Bereitstellens der Seiten übernehmen. Jede Anfrage, die von einem Client erfolgt, wird an einen untergeordneten Prozess, der noch keine andere Anfrage bearbeitet, weitergereicht. Das bedeutet, dass eine zweite Anfrage des gleichen Clients an den Server unter Umständen von einem anderen untergeordneten Prozess als die erste Anfrage bearbeitet wird. Wurde eine persistente Verbindung einmal geöffnet kann jede danach folgenge Seite innerhalb des gleichen Prozesses diese bereits zum Server bestehende Verbindung weiter verwenden.

Die letzte Methode ist, PHP als Plug-in für einen Multithread- Webserver zu benutzen. Derzeit bietet PHP 4 Unterstützung für ISAPI, WSAPI und NSAPI (unter Windows), wodurch die Nutzung von PHP mit Multithread-Serven wie Netscape Fast Track (iPlanet), Microsoft Internet Information Server (IIS) und O'Reilly's WebSite Pro ermöglicht wird. Das Verhalten entspricht im wesentlichen dem oben beschriebenen Multiprozess-Modell.

Wozu dienen persistente Verbindungen, wenn sie keine zusätzliche Funktionalität bieten?

Die Antwort ist außerordentlich einfach: Effizienz. Persistente Verbindungen sind nützlich, wenn der Aufwand für das Herstellen einer Verbindung zu einem SQL-Server hoch ist. Ob dies der Fall ist oder nicht, hängt von vielen Faktoren ab - zum Beispiel, um welche Datenbank es sich handelt, ob sie auf dem gleichen Rechner wie der Webserver läuft oder welche Last die SQL-Maschine zu bewältigen hat usw. Grundsätzlich gilt, dass, wenn viele Verbindungen hergestellt werden müssen, persistente Verbindungen außerordentlich hilfreich sind. Sie veranlassen den untergeordneten Prozess, sich während seiner gesamten Lebensdauer lediglich einmal mit dem SQL-Server zu verbinden, anstatt bei jedem Aufruf einer Seite, die eine Verbindung benötigt. Das heißt, dass jeder untergeordnete Prozess, der eine persistente Verbindung öffnet, seine eigene dauerhafte Verbindung zum Server hat. Bei 20 untergeordneten Prozessen, die ein Skript ausführen, das eine persistente Verbindung zum SQL-Server herstellt, hat man beispielsweise 20 verschiedene Verbindungen zum SQL-Server - eine für jeden untergeordneten Prozess.

Beachten Sie jedoch, dass dies auch ein paar Nachteile haben kann, wenn Sie eine Datenbank mit limitierten Verbindungen benutzen, welche durch persistente Verbindungen überschritten werden. Wenn Ihre Datenbank ein Limit von 16 gleichzeitigen Verbindungen hat, und aufgrund einer stark ausgelasteten Server-Session 17 Kind-Prozesse versuchen, eine Verbindung herzustellen, wird es einem nicht gelingen. Sollten in Ihren Skripten Fehler bestehen, welche das Schließen der Verbindungen nicht erlauben (wie z.B. Endlosschleifen), kann das eine Datenbank mit mit nur 16 Verbindungen sehr schnell überschwemmen. Konsultieren Sie die Dokumentation Ihrer Datenbank bezüglich der Behandlung von aufgegebenen Verbindungen oder Verbindungen im Leerlauf.

Warnung

Sie sollten sich zur Vorsicht noch ein paar Gedanken machen, wenn Sie persistente Verbindungen benutzen. Einer ist, wenn Sie über eine persistente Verbindung Tabellen sperren und das Skript diese Sperre aus welchem Grund auch immer nicht mehr aufheben kann, nachfolgende Skripte, welche die selbe Verbindung benutzen, blockieren und den Neustart von entweder dem Webserver oder dem Datenbankserver verlangen. Ein weiterer ist, dass wenn Sie Transaktionen benutzen, ein Transaktionsblock zu dem nächsten die Verbindung nutzenden Skript übertragen wird, wenn die Ausführung des Skriptes vor dem Transaktionsblock gestoppt wird. In jedem Fall können Sie register_shutdown_function() benutzen, um eine einfache Funktion zu registrieren, welche Ihre Tabellen wieder entsperrt, oder Ihre Transaktionen zurückstellt. Besser ist es, wenn Sie dieses Problem gänzlich vermeiden, indem keine persistenten Verbindungen in Skripten benutzen, welche Tabellen sperren oder Transaktionen verwenden (Sie können sie immer noch anderswo benutzen).

Eine wichtige Zusammenfassung. Persistente Verbindungen wurden entwickelt, um eins-zu-eins Abbildungen auf reguläre Verbindungen zu haben. Das heißt, dass man immer in der Lage sein sollte, die persistenten Verbindungen durch nicht-persistente zu ersetzten, ohne dass dies den Skriptablauf verändert. Es kann (und wird vermutlich auch) die Effizienz des Skriptes beeinflussen, aber nicht dessen Verhalten.

Siehe auch fbsql_pconnect(), ibase_pconnect(), ifx_pconnect(), msql_pconnect(), mssql_pconnect(), mysql_pconnect(), ociplogon(), odbc_pconnect(), ora_plogon(), pfsockopen(), pg_pconnect() und sybase_pconnect().



Safe Mode

Inhaltsverzeichnis

The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren't very realistic, many people, especially ISP's, use safe mode for now.

Warnung

Safe Mode is deprecated in PHP 5.3.0 and is removed in PHP 6.0.0.


Security and Safe Mode

Security and Safe Mode Configuration Directives
Name Default Changeable Changelog
safe_mode "0" PHP_INI_SYSTEM Removed in PHP 6.0.0.
safe_mode_gid "0" PHP_INI_SYSTEM Available since PHP 4.1.0. Removed in PHP 6.0.0.
safe_mode_include_dir NULL PHP_INI_SYSTEM Available since PHP 4.1.0. Removed in PHP 6.0.0.
safe_mode_exec_dir "" PHP_INI_SYSTEM Removed in PHP 6.0.0.
safe_mode_allowed_env_vars "PHP_" PHP_INI_SYSTEM Removed in PHP 6.0.0.
safe_mode_protected_env_vars "LD_LIBRARY_PATH" PHP_INI_SYSTEM Removed in PHP 6.0.0.
open_basedir NULL PHP_INI_ALL PHP_INI_SYSTEM in PHP < 5.3.0
disable_functions "" php.ini only Available since PHP 4.0.1.
disable_classes "" php.ini only Available since PHP 4.3.2.

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

safe_mode boolean

Whether to enable PHP's safe mode. If PHP is compiled with --enable-safe-mode then defaults to On, otherwise Off.

Warnung

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.

safe_mode_gid boolean

By default, Safe Mode does a UID compare check when opening files. If you want to relax this to a GID compare, then turn on safe_mode_gid. Whether to use UID (FALSE) or GID (TRUE) checking upon file access.

safe_mode_include_dir string

UID/GID checks are bypassed when including files from this directory and its subdirectories (directory must also be in include_path or full path must including).

As of PHP 4.2.0, this directive can take a colon (semi-colon on Windows) separated path in a fashion similar to the include_path directive, rather than just a single directory. The restriction specified is actually a prefix, not a directory name. This means that "safe_mode_include_dir = /dir/incl" also allows access to "/dir/include" and "/dir/incls" if they exist. When you want to restrict access to only the specified directory, end with a slash. For example: "safe_mode_include_dir = /dir/incl/" If the value of this directive is empty, no files with different UID/GID can be included in PHP 4.2.3 and as of PHP 4.3.3. In earlier versions, all files could be included.
safe_mode_exec_dir string

If PHP is used in safe mode, system() and the other functions executing system programs refuse to start programs that are not in this directory. You have to use / as directory separator on all environments including Windows.

safe_mode_allowed_env_vars string

Setting certain environment variables may be a potential security breach. This directive contains a comma-delimited list of prefixes. In Safe Mode, the user may only alter environment variables whose names begin with the prefixes supplied here. By default, users will only be able to set environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).

Hinweis: If this directive is empty, PHP will let the user modify ANY environment variable!

safe_mode_protected_env_vars string

This directive contains a comma-delimited list of environment variables that the end user won't be able to change using putenv(). These variables will be protected even if safe_mode_allowed_env_vars is set to allow to change them.

open_basedir string

Limit the files that can be opened by PHP to the specified directory-tree, including the file itself. This directive is NOT affected by whether Safe Mode is turned On or Off.

When a script tries to open a file with, for example, fopen() or gzopen(), the location of the file is checked. When the file is outside the specified directory-tree, PHP will refuse to open it. All symbolic links are resolved, so it's not possible to avoid this restriction with a symlink. If the file doesn't exist then the symlink couldn't be resolved and the filename is compared to (a resolved) open_basedir.

The special value . indicates that the working directory of the script will be used as the base-directory. This is, however, a little dangerous as the working directory of the script can easily be changed with chdir().

In httpd.conf, open_basedir can be turned off (e.g. for some virtual hosts) the same way as any other configuration directive with "php_admin_value open_basedir none".

Under Windows, separate the directories with a semicolon. On all other systems, separate the directories with a colon. As an Apache module, open_basedir paths from parent directories are now automatically inherited.

The restriction specified with open_basedir is actually a prefix, not a directory name. This means that "open_basedir = /dir/incl" also allows access to "/dir/include" and "/dir/incls" if they exist. When you want to restrict access to only the specified directory, end with a slash. For example: open_basedir = /dir/incl/

The default is to allow all files to be opened.

Hinweis: As of PHP 5.3.0 open_basedir can be tightened at run-time. This means that if open_basedir is set to /www/ in php.ini a script can tighten the configuration to /www/tmp/ at run-time with ini_set()

disable_functions string
This directive allows you to disable certain functions for security reasons. It takes on a comma-delimited list of function names. disable_functions is not affected by Safe Mode. This directive must be set in php.ini For example, you cannot set this in httpd.conf.
disable_classes string
This directive allows you to disable certain classes for security reasons. It takes on a comma-delimited list of class names. disable_classes is not affected by Safe Mode. This directive must be set in php.ini For example, you cannot set this in httpd.conf.

Hinweis: Availability note
This directive became available in PHP 4.3.2

See also: register_globals, display_errors, and log_errors.

When safe_mode is on, PHP checks to see if the owner of the current script matches the owner of the file to be operated on by a file function or its directory. For example:

-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 script.php 
-rw-r--r--    1 root     root       1116 May 26 18:01 /etc/passwd

Running script.php:

<?php
 readfile
('/etc/passwd'); 
?>

results in this error when safe mode is enabled:

Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not 
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2

However, there may be environments where a strict UID check is not appropriate and a relaxed GID check is sufficient. This is supported by means of the safe_mode_gid switch. Setting it to On performs the relaxed GID checking, setting it to Off (the default) performs UID checking.

If instead of safe_mode, you set an open_basedir directory then all file operations will be limited to files under the specified directory. For example (Apache httpd.conf example):

<Directory /docroot>
  php_admin_value open_basedir /docroot 
</Directory>

If you run the same script.php with this open_basedir setting then this is the result:

Warning: open_basedir restriction in effect. File is in wrong directory in 
/docroot/script.php on line 2 

You can also disable individual functions. Note that the disable_functions directive can not be used outside of the php.ini file which means that you cannot disable functions on a per-virtualhost or per-directory basis in your httpd.conf file. If we add this to our php.ini file:

disable_functions = readfile,system

Then we get this output:

Warning: readfile() has been disabled for security reasons in 
/docroot/script.php on line 2 

Warnung

These PHP restrictions are not valid in executed binaries, of course.



Functions restricted/disabled by safe mode

This is a still probably incomplete and possibly incorrect listing of the functions limited by safe mode.

Safe mode limited functions
Function Limitations
dbmopen() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
dbase_open() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
filepro() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
filepro_rowcount() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
filepro_retrieve() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
ifx_* sql_safe_mode restrictions, (!= safe mode)
ingres_* sql_safe_mode restrictions, (!= safe mode)
mysql_* sql_safe_mode restrictions, (!= safe mode)
pg_lo_import() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
posix_mkfifo() Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.
putenv() Obeys the safe_mode_protected_env_vars and safe_mode_allowed_env_vars ini-directives. See also the documentation on putenv()
move_uploaded_file() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
chdir() Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.
dl() Diese Funktion steht im Safe Mode nicht zur Verfügung.
backtick operator Diese Funktion steht im Safe Mode nicht zur Verfügung.
shell_exec() (functional equivalent of backticks) Diese Funktion steht im Safe Mode nicht zur Verfügung.
exec() You can only execute executables within the safe_mode_exec_dir. For practical reasons it's currently not allowed to have .. components in the path to the executable. escapeshellcmd() is executed on the argument of this function.
system() You can only execute executables within the safe_mode_exec_dir. For practical reasons it's currently not allowed to have .. components in the path to the executable. escapeshellcmd() is executed on the argument of this function.
passthru() You can only execute executables within the safe_mode_exec_dir. For practical reasons it's currently not allowed to have .. components in the path to the executable. escapeshellcmd() is executed on the argument of this function.
popen() You can only execute executables within the safe_mode_exec_dir. For practical reasons it's currently not allowed to have .. components in the path to the executable. escapeshellcmd() is executed on the argument of this function.
fopen() Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.
mkdir() Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.
rmdir() Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.
rename() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.
unlink() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.
copy() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst. (on source and target )
chgrp() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
chown() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
chmod() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. In addition, you cannot set the SUID, SGID and sticky bits
touch() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.
symlink() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst. (note: only the target is checked)
link() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst. (note: only the target is checked)
apache_request_headers() In safe mode, headers beginning with authorization (case-insensitive) will not be returned.
header() In safe mode, the uid of the script is added to the realm part of the WWW-Authenticate header if you set this header (used for HTTP Authentication).
PHP_AUTH variables In safe mode, the variables PHP_AUTH_USER, PHP_AUTH_PW, and AUTH_TYPE are not available in $_SERVER. Regardless, you can still use REMOTE_USER for the USER. (note: only affected since PHP 4.3.0)
highlight_file(), show_source() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst. (note: only affected since PHP 4.2.1)
parse_ini_file() Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst. (note: only affected since PHP 4.2.1)
set_time_limit() Has no effect when PHP is running in Safe Mode.
max_execution_time Has no effect when PHP is running in Safe Mode.
mail() In safe mode, the fifth parameter is disabled. (note: only affected since PHP 4.2.3)
session_start() The owner of a script must be the same as owner of a session.save_path directory if the default files session.save_handler is used.
All filesystem and stream functions. Überprüft ob die Dateien/Verzeichnisse, die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst. Überprüft, ob das Verzeichnis, in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst. (see the safe_mode_include_dir php.ini option.




PHP auf der Kommandozeile

Seit Version 4.3.0 unterstützt PHP einen neuen Typ SAPI (Server Application Programming Interface) namens CLI (Command Line Interface). Wie der Name schon verrät, liegt das Hauptaugemerk dieses SAPI-Typs auf der Entwicklung von Anwendungen für die Kommandozeile (und auch den Desktop) mit PHP. Es gibt etliche Unterschiede zwischen dem CLI SAPI und anderen SAPIs, die in diesem Kapitel beschrieben werden. Es ist erwähnenswert, dass CLI und CGI verschiedene SAPIs sind, obwohl sie viele Verhaltensweisen teilen.

Das CLI SAPI wurde zum ersten Mal mit PHP 4.2.0 eingeführt, war aber noch experimentell und musste explizit mit --enable-cli beim ./configure-Aufruf eingeschaltet werden. Seit PHP 4.3.0 ist das CLI SAPI nicht länger experimentell und die Option --enable-cli standardmäßig auf aktiviert. Sie können --disable-cli benutzen, um es auszuschalten.

Von PHP 4.3.0 an werden Namen, Pfade und Vorhandensein der CLI/CGI-Binaries voneinander abweichen, abhängig davon, wie PHP auf Ihrem System installiert ist. Standarmäßig werden nach dem Aufruf von make sowohl CGI als auch CLI kompiliert und als sapi/cgi/php-cgi beziehungsweise sapi/cli/php in Ihrem PHP-Quellcodeverzeichnis hinterlegt. Sie werden bemerken, dass beide php heissen. Was während make install passiert, hängt von Ihrem configure-Kommando ab. Wenn ein Modul-SAPI während configure gewählt wird, wie etwa apxs oder wenn die --disable-cgi-Option benutzt wird, wird das CLI während make install nach {PREFIX}/bin/php kopiert, ansonsten wird das CGI dort hinterlegt. Also wird, wenn beispielsweise --with--apxs in Ihrem configure-Kommando auftaucht, das CLI während make install nach {PREFIX}/bin/php kopiert. Wenn Sie die Installation des CGI-Binaries außer Kraft setzen wollen, benutzen Sie make install-cli nach make install. Alternativ können Sie --disable-cgi in Ihrem configure-Kommando angeben.

Hinweis: Weil sowohl --enable-cli als auch --enable-cgi standardmäßig eingeschaltet sind, muss --enable-cli in Ihrem configure-Kommando nicht zwingend bedeuten, dass das CLI während make install nach {PREFIX}/bin/php kopiert wird.

Die Windows-Pakete zwischen PHP 4.2.0 und PHP 4.2.3 enthielten das CLI als php-cli.exe, beheimatet im selben Verzeichnis wie das CGI php.exe. Beginnend mit PHP 4.3.0 enthält das Windows-Paket das CLI als php.exe in einem eigenen Verzeichnis namens cli, also cli/php.exe. Beginnend mit PHP 5 wird das CLI im Hauptordner als php.exe ausgeliefert. Die CGI-Version heisst php-cgi.exe.

Seit PHP 5 gibt es eine neue Datei, php-win.exe. Diese ist identisch mit der CLI-Version, die einzige Ausnahme besteht darin, dass php-win nichts ausgibt und somit keine Konsole bietet. (Es erscheint keine "MS-DOS-Eingabeaufforderung".) Dieses Verhalten ist ähnlich php-gtk. Sie sollten die folgende Option für ./configure benutzen: --enable-cli-win32.

Hinweis: Welche SAPI habe ich?
Auf der Kommandozeile wird Ihnen die Eingabe von php -v verraten, ob Sie php als CGI oder CLI einsetzen. Sehen Sie sich auch die Funktion php_sapi_name() und die Konstante PHP_SAPI an.

Hinweis: Eine UNIX manual page wurde in PHP 4.3.2 hinzugefügt. Sie können sie ansehen, indem sie man php auf der Kommandozeile eintippen.

Beachtenswerte Unterschiede des CLI SAPI verglichen mit anderen SAPIs:

  • Anders als beim CGI SAPI werden keine Header auf der Standardausgabe ausgegeben.

    Obwohl das CGI SAPI einen Weg bietet, HTTP-Header zu unterdrücken, gibt es keine gleichwertige Option, sie im CLI SAPI anzuzeigen.

    CLI wird standardmäßig im stillen Modus gestartet, dennoch gibt es die Optionen -q und --no-header aus Kompatibilitätsgründen noch, so dass Sie auch ältere CGI-Skripte noch benutzen können.

    Es verändert das Arbeitsverzeichnis nicht zu dem des Skriptes. (Die Optionen -C und --no-chdir wurden aus Kompatibilitätsgründen beibehalten.)

    Fehlermeldungen in Plaintext (keine HTML-Formatierung).

  • Es gibt bestimmte php.ini-Direktiven, die vom CLI SAPI außer Kraft gesetzt werden, weil sie in einer Kommandozeilenumgebung keinen Sinn ergeben.

    Überschriebene php.ini-Direktiven
    Direktive CLI SAPI-Standardwert Kommentar
    html_errors FALSE Es kann sehr schwierig sein, eine Fehlermeldung auf der Kommandozeile zu lesen, wenn sie mit all diesen bedeutungslosen HTML-Tags vollgestopft ist, deswegen wird diese Direktive auf FALSE gesetzt.
    implicit_flush TRUE Es ist erwünscht, dass alle Ausgaben, die von print(), echo() und Konsorten kommen, sofort auf die Ausgabe geschrieben werden und nicht in irgendeinem Puffer gecacht werden. Sie können immer noch output buffering benutzen, wenn Sie die Standardausgabe aufschieben oder manipulieren wollen.
    max_execution_time 0 (unlimited) Wegen der unendlichen Möglichkeiten, PHP in Kommandozeilenumgebungen zu benutzen wurde die maximale Ausführungszeit auf unbegrenzte Zeit eingestellt. Wohingegen Anwendungen, die für das Web geschrieben wurden, oft in sehr kurzer Zeit ausgeführt werden, neigen Anwendungen für die Kommandozeile dazu, eine viel längere Ausführungszeit zu beanspruchen.
    register_argc_argv TRUE

    Weil diese Einstellung auf TRUE gesetzt ist, werden Sie immer Zugriff auf argc (Anzahl der Argumente, die der Anwendung übergeben wurden) und argv (Array der eigentlichen Argumente) im CLI SAPI haben.

    Seit PHP 4.3.0 werden die PHP-Variablen $argc und $argv registriert und mit den entsprechenden Werten gefüllt, wenn das CLI SAPI benutzt wird. Vor dieser Version verhielt sich die Erzeugung dieser Variablen so wie in den CGI- und MODULE-Versionen, die die PHP-Direktive register_globals auf on verlangen. Ungeachtet der Version oder der Einstellung von register_globals können Sie immer $_SERVER oder $HTTP_SERVER_VARS benutzen. Beispiel: $_SERVER['argv']

    Hinweis: Diese Direktiven können nicht mit einem anderen Wert aus der Konfigurationsdatei php.ini oder einer eigenen (falls angegeben) initialisiert werden. Das ist eine Einschränkung, weil diese Standardwerte angewandt werden, nachdem alle Konfigurationsdateien durchlaufen wurden. Dennoch können die Werte zur Laufzeit verändert werden (was aber nicht für alle dieser Direktiven einen Sinn ergibt, beispielsweise register_argc_argv).

  • Um die Arbeit in der Kommandozeilenumgebung zu vereinfachen, wurden folgende Konstanten definiert:

    CLI-spezifische Konstanten
    Konstante Beschreibung
    STDIN Ein schon geöffneter Stream auf stdin. Das erspart das Öffnen mit
    <?php

    $stdin 
    fopen('php://stdin''r');

    ?>
    Wenn sie einzelne Zeilen von stdin lesen wollen, können Sie folgendes Code-Fragment benutzen:
    <?php
    $line 
    trim(fgets(STDIN)); // liest eine Zeile von STDIN
    fscanf(STDIN"%d\n"$number); // liest eine Zahl von STDIN
    ?>
    STDOUT Ein schon geöffneter Stream auf stdout. Das erspart das Öffnen mit
    <?php

    $stdout 
    fopen('php://stdout''w');

    ?>
    STDERR Ein schon geöffneter Stream auf stderr. Das erspart das Öffnen mit
    <?php

    $stderr 
    fopen('php://stderr''w');

    ?>

    Angesichts des oben genannten brauchen Sie beispielsweise nicht selbst einen Stream für stderr öffnen, sondern einfach die Konstante statt der Ressource benutzen:

    php -r 'fwrite(STDERR, "stderr\n");'

    Sie brauchen diese Ressourcen nicht explizit schließen, weil sie automatisch von PHP geschlossen werden, wenn ihr Skript endet.

    Hinweis: Diese Konstanten sind nicht verfügbar wenn ein PHP Skript von stdin eingelesen wird.

  • Das CLI SAPI ändert das aktuelle Verzeichnis nicht auf das Verzeichnis des ausgeführten Skriptes!

    Ein Beispiel, das den Unterschied zum CGI SAPI zeigt:

    <?php
    // Unsere einfache Anwendung namens test.php
    echo getcwd(), "\n";
    ?>

    Bei der CGI-Version ist die Ausgabe folgende:

    $ pwd
    /tmp
    
    $ php -q another_directory/test.php
    /tmp/another_directory
    

    Dies zeigt deutlich, dass PHP das aktuelle Verzeichnis auf das des ausgeführten Skriptes ändert.

    Benutzen der CLI SAPI-Version ergibt:

    $ pwd
    /tmp
    
    $ php -f another_directory/test.php
    /tmp
    

    Dies erlaubt eine größere Anpassungsfähigkeit beim Schreiben von Kommandozeilenanwendungen in PHP.

    Hinweis: Das CGI SAPI unterstützt das Verhalten des CLI SAPI anhand der Option -C, wenn es auf der Kommandozeile gestartet wird.

Die Liste der Kommandozeilenoptionen, die das PHP-Binary bereitstellt, können jederzeit abgerufen werden, wenn man PHP mit der Option -h startet:

Usage: php [options] [-f] <file> [--] [args...]
       php [options] -r <code> [--] [args...]
       php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
       php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
       php [options] -- [args...]
       php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse and execute <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -s               Display colour syntax highlighted source.
  -v               Version number
  -w               Display source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

  args...          Arguments passed to script. Use -- args when first argument
                   starts with - or script is read from stdin

  --ini            Show configuration file names

  --rf <name>      Show information about function <name>.
  --rc <name>      Show information about class <name>.
  --re <name>      Show information about extension <name>.
  --ri <name>      Show configuration for extension <name>.

Beim CLI SAPI gibt es drei verschiedene Möglichkeiten, den zur Ausführung bestimmten PHP-Code zu übergeben:

  1. PHP mitteilen, eine bestimmte Datei auszuführen.

    php my_script.php
    
    php -f my_script.php
    

    Beide Arten (ob sie die Option -f benutzen oder nicht) führen die Datei my_script.php aus. Sie können eine beliebige Datei ausführen - Ihr PHP-Skript muss nicht die Dateiendung .php haben, sie kann einen beliebigen Namen und eine beliebige Endung haben.

    Hinweis: Wenn Sie Argumente an Ihr Skript übergeben wollen müssen Sie -- als erstes Argument übergeben wenn Sie die -f Option benutzen.

  2. Den PHP-Code, der ausgeführt werden soll, direkt auf der Kommandozeile übergeben.

    php -r 'print_r(get_defined_constants());'
    
    Bezüglich Ersetzung von Kommandozeilenvariablen und Benutzung von Quotes muss besondere Vorsicht getroffen werden.

    Hinweis: Betrachten Sie das Beispiel sorgfältig, es sind keine Start- oder Endtags gesetzt! Die Option -r benötigt sie nicht. Werden sie dennoch verwendet, kommt es zu einem Parser-Fehler.

  3. Stellen Sie den PHP-Code, der ausgeführt werden soll, über den Standard-Input (stdin) bereit.

    Dies eröffnet die leistungsfähige Möglichkeit, PHP-Code dynamisch zu generieren und ihn dem PHP-Binary zu übergeben, wie in diesem möglichem Beispiel:

    $ some_application | some_filter | php | sort -u >final_output.txt
    

Sie können diese drei Möglichkeiten zur Ausführung nicht kombinieren.

Wie jede Kommandozeilenanwendung nimmt das PHP-Binary etliche Argumente entgegen, aber auch ein PHP-Skript kann Argumente entgegennehmen. Die Anzahl der Argumente, die an ein Skript übergeben werden können, ist nicht von PHP beschränkt (aber die Kommandozeilenumgebung hat ein bestimmtes Größenlimit für die Anzahl der Argumente, die übergeben werden können; normalerweise werden Sie dieses Limit nicht erreichen). Die Argumente, die dem Skript übergeben werden, sind in dem globalen Array $argv gespeichert. Der Null-Index enthält immer den Skriptnamen (das bedeutet -, wenn der PHP-Code entweder von der Standardeingabe oder von der Kommandozeilenoption -r kommt). Die zweite registrierte globale Variable ist $argc, die die Anzahl der Elemente im Array $argv enthält (nicht die Anzahl Argumente, die dem Skript übergeben wurden).

Solange die Argumente, die Sie dem Skript übergeben möchten, nicht mit dem Zeichen - beginnen, gibt es nichts besonderes zu beachten. Ein Argument, das mit - beginnt zu übergeben, wird Probleme bereiten, weil PHP selbst denkt, dass sie verarbeitet werden muss. Benutzen Sie das Argument-Trennzeichen -- um das zu vermeiden. Nachdem dieses Trennzeichen von PHP geparst wurde, wird jedes folgende Argument unangetastet an das Skript weitergereicht.

# Dies führt nicht den angegebenen Code aus, sondern die Optionen von PHP anzeigen
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# Dies übergibt das Argument '-h' an Ihr Skript und zeigt die Optionen von PHP nicht an
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

Dennoch gibt es einen anderen Weg, um PHP für Kommandozeilenskripte zu benutzen. Sie können ein Skript erstellen, in dem die erste Zeile mit #!/usr/bin/php beginnt. Nachfolgend können Sie normalen PHP-Code innerhalb der PHP-Start- und -End-Tags setzen. Sobald Sie die Datei ausführbar gemacht haben (beispielsweise chmod +x test), kann Ihr Skript wie ein normales Kommandozeilen- oder Perl-Skript gestartet werden.

Beispiel #1 PHP als Shellskript ausführen

#!/usr/bin/php
<?php
var_dump
($argv);
?>

Angenommen, die Datei heißt test und befindet sich im aktuellen Verzeichnis, dann können wir nun folgendes tun:

$ chmod 755 test
$ ./test -h -- foo
array(4) {
  [0]=>
  string(6) "./test"
  [1]=>
  string(2) "-h"
  [2]=>
  string(2) "--"
  [3]=>
  string(3) "foo"
}

Wie Sie sehen können, müssen Sie sich in diesem Fall um nichts weiter kümmern, wenn Sie Ihrem Skript Paramater, die mit - beginnen, übergeben.

Die Langformen der Optionen sind seit PHP 4.3.3 verfügbar.

Kommandozeilenoption
Option Langform Beschreibung
-a --interactive

Startet PHP im interaktiven Modus. Wenn Sie PHP mit der Readline-Erweiterung (die unter Windows nicht verfügbar ist) kompilieren, bekommen Sie eine feine Shell, komplett mit einer Auto-Vervollständigung (das bedeutet, Sie können anfangen, einen Variablennamen zu tippen, die TAB-Taste drücken und PHP vervollständigt den Namen) und einem Verlauf der letzten Zeilen, auf den mit den Pfeiltasten zugegriffen werden kann. Der Verlauf wird in der Datei ~/.php_history gespeichert.

Hinweis: Dateien, die mit auto_prepend_file und auto_append_file eingebunden wurden, werden in diesem Modus mit einigen Einschränkungen auch geparset - Funktionen müssen etwa vor dem Aufruf definiert werden.

Hinweis: Automatisches Laden (autoload) ist im interaktiven PHP CLI Modus nicht verfügbar.

-c --php-ini

Mit dieser Option kann man entweder ein Verzichnis angeben, wo nach php.ini gesucht werden soll, oder man kann eine eigene INI-Datei direkt angeben (diese muss nicht php.ini heissen). Zum Beispiel:

$ php -c /custom/directory/ my_script.php

$ php -c /custom/directory/custom-file.ini my_script.php

Wenn Sie diese Option nicht angeben, wird die Datei an den vorgegebenen Orten gesucht.

-n --no-php-ini

php.ini komplett ignorieren. Diese Option gibt es seit PHP 4.3.0.

-d --define

Diese Option erlaubt es Ihnen, einen eigenen Wert für eine beliebige in php.ini erlaubte Direktive zu setzen. Die Syntax ist:

-d configuration_directive[=value]

Beispiele (die Zeilen sind aus layouttechnischen Gründen umgebrochen):

# Auslassen des Wertes setzt die Direktive auf "1"
$ php -d max_execution_time
      -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"

# Übergeben eines leeren Wertes setzt die Direktive auf ""
php -d max_execution_time=
    -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""

# Die Direktive wird auf das gesetzt, was nach '=' kommt
$  php -d max_execution_time=20
       -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(2) "20"
$  php -d max_execution_time=doesntmakesense
       -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(15) "doesntmakesense"
-e --profile-info

Erweiterte Informationen für Debugger/Profiler erstellen.

-f --file

Parst und führt die angegebene Datei aus. Diese Option ist nicht verbindlich und kann weggelassen werden. Alleinige Angabe des Dateinamens ist ausreichend.

Hinweis: Um Argumente an das Srkipt zu übergeben muss das erste Argument -- sein, ansonsten interpretiert PHP diese als PHP Optionen.

-h und -? --help und --usage Mit dieser Option bekommen Sie Informationen über die tatsächlichen Kommandozeilenoptionen und kurze Beschreibungen dazu.
-i --info Diese Kommandozeilenoption ruft phpinfo() auf und gibt das Ergebnis aus. Wenn PHP nicht korrekt funktioniert, ist es ratsam, php -i zu benutzen und nachzusehen, ob etwa Fehlermeldungen vor oder statt der Informationstabellen ausgegeben werden. Beachten Sie, dass die Ausgabe bei Verwendung des CGI-Modus in HTML erfolgt und deswegen ziemlich umfangreich ist.
-l --syntax-check

Diese Option stellt eine angenehme Methode bereit, nur eine Syntaxüberprüfung auf den angegebenen PHP-Code durchzuführen. Bei Erfolg wird der Text No syntax errors detected in <filename> auf die Standardausgabe geschrieben und der Rückgabewert ist 0. Bei Misserfolg wird der Text Errors parsing <filename> zusätzlich zur internen Parser-Fehlermeldung auf der Standardausgabe ausgegeben und der Rückgabewert auf -1 gesetzt.

Diese Option wird keine Fatalen Fehler (wie undefinierte Funktionen) finden. Benutzen Sie die Option -f, wenn sie auch diese überprüfen wollen.

Hinweis: Diese Option funktioniert nicht zusammen mit -r.

-m --modules

Wird diese Option benutzt, gibt PHP die eingebauten (und geladenen) PHP- und Zend-Module aus:

$ php -m
[PHP Modules]
xml
tokenizer
standard
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]
-r --run

Diese Option erlaubt die Ausführung von PHP direkt aus der Kommandozeile. Die PHP-Start- und -End-Tags (<?php und ?>) werden nicht benötigt und verursachen Parserfehler, wenn sie dennoch vorhanden sind.

Hinweis: Man muss bei Benutzung dieser Form von PHP aufpassen, dass es zu keinen Kollisionen mit Kommandozeilenvariablen kommt.

Dieses Beispiel zeigt einen Parserfehler:

$ php -r "$foo = get_defined_constants();"
Command line code(1) : Parse error - parse error, unexpected '='

Das Problem hier ist, dass die sh/bash Variablen auch ersetzt, wenn doppelte Anführungszeichen benutzt werden ("). Weil die Variable $foo wahrscheinlich nicht definiert ist, passiert nichts. Der tatsächliche Code, der an PHP übergeben wird, sieht so aus:

$ php -r " = get_defined_constants();"

Der korrekte Weg wäre, einfache Anführungszeichen zu benutzen ('). Variablen in einfachen Anführungszeichen werden von sh/bash nicht ersetzt.

$ php -r '$foo = get_defined_constants(); var_dump($foo);'
array(370) {
  ["E_ERROR"]=>
  int(1)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_CORE_ERROR"]=>
  [...]

Wenn Sie eine andere Kommandozeilenumgebung als sh/bash benutzen, könnten Sie auf weitere Probleme stoßen. Sie können gerne einen Bugreport unter » http://bugs.php.net/ eintragen. Man kann dennoch leicht in Schwierigkeiten kommen, wenn man versucht, Kommandozeilenvariablen zu verwenden oder mit Backslashes zu escapen. Sie wurden gewarnt.

Hinweis: -r ist nur im CLI-SAPI verfügbar und nicht im CGI-SAPI

Hinweis: Diese Option ist für sehr rudimentäre Sachen gedacht. Deswegen werden manche Direktiven (etwa auto_prepend_file und auto_append_file) in diesem Modus ignoriert.

-B --process-begin

PHP-Code der ausgeführt werden soll, bevor stdin ausgewertet wird. Verfügbar seit PHP 5.

-R --process-code

PHP-Code der für jede Eingabezeile ausgeführt werden soll. Verfügbar seit PHP 5.

Es gibt zwei spezielle Variablen in diesem Modus: $argn und $argi. $argn enthält die Zeile, die PHP gerade verarbeitet und $argi enthält die Zeilennummer.

-F --process-file

PHP-Datei die für jede Eingabezeile ausgeführt werden soll. Verfügbar seit PHP 5.

-E --process-end

PHP-Code der nach der Verarbeitung der Eingabe ausgeführt werden soll. Verfügbar seit PHP 5.

Ein Beispiel, wie man die Optionen -B, -R und -E benutzt, um die Anzahl der Zeilen in einem Projekt zu zählen.

$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Total Lines: $l\n";'
Total Lines: 37328
-s --syntax-highlight und --syntax-highlighting

Den Quelltext mit farbiger Syntaxhervorhebung anzeigen.

Diese Option benutzt den internen Mechanismus zum Analysieren der Datei, generiert eine HTML-Version mit Syntax-Highlighting davon, und schreibt sie auf die Standardausgabe. Beachten Sie, dass sie nur einen Block von <code> [...] </code>-HTML-Tags erzeugt, keine HTML-Header.

Hinweis: Diese Option funktioniert nicht zusammen mit -r.

-v --version

Schreibt die Version von PHP, PHP SAPI und Zend auf die Standardausgabe. Zum Beispiel:

$ php -v
PHP 4.3.0 (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies
-w --strip

Den Quelltext mit entfernten Kommentaren und Leerzeichen anzeigen.

Hinweis: Diese Option funktioniert nicht zusammen mit -r.

-z --zend-extension

Eine Zend-Erweiterung laden. Wenn nur ein Dateiname angegeben wird, versucht PHP, die Erweiterung aus dem momentanen Standard-Bibliotheken-Pfad auf Ihrem System zu laden (auf Linux-Systemen normalerweise in /etc/ld.so.conf angegeben). Wenn ein Dateiname mit absoluter Pfadinformation übergeben wird, wird der Bibliotheken-Pfad des Systems nicht benutzt. Ein relativer Dateiname mit Pfadinformationen wird PHP nur veranlassen, zu versuchen, die Erweiterung in einem Pfad relativ zum aktuellen Verzeichnis zu laden.

  --ini

Zeigt die Namen der Konfigurationsdateien und die durchsuchten Verzeichnisse. Verfügbar seit PHP 5.2.3.

Beispiel #2 --ini example

$ php --ini
Configuration File (php.ini) Path: /usr/dev/php/5.2/lib
Loaded Configuration File:         /usr/dev/php/5.2/lib/php.ini
Scan for additional .ini files in: (none)
additional .ini files parsed:      (none)

--rf --rfunction

Zeigt Informationen über die gegebene Funktion oder Klassenmethode (z.B. Anzahl und Name der Parameter). Verfügbar seit PHP 5.1.2.

Diese Option ist nur verfügbar, wenn PHP mit Reflection-Unterstützung kompiliert wurde.

Beispiel #3 Einfache --rf Nutzung

$ php --rf var_dump
Function [ <internal> public function var_dump ] {

  - Parameters [2] {
    Parameter #0 [ <required> $var ]
    Parameter #1 [ <optional> $... ]
  }
}

--rc --rclass

Zeigt Inforationen über die gegebene Klasse (Liste der Konstanten, Eigenschaften und Methoden). Verfügbar seit PHP 5.1.2.

Diese Option ist nur verfügbar, wenn PHP mit Reflection-Unterstützung kompiliert wurde.

Beispiel #4 --rc example

$ php --rc Directory
Class [ <internal:standard> class Directory ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [3] {
    Method [ <internal> public method close ] {
    }

    Method [ <internal> public method rewind ] {
    }

    Method [ <internal> public method read ] {
    }
  }
}

--re --rextension

Zeigt Informationen über die gegebene Extension (Liste der php.ini Optionen, definierte Funktionen, Konstanten und Klassen. Verfügbar seit PHP 5.1.2.

Diese Option ist nur verfügbar, wenn PHP mit Reflection -nterstützung kompiliert wurde.

Beispiel #5 --re example

$ php --re json
Extension [ <persistent> extension #19 json version 1.2.1 ] {

  - Functions {
    Function [ <internal> function json_encode ] {
    }
    Function [ <internal> function json_decode ] {
    }
  }
}

--ri --rextinfo

Zeigt die Konfiguration der gegebenen Extension (entspricht der von phpinfo() zurückgegebenen Information). Verfügbar seit PHP 5.2.2. Die Konfiguration des Sprachkerns können über den speziellen Extension Namen "main" ermittelt werden.

Beispiel #6 --ri example

$ php --ri date

date

date/time support => enabled
"Olson" Timezone Database Version => 2007.5
Timezone Database => internal
Default timezone => Europe/Oslo

Directive => Local Value => Master Value
date.timezone => Europe/Oslo => Europe/Oslo
date.default_latitude => 59.22482 => 59.22482
date.default_longitude => 11.018084 => 11.018084
date.sunset_zenith => 90.583333 => 90.583333
date.sunrise_zenith => 90.583333 => 90.583333

Die ausführbare PHP-Version kann benutzt werden, um PHP-Skripte vollkommen unabhängig von einem Webserver auszuführen. Wenn Sie auf einem UNIX-System arbeiten, sollten Sie Ihrem Skript eine spezielle erste Zeile hinzufügen und es ausführbar machen, so dass das System erkennt, welches Programm das Skript ausführen soll. Auf einem Windows-System können Sie php.exe mit der Doppelklick-Option von .php-Dateien verknüpfen. Sie können auch eine Batchdatei erzeugen, um das Skript von PHP ausführen zu lassen. Die erste Zeile, die dem Skript hinzugefügt wird, damit es unter UNIX läuft, stört unter Windows nicht, so dass Sie auf diese Weise problemlos plattformübergreifende Programme schreiben können. Sie finden anschließend ein einfaches Beispiel, wie man ein Kommandozeilenprogramm in PHP schreibt.

Beispiel #7 Ein Skript, das von der Kommandozeile aus ausgeführt werden soll (script.php)

#!/usr/bin/php
<?php

if ($argc != || in_array($argv[1], array('--help''-help''-h''-?'))) {
?>

Das ist ein Kommandozeilenprogramm in PHP mit einer Option.

  benutzung:
  <?php echo $argv[0]; ?> <option>

  <option> kann ein Wort sein, das Sie gerne
  ausgeben möchten. Mit den Optionen --help,
  -help, -h oder -? bekommen Sie diese Hilfe.

<?php
} else {
    echo 
$argv[1];
}
?>

In dem oben beschriebenen Skript haben wir die erste Zeile dazu benutzt anzugeben, dass die Datei von PHP ausgeführt werden soll. Wir arbeiten hier mit einer CLI-version, deswegen werden keine HTTP-Header ausgegeben. Es gibt zwei Variablen, die Sie in Kommandozeilen-Applikationen mit PHP benutzen können: $argc und $argv. Die erste ist die Anzahl der Argumente plus Eins (dem Namen des laufenden Skripts). Die zweite ist ein Array, das die Argumente enthält, beginnend mit dem Skriptnamen als Nummer Null ($argv[0]).

In dem oben genannten Programm haben wir überprüft, ob es weniger oder mehr als zwei Argumente gibt. Falls das Argument --help, -help, -h oder -? war, haben wir die Hilfe-Nachricht mit dem dynamisch übergebenen Skriptnamen ausgegeben. Wenn wir ein anderes Argument erhalten haben, haben wir es ausgegeben.

Wenn Sie das oben genannte Skript unter UNIX laufen lassen wollen, müssen Sie es zuerst ausführbar machen, und es danach einfach als script.php echothis oder script.php -h aufrufen. Unter Windows können Sie zu diesem Zweck eine Batchdatei erstellen:

Beispiel #8 Batchdatei zur Ausführung eines Kommandozeilen-Skripts in PHP (script.bat)

@C:\php\php.exe script.php %1 %2 %3 %4

Angenommen, Sie haben das Programm script.php genannt und die CLI-php.exe hat den Pfad c:\php\php.exe, wird diese Batchdatei es mit den von Ihnen übergebnen Optionen ausführen: script.bat echothis oder script.bat -h.

Sehen Sie sich auch die zusätzlichen Funktionen in der Dokumentation der Readline-Extension an, um Ihre in PHP geschriebenen Kommandozeilenanwendungen zu verbessern.




Funktionsreferenz


Das Verhalten von PHP beeinflussen


Alternativer PHP Cache


Einführung

Der Alternative PHP Cache (APC) ist ein freier und offener Opcode Cache für PHP. Er wurde erdacht um ein freies, offenes und robustes Gerüst zum Cachen und Optimieren von PHP Zwischencode bereitzustellen.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Diese » PECL-Extension ist nicht Teil von PHP.

Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/apc.

Sie können die DLL für diese PECL-Extension entweder von » PHP-Downloads oder von » http://pecl4win.php.net/ herunterladen.

Hinweis: Unter Windows benötigt APC ein existieren temporären Pfad zu einem für den Webserver schreibbaren Verzeichnis. APC prüft die TMP, TEMP und USERPROFILE Environmentvariablen in dieser Reihenfolge und versucht schließlich das WINDOWS Verzeichnis zu nutzen falls kein dieser Variablen gesetzt ist.

Hinweis: Für weiter in die Tiefe gehende technische Implementationsdetails nutzen Sie bitte die von den Entwicklern bereitgestellte » TECHNOTES Datei.



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Although the default APC settings are fine for many installations, serious users should consider tuning the following parameters.

There are two primary decisions to be made configuring APC. First, how much memory is going to be allocated to APC; and second, whether APC will check if a file has been modified on every request. The two ini directives that control these settings are apc.shm_size and apc.stat, respectively. Read the sections on these two directive carefully below.

Once the server is running, the apc.php script that is bundled with the extension should be copied somewhere into the docroot and viewed with a browser as it provides a detailed analysis of the internal workings of APC. If GD is enabled in PHP, it will even display some interesting graphs. The first thing to ensure, of course, is that it is actually caching files. If APC is working, the Cache full count number (on the left) will display the number of times the cache has reached maximum capacity and has had to forcefully clean any entries that haven't been accessed in the last apc.ttl seconds. This number is minimized in a well-configured cache. If the cache is constantly being filled, and thusly forcefully freed, the resulting churning will have disparaging effects on script performance. The easiest way to minimize this number is to allocate more memory for APC. Barring that, the apc.filters ought to be used to cache fewer scripts.

APC configuration options
Name Default Changeable Changelog
apc.enabled "1" PHP_INI_SYSTEM PHP_INI_SYSTEM in APC 2. PHP_INI_ALL in APC <= 3.0.12.
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "30" PHP_INI_SYSTEM  
apc.optimization "0" PHP_INI_ALL PHP_INI_SYSTEM in APC 2. Removed in APC 3.0.13.
apc.num_files_hint "1000" PHP_INI_SYSTEM  
apc.user_entries_hint "4096" PHP_INI_SYSTEM Available since APC 3.0.0.
apc.ttl "0" PHP_INI_SYSTEM Available since APC 3.0.0.
apc.user_ttl "0" PHP_INI_SYSTEM Available since APC 3.0.0.
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.cache_by_default "1" PHP_INI_ALL PHP_INI_SYSTEM in APC <= 3.0.12. Available since APC 3.0.0.
apc.filters NULL PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "0" PHP_INI_SYSTEM Available since APC 3.0.0.
apc.file_update_protection "2" PHP_INI_SYSTEM Available since APC 3.0.6.
apc.enable_cli "0" PHP_INI_SYSTEM Available since APC 3.0.7.
apc.max_file_size "1M" PHP_INI_SYSTEM Available since APC 3.0.7.
apc.stat "1" PHP_INI_SYSTEM Available since APC 3.0.10.
apc.write_lock "1" PHP_INI_SYSTEM Available since APC 3.0.11.
apc.report_autofilter "0" PHP_INI_SYSTEM Available since APC 3.0.11.
apc.include_once_override "0" PHP_INI_SYSTEM Available since APC 3.0.12.
apc.rfc1867 "0" PHP_INI_SYSTEM Available since APC 3.0.13.
apc.rfc1867_prefix "upload_" PHP_INI_SYSTEM  
apc.rfc1867_name "APC_UPLOAD_PROGRESS" PHP_INI_SYSTEM  
apc.rfc1867_freq "0" PHP_INI_SYSTEM  
apc.localcache "0" PHP_INI_SYSTEM Available since APC 3.0.14.
apc.localcache.size "512" PHP_INI_SYSTEM Available since APC 3.0.14.
apc.coredump_unmap "0" PHP_INI_SYSTEM Available since APC 3.0.16.
apc.stat_ctime "0" PHP_INI_SYSTEM Available since APC 3.0.13.

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

apc.enabled boolean

apc.enabled can be set to 0 to disable APC. This is primarily useful when APC is statically compiled into PHP, since there is no other way to disable it (when compiled as a DSO, the extension line in php.ini can just be commented-out).

apc.shm_segments integer

The number of shared memory segments to allocate for the compiler cache. If APC is running out of shared memory but apc.shm_size is set as high as the system allows, raising this value might prevent APC from exhausting its memory.

apc.shm_size integer

The size of each shared memory segment in MB. By default, some systems (including most BSD variants) have very low limits on the size of a shared memory segment.

apc.optimization integer

The optimization level. Zero disables the optimizer, and higher values use more aggressive optimizations. Expect very modest speed improvements. This is experimental.

apc.num_files_hint integer

A "hint" about the number of distinct source files that will be included or requested on your web server. Set to zero or omit if unsure; this setting is mainly useful for sites that have many thousands of source files.

apc.user_entries_hint integer

Just like apc.num_files_hint, a "hint" about the number of distinct user cache variables to store. Set to zero or omit if not sure.

apc.ttl integer

The number of seconds a cache entry is allowed to idle in a slot in case this cache entry slot is needed by another entry. Leaving this at zero means that APC's cache could potentially fill up with stale entries while newer entries won't be cached. In the event of a cache running out of available memory, the cache will be completely expunged if ttl is equal to 0. Otherwise, if the ttl is greater than 0, APC will attempt to remove expired entries.

apc.user_ttl integer

The number of seconds a cache entry is allowed to idle in a slot in case this cache entry slot is needed by another entry. Leaving this at zero means that APC's cache could potentially fill up with stale entries while newer entries won't be cached. In the event of a cache running out of available memory, the cache will be completely expunged if ttl is equal to 0. Otherwise, if the ttl is greater than 0, APC will attempt to remove expired entries.

apc.gc_ttl integer

The number of seconds that a cache entry may remain on the garbage-collection list. This value provides a fail-safe in the event that a server process dies while executing a cached source file; if that source file is modified, the memory allocated for the old version will not be reclaimed until this TTL reached. Set to zero to disable this feature.

apc.cache_by_default boolean

On by default, but can be set to off and used in conjunction with positive apc.filters so that files are only cached if matched by a positive filter.

apc.filters string

A comma-separated list of POSIX extended regular expressions. If any pattern matches the source filename, the file will not be cached. Note that the filename used for matching is the one passed to include/require, not the absolute path. If the first character of the expression is a + then the expression will be additive in the sense that any files matched by the expression will be cached, and if the first character is a - then anything matched will not be cached. The - case is the default, so it can be left off.

apc.mmap_file_mask string

If compiled with MMAP support by using --enable-mmap this is the mktemp-style file_mask to pass to the mmap module for determining whether your mmap'ed memory region is going to be file-backed or shared memory backed. For straight file-backed mmap, set it to something like /tmp/apc.XXXXXX (exactly 6 Xs). To use POSIX-style shm_open/mmap put a .shm somewhere in your mask. e.g. /apc.shm.XXXXXX You can also set it to /dev/zero to use your kernel's /dev/zero interface to anonymous mmap'ed memory. Leaving it undefined will force an anonymous mmap.

apc.slam_defense integer

On very busy servers whenever you start the server or modify files you can create a race of many processes all trying to cache the same file at the same time. This option sets the percentage of processes that will skip trying to cache an uncached file. Or think of it as the probability of a single process to skip caching. For example, setting apc.slam_defense to 75 would mean that there is a 75% chance that the process will not cache an uncached file. So, the higher the setting the greater the defense against cache slams. Setting this to 0 disables this feature.

Deprecated by apc.write_lock.

apc.file_update_protection integer

When a file is modified on a live web server it really ought to be done in an atomic manner. That is, written to a temporary file and renamed (mv) the file into its permanent position when it is ready. Many text editors, cp, tar and other such programs don't do this. This means that there is a chance that a file is accessed (and cached) while it is still being written to. This apc.file_update_protection setting puts a delay on caching brand new files. The default is 2 seconds, which means that if the modification timestamp (mtime) on a file shows that it is less than 2 seconds old when it is accessed, it will not be cached. The unfortunate person who accessed this half-written file will still see weirdness, but at least it won't persist. If all of the webserver's files are atomically updated, via some method like rsync (which updates correctly), this protection can be disabled by setting this directive to 0. If the system is flooded with i/o and some update procedures are taking longer than 2 seconds, this setting should be increased to enable the protection on those slower update operations.

apc.enable_cli integer

Mostly for testing and debugging. Setting this enables APC for the CLI version of PHP. Under normal circumstances, it is not ideal to create, populate and destroy the APC cache on every CLI request, but for various test scenarios it is useful to be able to enable APC for the CLI version of PHP easily.

apc.max_file_size integer

Prevent files larger than this value from getting cached. Defaults to 1M.

apc.stat integer

Be careful changing this setting. This defaults to on, forcing APC to stat (check) the script on each request to determine if it has been modified. If it has been modified it will recompile and cache the new version. If this setting is off, APC will not check, which usually means that to force APC to recheck files, the web server will have to be restarted or the cache will have to be manually cleared. Note that FastCGI web server configurations may not clear the cache on restart. On a production server where the script files rarely change, a significant performance boost can be achieved by disabled stats.

For included/required files this option applies as well, but note that for relative path includes (any path that doesn't start with / on Unix) APC has to check in order to uniquely identify the file. If you use absolute path includes APC can skip the stat and use that absolute path as the unique identifier for the file.

apc.write_lock boolean

On busy servers, when the web server is first started, or when many files have been modified at the same time, APC may try to compile and cache the same file multiple times. Write_lock guarantees that only one process will attempt to compile and cache an uncached script. The other processes attempting to use the script will run without using the opcode cache, rather than locking and waiting for the cache to prime.

apc.report_autofilter boolean

Logs any scripts that were automatically excluded from being cached due to early/late binding issues.

apc.include_once_override boolean

Optimize include_once() and require_once() calls and avoid the expensive system calls used.

apc.rfc1867 boolean

RFC1867 File Upload Progress hook handler is only available if APC was compiled against PHP 5.2.0 or later. When enabled, any file uploads which includes a field called APC_UPLOAD_PROGRESS before the file field in an upload form will cause APC to automatically create an upload_key user cache entry where key is the value of the APC_UPLOAD_PROGRESS form entry.

Note that the hidden field specified by APC_UPLOAD_PROGRESS must come before the file field, otherwise the upload progress will not work correctly.

Note that the file upload tracking is not threadsafe at this point, so new uploads that happen while a previous one is still going will disable the tracking for the previous.

Beispiel #1 An apc.rfc1867 example

<?php
print_r
(apc_fetch("upload_$_POST[APC_UPLOAD_PROGRESS]"));
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [total] => 1142543
    [current] => 1142543
    [rate] => 1828068.8
    [filename] => test
    [name] => file
    [temp_filename] => /tmp/php8F
    [cancel_upload] => 0
    [done] => 1
)

apc.rfc1867_prefix string

Key prefix to use for the user cache entry generated by rfc1867 upload progress functionality.

apc.rfc1867_name string

Specify the hidden form entry name that activates APC upload progress and specifies the user cache key suffix.

apc.rfc1867_freq string

The frequency that updates should be made to the user cache entry for upload progress. This can take the form of a percentage of the total file size or a size in bytes optionally suffixed with "k", "m", or "g" for kilobytes, megabytes, or gigabytes respectively (case insensitive). A setting of 0 updates as often as possible, which may cause slower uploads.

apc.localcache boolean

This enables a lock-free local process shadow-cache which reduces lock contention when the cache is being written to.

apc.localcache.size integer

The size of the local process shadow-cache, should be set to a sufficiently large value, approximately half of apc.num_files_hint.

apc.coredump_unmap boolean

Enables APC handling of signals, such as SIGSEGV, that write core files when signaled. When these signals are received, APC will attempt to unmap the shared memory segment in order to exclude it from the core file. This setting may improve system stability when fatal signals are received and a large APC shared memory segment is configured.

Warnung

This feature is potentially dangerous. Unmapping the shared memory segment in a fatal signal handler may cause undefined behaviour if a fatal error occurs.

Hinweis: Although some kernels may provide a facility to ignore various types of shared memory when generating a core dump file, these implementations may also ignore important shared memory segments such as the Apache scoreboard.

apc.stat_ctime integer

Verification with ctime will avoid problems caused by programs such as svn or rsync by making sure inodes haven't changed since the last stat. APC will normally only check mtime.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Diese Erweiterung definiert keine Konstanten.



APC Funktionen


apc_add

(PECL apc >= 3.0.13)

apc_add Cache a variable in the data store

Beschreibung

bool apc_add ( string $key , mixed $var [, int $ttl = 0 ] )

Caches a variable in the data store, only if it's not already stored.

Hinweis: Unlike many other mechanisms in PHP, variables stored using apc_add() will persist between requests (until the value is removed from the cache).

Parameter-Liste

key

Store the variable using this name. key s are cache-unique, so attempting to use apc_add() to store data with a key that already exists will not overwrite the existing data, and will instead return FALSE. (This is the only difference between apc_add() and apc_store().)

var

The variable to store

ttl

Time To Live; store var in the cache for ttl seconds. After the ttl has passed, the stored variable will be expunged from the cache (on the next request). If no ttl is supplied (or if the ttl is 0), the value will persist until it is removed from the cache manually, or otherwise fails to exist in the cache (clear, restart, etc.).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 A apc_add() example

<?php
$bar 
'BAR';
apc_add('foo'$bar);
var_dump(apc_fetch('foo'));
echo 
"\n";
$bar 'NEVER GETS SET';
apc_add('foo'$bar);
var_dump(apc_fetch('foo'));
echo 
"\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(3) "BAR"
string(3) "BAR"

Siehe auch



apc_cache_info

(PECL apc >= 2.0.0)

apc_cache_info Retrieves cached information from APC's data store

Beschreibung

array apc_cache_info ([ string $cache_type [, bool $limited = false ]] )

Retrieves cached information and meta-data from APC's data store.

Rückgabewerte

Array of cached data (and meta-data), or FALSE on failure

Hinweis: apc_cache_info() will raise a warning if it is unable to retrieve APC cache data. This typically occurs when APC is not enabled.

Parameter-Liste

cache_type

If cache_type is "user", information about the user cache will be returned.

If cache_type is "filehits", information about which files have been served from the bytecode cache for the current request will be returned. This feature must be enabled at compile time using --enable-filehits.

If an invalid or no cache_type is specified, information about the system cache (cached files) will be returned.

limited

If limited is TRUE, the return value will exclude the individual list of cache entries. This is useful when trying to optimize calls for statistics gathering.

Changelog

Version Beschreibung
3.0.11 The limited parameter was introduced.
3.0.16 The "filehits" option for the cache_type parameter was introduced.

Beispiele

Beispiel #1 A apc_cache_info() example

<?php
print_r
(apc_cache_info());
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [num_slots] => 2000
    [ttl] => 0
    [num_hits] => 9
    [num_misses] => 3
    [start_time] => 1123958803
    [cache_list] => Array
        (
            [0] => Array
                (
                    [filename] => /path/to/apc_test.php
                    [device] => 29954
                    [inode] => 1130511
                    [type] => file
                    [num_hits] => 1
                    [mtime] => 1123960686
                    [creation_time] => 1123960696
                    [deletion_time] => 0
                    [access_time] => 1123962864
                    [ref_count] => 1
                    [mem_size] => 677
                )
            [1] => Array (...iterates for each cached file)
)



apc_clear_cache

(PECL apc >= 2.0.0)

apc_clear_cache Clears the APC cache

Beschreibung

bool apc_clear_cache ([ string $cache_type ] )

Clears the user/system cache.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Parameter-Liste

cache_type

If cache_type is "user", the user cache will be cleared; otherwise, the system cache (cached files) will be cleared.

Siehe auch



apc_compile_file

(PECL apc >= 3.0.13)

apc_compile_file Speichert eine Date im Bytecode Cache unter Umgehung aller Filter.

Beschreibung

bool apc_compile_file ( string $filename )

Speichert eine Date im Bytecode Cache unter Umgehung aller Filter.

Parameter-Liste

filename

Absoluter oder relativer Pfad zu einer PHP Datei die kompiliert und im Bytecode Cache abgelegt werden soll.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.



apc_define_constants

(PECL apc >= 3.0.0)

apc_define_constants Defines a set of constants for retrieval and mass-definition

Beschreibung

bool apc_define_constants ( string $key , array $constants [, bool $case_sensitive = true ] )

define() is notoriously slow. Since the main benefit of APC is to increase the performance of scripts/applications, this mechanism is provided to streamline the process of mass constant definition. However, this function does not perform as well as anticipated.

For a better-performing solution, try the » hidef extension from PECL.

Hinweis: To remove a set of stored constants (without clearing the entire cache), an empty array may be passed as the constants parameter, effectively clearing the stored value(s).

Parameter-Liste

key

The key serves as the name of the constant set being stored. This key is used to retrieve the stored constants in apc_load_constants().

constants

An associative array of constant_name => value pairs. The constant_name must follow the normal constant naming rules. value must evaluate to a scalar value.

case_sensitive

The default behaviour for constants is to be declared case-sensitive; i.e. CONSTANT and Constant represent different values. If this parameter evaluates to FALSE the constants will be declared as case-insensitive symbols.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 apc_define_constants() example

<?php
$constants 
= array(
    
'ONE'   => 1,
    
'TWO'   => 2,
    
'THREE' => 3,
);
apc_define_constants('numbers'$constants);
echo 
ONETWOTHREE;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

123

Siehe auch



apc_delete

(PECL apc >= 3.0.0)

apc_delete Removes a stored variable from the cache

Beschreibung

bool apc_delete ( string $key )

Removes a stored variable from the cache.

Parameter-Liste

key

The key used to store the value (with apc_store()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 A apc_delete() example

<?php
$bar 
'BAR';
apc_store('foo'$bar);
apc_delete('foo');
// this is obviously useless in this form
?>

Siehe auch



apc_fetch

(PECL apc >= 3.0.0)

apc_fetch Fetch a stored variable from the cache

Beschreibung

mixed apc_fetch ( mixed $key [, bool &$success ] )

Fetchs a stored variable from the cache.

Parameter-Liste

key

The key used to store the value (with apc_store()). If an array is passed then each element is fetched and returned.

success

Set to TRUE in success and FALSE in failure.

Rückgabewerte

The stored variable or array of variables on success; FALSE on failure

Beispiele

Beispiel #1 A apc_fetch() example

<?php
$bar 
'BAR';
apc_store('foo'$bar);
var_dump(apc_fetch('foo'));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(3) "BAR"

Siehe auch



apc_load_constants

(PECL apc >= 3.0.0)

apc_load_constants Loads a set of constants from the cache

Beschreibung

bool apc_load_constants ( string $key [, bool $case_sensitive = true ] )

Loads a set of constants from the cache.

Parameter-Liste

key

The name of the constant set (that was stored with apc_define_constants()) to be retrieved.

case_sensitive

The default behaviour for constants is to be declared case-sensitive; i.e. CONSTANT and Constant represent different values. If this parameter evaluates to FALSE the constants will be declared as case-insensitive symbols.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 apc_load_constants() example

<?php
$constants 
= array(
    
'ONE'   => 1,
    
'TWO'   => 2,
    
'THREE' => 3,
);
apc_define_constants('numbers'$constants);
apc_load_constants('numbers');
echo 
ONETWOTHREE;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

123

Siehe auch



apc_sma_info

(PECL apc >= 2.0.0)

apc_sma_info Retrieves APC's Shared Memory Allocation information

Beschreibung

array apc_sma_info ([ bool $limited = false ] )

Retrieves APC's Shared Memory Allocation information.

Parameter-Liste

limited

When set to FALSE (default) apc_sma_info() will return a detailed information about each segment.

Rückgabewerte

Array of Shared Memory Allocation data; FALSE on failure.

Beispiele

Beispiel #1 A apc_sma_info() example

<?php
print_r
(apc_sma_info());
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [num_seg] => 1
    [seg_size] => 31457280
    [avail_mem] => 31448408
    [block_lists] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [size] => 31448408
                            [offset] => 8864
                        )

                )

        )

)



apc_store

(PECL apc >= 3.0.0)

apc_store Cache a variable in the data store

Beschreibung

bool apc_store ( string $key , mixed $var [, int $ttl = 0 ] )

Cache a variable in the data store.

Hinweis: Unlike many other mechanisms in PHP, variables stored using apc_store() will persist between requests (until the value is removed from the cache).

Parameter-Liste

key

Store the variable using this name. key s are cache-unique, so storing a second value with the same key will overwrite the original value.

var

The variable to store

ttl

Time To Live; store var in the cache for ttl seconds. After the ttl has passed, the stored variable will be expunged from the cache (on the next request). If no ttl is supplied (or if the ttl is 0), the value will persist until it is removed from the cache manually, or otherwise fails to exist in the cache (clear, restart, etc.).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 A apc_store() example

<?php
$bar 
'BAR';
apc_store('foo'$bar);
var_dump(apc_fetch('foo'));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(3) "BAR"

Siehe auch


Inhaltsverzeichnis




Advanced PHP debugger


Einführung

APD is the Advanced PHP Debugger. It was written to provide profiling and debugging capabilities for PHP code, as well as to provide the ability to print out a full stack backtrace. APD supports interactive debugging, but by default it writes data to trace files. It also offers event based logging so that varying levels of information (including function calls, arguments passed, timings, etc.) can be turned on or off for individual scripts.

Achtung

APD is a Zend Extension, modifying the way the internals of PHP handle function calls, and thus may or may not be compatible with other Zend Extensions (for example Zend Optimizer).



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

APD is currently available as a PECL extension from » http://pecl.php.net/package/apd.

Run the following command to download, build, and install the latest stable version of APD:

pear install apd

This automatically installs the APD Zend module into your PHP extensions directory. It is not mandatory to keep it there; you can store the module in any directory PHP can read as long as you set the zend_extension parameter accordingly.

Windows users will enable php_apd.dll inside of php.ini in order to use these functions. Sie können die DLL für diese PECL-Extension entweder von » PHP-Downloads oder von » http://pecl4win.php.net/ herunterladen.

In your INI file, add the following lines:

zend_extension = /absolute/path/to/apd.so
apd.dumpdir = /absolute/path/to/trace/directory
apd.statement_tracing = 0

Depending on your PHP build, the zend_extension directive can be one of the following:

zend_extension              (non ZTS, non debug build)
zend_extension_ts           (    ZTS, non debug build)
zend_extension_debug        (non ZTS,     debug build)
zend_extension_debug_ts     (    ZTS,     debug build)



Building on Win32

To build APD under Windows you need a working PHP compilation environment as described on http://php.net/ -- basically, it requires you to have Microsoft Visual C++, win32build.zip, bison/flex, and some know how to get it to work. Also ensure that adp.dsp has DOS line endings; if it has unix line endings, Microsoft Visual C++ will complain about it.



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

APD Configuration Options
Name Default Changeable Changelog
apd.dumpdir NULL PHP_INI_ALL  
apd.statement_tracing "0" PHP_INI_ALL Available since apd 0.9.

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

apd.dumpdir string

Sets the directory in which APD writes profile dump files. You can specify an absolute path or a relative path.

You can specify a different directory as an argument to apd_set_pprof_trace().

apd.statement_tracing boolean

Specfies whether or not to do per-line tracings. Turning this on (1) will impact the performance of your application.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

APD constants
Constant Value Description
FUNCTION_TRACE (integer) 1  
ARGS_TRACE (integer) 2  
ASSIGNMENT_TRACE (integer) 4  
STATEMENT_TRACE (integer) 8  
MEMORY_TRACE (integer) 16  
TIMING_TRACE (integer) 32  
SUMMARY_TRACE (integer) 64  
ERROR_TRACE (integer) 128  
PROF_TRACE (integer) 256  
APD_VERSION (string) example: 1.0.2-dev  


Beispiele

Inhaltsverzeichnis


How to use PHP-APD in your scripts

  1. As the first line of your PHP script, call the apd_set_pprof_trace() function to start the trace:

    apd_set_pprof_trace();

    You can insert the line anywhere in your script, but if you do not start tracing at the beginning of your script you discard profile data that might otherwise lead you to a performance bottleneck.

  2. Now run your script. The dump output will be written to apd.dumpdir/pprof_pid.ext.

    Tipp

    If you're running the CGI version of PHP, you will need to add the '-e' flag to enable extended information for apd to work properly. For example: php -e -f script.php

  3. To display formatted profile data, issue the pprofp command with the sort and display options of your choice. The formatted output will look something like:

    bash-2.05b$ pprofp -R /tmp/pprof.22141.0
    
    Trace for /home/dan/testapd.php
    Total Elapsed Time = 0.00
    Total System Time  = 0.00
    Total User Time    = 0.00
    
    
    Real         User        System             secs/    cumm
    %Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
    --------------------------------------------------------------------------------------
    100.0 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0000   0.0009            0 main
    56.9 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0005   0.0005            0 apd_set_pprof_trace
    28.0 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 preg_replace
    14.3 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 str_replace
    

    The -R option used in this example sorts the profile table by the amount of real time the script spent executing a given function. The "cumm call" column reveals how many times each function was called, and the "s/call" column reveals how many seconds each call to the function required, on average.

  4. To generate a calltree file that you can import into the KCacheGrind profile analysis application, issue the pprof2calltree comand.




APD Funktionen

Contact information

If you have comments, bugfixes, enhancements or want to help developing this beast, you can send an mail to » apd@mail.communityconnect.com. Any help is very welcome.


apd_breakpoint

(PECL apd >= 0.2)

apd_breakpointStops the interpreter and waits on a CR from the socket

Beschreibung

bool apd_breakpoint ( int $debug_level )

This can be used to stop the running of your script, and await responses on the connected socket. To step the program, just send enter (a blank line), or enter a php command to be executed.

Parameter-Liste

debug_level

Ein aus der Addition von XXX_TRACE-Konstanten gewonnener Integerwert.

. Von der Verwendung der MEMORY_TRACE-Konstante wird abgeraten, da diese die Ausführung sehr verlangsamt und keine genauen Ergebnisse zu liefern scheint. ASSIGNMENT_TRACE ist noch nicht implementiert.

Um alle funktioierenden Traces (TIMING, FUNCTIONS, ARGS SUMMARY (ähnlich zu strace -c)) zu aktivieren, benutzen Sie den Wert 99

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 Typical session using tcplisten

bash#tcplisten localhost 7777

APD - Advanced PHP Debugger Trace File
---------------------------------------------------------------------------
Process Pid (6118)
Trace Begun at Sun Mar 10 23:13:12 2002
---------------------------------------------------------------------------
(  0.000000): apd_set_session_trace called at /home/alan/Projects/project2/test. 
php:5
(  0.074824): apd_set_session_trace_socket() at /home/alan/Projects/project2/tes 
t.php:5 returned.  Elapsed (0.074824)
(  0.074918): apd_breakpoint() /home/alan/Projects/project2/test.php:7
              ++ argv[0] $(??) = 9
apd_breakpoint() at /home/alan/Projects/project2/test.php:7 returned.  Elapsed ( 
-2089521468.1073275368)
>\n 
statement: /home/alan/Projects/project2/test.php:8
>\n 
statement: /home/alan/Projects/project2/test.php:8
>\n 
statement: /home/alan/Projects/project2/test.php:10
>apd_echo($i);
EXEC: apd_echo($i);
0
>apd_echo(serialize(apd_get_active_symbols()));
EXEC:  apd_echo(serialize(apd_get_active_symbols()));
a:47:{i:0;s:4:"PWD";i:1;s:10:"COLORFGBG";i:2;s:11:"XAUTHORITY";i:3;s:14:"
COLORTERM_BCE";i:4;s:9:"WINDOWID";i:5;s:14:"ETERM_VERSION";i:6;s:16:"SE
SSION_MANAGER";i:7;s:4:"PS1";i:8;s:11:"GDMSESSION";i:9;s:5:"USER";i:10;s:5:"
MAIL";i:11;s:7:"OLDPWD";i:12;s:5:"LANG";i:13;s:10:"COLORTERM";i:14;s:8:"DISP
LAY";i:15;s:8:"LOGNAME";i:16;s:6:"
>apd_echo(system('ls /home/mydir'));
........
>apd_continue(0);



apd_callstack

(PECL apd 0.2-0.4)

apd_callstackReturns the current call stack as an array

Beschreibung

array apd_callstack ( void )

Returns the current call stack as an array

Rückgabewerte

An array containing the current call stack.

Beispiele

Beispiel #1 apd_callstack() example

<?php
print_r
(apd_callstack());
?>



apd_clunk

(PECL apd 0.2-0.4)

apd_clunkThrow a warning and a callstack

Beschreibung

void apd_clunk ( string $warning [, string $delimiter ] )

Behaves like perl's Carp::cluck. Throw a warning and a callstack.

Parameter-Liste

warning

The warning to throw.

delimiter

The delimiter. Default to <BR />.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 apd_clunk() example

<?php
apd_clunk
("Some Warning""<br/>");
?>

Siehe auch

  • apd_croak() - Throw an error, a callstack and then exit



apd_continue

(PECL apd >= 0.2)

apd_continueRestarts the interpreter

Beschreibung

bool apd_continue ( int $debug_level )

Usually sent via the socket to restart the interpreter.

Parameter-Liste

debug_level

Ein aus der Addition von XXX_TRACE-Konstanten gewonnener Integerwert.

. Von der Verwendung der MEMORY_TRACE-Konstante wird abgeraten, da diese die Ausführung sehr verlangsamt und keine genauen Ergebnisse zu liefern scheint. ASSIGNMENT_TRACE ist noch nicht implementiert.

Um alle funktioierenden Traces (TIMING, FUNCTIONS, ARGS SUMMARY (ähnlich zu strace -c)) zu aktivieren, benutzen Sie den Wert 99

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 apd_continue() example

<?php
apd_continue
(0);
?>



apd_croak

(PECL apd 0.2-0.4)

apd_croakThrow an error, a callstack and then exit

Beschreibung

void apd_croak ( string $warning [, string $delimiter ] )

Behaves like perl's Carp::croak. Throw an error, a callstack and then exit.

Parameter-Liste

warning

The warning to throw.

delimiter

The delimiter. Default to <BR />.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 apd_croak() example

<?php
apd_croak
("Some Warning","<P>");
?>

Siehe auch



apd_dump_function_table

(Unknown)

apd_dump_function_tableOutputs the current function table

Beschreibung

void apd_dump_function_table ( void )

Outputs the current function table.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 apd_dump_function_table() example

<?php
apd_dump_function_table
();
?>



apd_dump_persistent_resources

(PECL apd 0.2-0.4)

apd_dump_persistent_resourcesReturn all persistent resources as an array

Beschreibung

array apd_dump_persistent_resources ( void )

Return all persistent resources as an array.

Rückgabewerte

An array containing the current call stack.

Beispiele

Beispiel #1 apd_dump_persistent_resources() example

<?php
print_r
(apd_dump_persistent_resources());
?>

Siehe auch



apd_dump_regular_resources

(PECL apd 0.2-0.4)

apd_dump_regular_resourcesReturn all current regular resources as an array

Beschreibung

array apd_dump_regular_resources ( void )

Return all current regular resources as an array.

Rückgabewerte

An array containing the current regular resources.

Beispiele

Beispiel #1 apd_dump_regular_resources() example

<?php
print_r
(apd_dump_regular_resources());
?>

Siehe auch



apd_echo

(PECL apd >= 0.2)

apd_echoEcho to the debugging socket

Beschreibung

bool apd_echo ( string $output )

Usually sent via the socket to request information about the running script.

Parameter-Liste

output

The debugged variable.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 apd_echo() example

<?php
apd_echo
($i);
?>



apd_get_active_symbols

(PECL apd 0.2)

apd_get_active_symbolsGet an array of the current variables names in the local scope

Beschreibung

array apd_get_active_symbols ( void )

Returns the names of all the variables defined in the active scope, (not their values).

Rückgabewerte

A multidimensional array with all the variables.

Beispiele

Beispiel #1 apd_get_active_symbols() example

<?php
apd_echo
(apd_get_active_symbols());
?>



apd_set_pprof_trace

(PECL apd >= 0.2)

apd_set_pprof_traceStarts the session debugging

Beschreibung

string apd_set_pprof_trace ([ string $dump_directory [, string $fragment = "pprof" ]] )

Starts debugging to pprof_{process_id} in the dump directory.

Parameter-Liste

dump_directory

The directory in which the profile dump file is written. If not set, the apd.dumpdir setting from the php.ini file is used.

fragment

Rückgabewerte

Returns path of the destination file.

Beispiele

Beispiel #1 apd_set_pprof_trace() example

<?php
apd_set_pprof_trace
();
?>

Siehe auch



apd_set_session_trace_socket

(PECL apd >= 0.2)

apd_set_session_trace_socketStarts the remote session debugging

Beschreibung

bool apd_set_session_trace_socket ( string $tcp_server , int $socket_type , int $port , int $debug_level )

Connects to the specified tcp_server (eg. tcplisten) and sends debugging data to the socket.

Parameter-Liste

tcp_server

IP or Unix Domain socket (like a file) of the TCP server.

socket_type

Can be AF_UNIX for file based sockets or APD_AF_INET for standard tcp/ip.

port

You can use any port, but higher numbers are better as most of the lower numbers may be used by other system services.

debug_level

Ein aus der Addition von XXX_TRACE-Konstanten gewonnener Integerwert.

. Von der Verwendung der MEMORY_TRACE-Konstante wird abgeraten, da diese die Ausführung sehr verlangsamt und keine genauen Ergebnisse zu liefern scheint. ASSIGNMENT_TRACE ist noch nicht implementiert.

Um alle funktioierenden Traces (TIMING, FUNCTIONS, ARGS SUMMARY (ähnlich zu strace -c)) zu aktivieren, benutzen Sie den Wert 99

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 apd_set_session_trace_socket() example

<?php
  apd_set_session_trace_socket
("127.0.0.1",APD_AF_INET,7112,0);
?>



apd_set_session_trace

(PECL apd 0.2-0.4)

apd_set_session_traceStarts the session debugging

Beschreibung

void apd_set_session_trace ( int $debug_level [, string $dump_directory ] )

Starts debugging to apd_dump_{process_id} in the dump directory.

Parameter-Liste

debug_level

Ein aus der Addition von XXX_TRACE-Konstanten gewonnener Integerwert.

. Von der Verwendung der MEMORY_TRACE-Konstante wird abgeraten, da diese die Ausführung sehr verlangsamt und keine genauen Ergebnisse zu liefern scheint. ASSIGNMENT_TRACE ist noch nicht implementiert.

Um alle funktioierenden Traces (TIMING, FUNCTIONS, ARGS SUMMARY (ähnlich zu strace -c)) zu aktivieren, benutzen Sie den Wert 99

dump_directory

The directory in which the profile dump file is written. If not set, the apd.dumpdir setting from the php.ini file is used.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 apd_set_session_trace() example

<?php
apd_set_session_trace
(99);
?>



apd_set_session

(PECL apd 0.2-0.4)

apd_set_sessionChanges or sets the current debugging level

Beschreibung

void apd_set_session ( int $debug_level )

This can be used to increase or decrease debugging in a different area of your application.

Parameter-Liste

debug_level

Ein aus der Addition von XXX_TRACE-Konstanten gewonnener Integerwert.

. Von der Verwendung der MEMORY_TRACE-Konstante wird abgeraten, da diese die Ausführung sehr verlangsamt und keine genauen Ergebnisse zu liefern scheint. ASSIGNMENT_TRACE ist noch nicht implementiert.

Um alle funktioierenden Traces (TIMING, FUNCTIONS, ARGS SUMMARY (ähnlich zu strace -c)) zu aktivieren, benutzen Sie den Wert 99

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 apd_set_session() example

<?php
apd_set_session
(9);
?>



override_function

(PECL apd >= 0.2)

override_functionOverrides built-in functions

Beschreibung

bool override_function ( string $function_name , string $function_args , string $function_code )

Overrides built-in functions by replacing them in the symbol table.

Parameter-Liste

function_name

The function to override.

function_args

The function arguments, as a coma separated string.

Usually you will want to pass this parameter, as well as the function_code parameter, as a single quote delimited string. The reason for using single quoted strings, is to protect the variable names from parsing, otherwise, if you use double quotes there will be a need to escape the variable names, e.g. \$your_var.

function_code

The new code for the function.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 override_function() example

<?php
override_function
('test''$a,$b''echo "DOING TEST"; return $a * $b;');
?>



rename_function

(PECL apd >= 0.2)

rename_functionRenames orig_name to new_name in the global function table

Beschreibung

bool rename_function ( string $original_name , string $new_name )

Renames a orig_name to new_name in the global function table. Useful for temporarily overriding built-in functions.

Parameter-Liste

original_name

The original function name.

new_name

The new name for the original_name function.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 rename_function() example

<?php
rename_function
('mysql_connect''debug_mysql_connect' );
?>


Inhaltsverzeichnis




PHP bytecode Compiler


Einführung

Warnung

Diese Erweiterung ist EXPERIMENTELL. Das Verhalten dieser Erweiterung, einschließlich der Funktionsnamen, und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Erweiterung auf eigenes Risiko.

Bcompiler was written for several reasons:

  • To encode entire script in a proprietary PHP application
  • To encode some classes and/or functions in a proprietary PHP application
  • To enable the production of php-gtk applications that could be used on client desktops, without the need for a php.exe.
  • To do the feasibility study for a PHP to C converter

The first of these goals is achieved using the bcompiler_write_header(), bcompiler_write_file() and bcompiler_write_footer() functions. The bytecode files can be written as either uncompressed or plain. To use the generated bytecode, you can simply include it with include or require statements.

The second of these goals is achieved using the bcompiler_write_header(), bcompiler_write_class(), bcompiler_write_footer(), bcompiler_read(), and bcompiler_load() functions. The bytecode files can be written as either uncompressed or plain. The bcompiler_load() reads a bzip compressed bytecode file, which tends to be 1/3 of the size of the original file.

To create EXE type files, bcompiler has to be used with a modified sapi file or a version of PHP which has been compiled as a shared library. In this scenario, bcompiler reads the compressed bytecode from the end of the exe file.

bcompiler can improve performance by about 30% when used with uncompressed bytecodes only. But keep in mind that uncompressed bytecode can be up to 5 times larger than the original source code. Using bytecode compression can save your space, but decompression requires much more time than parsing a source. bcompiler also does not do any bytecode optimization, this could be added in the future...

In terms of code protection, it is safe to say that it would be impossible to recreate the exact source code that it was built from, and without the accompanying source code comments. It would effectively be useless to use the bcompiler bytecodes to recreate and modify a class. However it is possible to retrieve data from a bcompiled bytecode file - so don't put your private passwords or anything in it.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

short installation note:

  • You need at least PHP 4.3.0 for the compression to work
  • To install on PHP 4.3.0 and later at the Unix command prompt type pear install bcompiler
  • To install on Windows, until the binary package distribution mechanism is finished please search the archives of the pear-general mailing list for pre-built packages. (or send an email to it if you could not find a reference)
  • To install on older versions you need to make some slight changes to the build.
  • untar the bcompiler.tgz archive into php4/ext.(Get it directly from PECL » http://pecl.php.net/get/bcompiler)
  • If the new directory is now called something like bcompiler-0.x, then you should rename it to bcompiler (except you only want to build it as self-contained php-module).
  • If you are using versions before PHP 4.3.0, the you will need to copy the Makefile.in.old to Makefile.in and config.m4.old to config.m4.
  • run phpize in ext/bcompiler
  • run ./buildconf in php4
  • run configure with --enable-bcompiler (and your other options)
  • make; make install
  • that's it.



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Diese Erweiterung definiert keine Konstanten.



bcompiler Funktionen

Contact Information

If you have comments, bugfixes, enhancements or want to help developing this beast, you can drop me a mail at » alan_k@php.net. Any help is very welcome.


bcompiler_load_exe

(PECL bcompiler >= 0.4)

bcompiler_load_exeReads and creates classes from a bcompiler exe file

Beschreibung

bool bcompiler_load_exe ( string $filename )

Reads data from a bcompiler exe file and creates classes from the bytecodes.

Parameter-Liste

filename

The exe file path, as a string.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_load_exe() example

<?php

bcompiler_load_exe
("/tmp/example.exe");
print_r(get_defined_classes());

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Siehe auch



bcompiler_load

(PECL bcompiler >= 0.4)

bcompiler_loadReads and creates classes from a bz compressed file

Beschreibung

bool bcompiler_load ( string $filename )

Reads data from a bzcompressed file and creates classes from the bytecodes.

Parameter-Liste

filename

The bzcompressed file path, as a string.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_load() example

<?php

bcompiler_load
("/tmp/example");

print_r(get_defined_classes());

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Hinweis: Please use include or require statements to parse bytecodes, it's more portable and convenient way than using this function.
Please note that this function won't execute script body code contained in the bytecode file.

Siehe auch



bcompiler_parse_class

(PECL bcompiler >= 0.4)

bcompiler_parse_classReads the bytecodes of a class and calls back to a user function

Beschreibung

bool bcompiler_parse_class ( string $class , string $callback )

Reads the bytecodes of a class and calls back to a user function.

Parameter-Liste

class

The class name, as a string.

callback

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_parse_class() example

<?php

function readByteCodes($data) {
    
print_r($data);
}

bcompiler_parse_class("DB","readByteCodes");

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Hinweis: This function has been removed from bcompiler and is no longer available as of bcompiler 0.5.



bcompiler_read

(PECL bcompiler >= 0.4)

bcompiler_readReads and creates classes from a filehandle

Beschreibung

bool bcompiler_read ( resource $filehandle )

Reads data from a open file handle and creates classes from the bytecodes.

Parameter-Liste

filehandle

A file handle as returned by fopen().

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_read() example

<?php
$fh 
fopen("/tmp/example","r");
bcompiler_read($fh);
fclose($fh);
print_r(get_defined_classes());

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Hinweis: Please use include or require statements to parse bytecodes, it's more portable and convenient way than using this function.
Please note that this function won't execute script body code contained in the bytecode file.



bcompiler_write_class

(PECL bcompiler >= 0.4)

bcompiler_write_classWrites an defined class as bytecodes

Beschreibung

bool bcompiler_write_class ( resource $filehandle , string $className [, string $extends ] )

Reads the bytecodes from PHP for an existing class, and writes them to the open file handle.

Parameter-Liste

filehandle

A file handle as returned by fopen().

className

The class name, as a string.

extends

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_write_class() example

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
// you must write DB_common before DB_mysql, as DB_mysql extends DB_common.
bcompiler_write_class($fh,"DB_common");
bcompiler_write_class($fh,"DB_mysql");
bcompiler_write_footer($fh);
fclose($fh);

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Hinweis: This function does not perform dependency checking, so make sure you write the classes in an order that will not result in an undefined class error occurring when you load it.

Siehe auch



bcompiler_write_constant

(PECL bcompiler >= 0.5)

bcompiler_write_constantWrites a defined constant as bytecodes

Beschreibung

bool bcompiler_write_constant ( resource $filehandle , string $constantName )

Reads the bytecodes from PHP for an existing constant, and writes them to the open file handle.

Parameter-Liste

filehandle

A file handle as returned by fopen().

constantName

The name of the defined constant, as a string.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_write_constant() example

<?php
define
("MODULE_MAX"30);

$fh fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_constant($fh,"MODULE_MAX");
bcompiler_write_footer($fh);
fclose($fh);

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Siehe auch




bcompiler_write_file

(PECL bcompiler >= 0.6)

bcompiler_write_fileWrites a php source file as bytecodes

Beschreibung

bool bcompiler_write_file ( resource $filehandle , string $filename )

This function complies specified source file into bytecodes, and writes them to the open file handle.

Parameter-Liste

filehandle

A file handle as returned by fopen().

filename

The source file path, as a string.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_write_file() example

<?php
$fh 
fopen("example.phb""w");
bcompiler_write_header($fh);
bcompiler_write_file($fh"example.php");
bcompiler_write_footer($fh);
fclose($fh);
/* the following should be equivalent:
include "example.php";
   and
include "example.phb";
*/
?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Siehe auch




bcompiler_write_function

(PECL bcompiler >= 0.5)

bcompiler_write_functionWrites an defined function as bytecodes

Beschreibung

bool bcompiler_write_function ( resource $filehandle , string $functionName )

Reads the bytecodes from PHP for an existing function, and writes them to the open file handle. Order is not important, (eg. if function b uses function a, and you compile it like the example below, it will work perfectly OK).

Parameter-Liste

filehandle

A file handle as returned by fopen().

functionName

The function name, as a string.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_write_function() example

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_function($fh,"my_function_a");
bcompiler_write_function($fh,"my_function_b");
bcompiler_write_footer($fh);
fclose($fh);

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Siehe auch



bcompiler_write_functions_from_file

(PECL bcompiler >= 0.5)

bcompiler_write_functions_from_fileWrites all functions defined in a file as bytecodes

Beschreibung

bool bcompiler_write_functions_from_file ( resource $filehandle , string $fileName )

Searches for all functions declared in the given file, and writes their correspondent bytecodes to the open file handle.

Parameter-Liste

filehandle

A file handle as returned by fopen().

fileName

The file to be compiled. You must always include or require the file you intend to compile.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_write_functions_from_file() example

<?php
require('module.php');

$fh fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_functions_from_file($fh,'module.php');
bcompiler_write_footer($fh);
fclose($fh);

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Siehe auch



bcompiler_write_header

(PECL bcompiler >= 0.3)

bcompiler_write_headerWrites the bcompiler header

Beschreibung

bool bcompiler_write_header ( resource $filehandle [, string $write_ver ] )

Writes the header part of a bcompiler file.

Parameter-Liste

filehandle

A file handle as returned by fopen().

write_ver

Can be used to write bytecode in a previously used format, so that you can use it with older versions of bcompiler.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 bcompiler_write_header() example

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
bcompiler_write_footer($fh);
fclose($fh);

?>

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Siehe auch



bcompiler_write_included_filename

(PECL bcompiler >= 0.5)

bcompiler_write_included_filenameWrites an included file as bytecodes

Beschreibung

bool bcompiler_write_included_filename ( resource $filehandle , string $filename )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.


Inhaltsverzeichnis




Fehlerbehandlung und Protokollierung


Einführung

Diese Funktionen beschäftigen sich mit Fehlerbehandlung und -protokollierung. Sie ermöglichen es Ihnen, sowohl Ihre eigenen Fehlerbehandlungsregeln aufzustellen als auch die Art, wie Fehler protokolliert werden, zu ändern. Dies gestattet es Ihnen, die Fehlerbehandlung nach Ihren Bedürfnissen zu ändern und zu erweitern.

Die Protokollierungsfunktionen ermöglichen es Ihnen, Fehlermeldungen direkt an andere Maschinen, als Email, in Systemprotokolle usw. zu senden. Sie können so selektiv die wichtigsten Teile Ihrer Applikationen und Websites beobachten und protokollieren.

Die Fehlermeldungsfunktionen gestatten es Ihnen, die Art und das Ausmaß der erzeugten Fehlermeldungen von einfachen Hinweisen bis zu speziell angepassten Funktionsaufrufen beim Auftreten eines Fehlers nach Ihren Bedürfnissen anzupassen.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Für diese Funktionen ist keine Installation erforderlich, diese gehören zum Grundbestand von PHP.



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Errors and Logging Configuration Options
Name Default Changeable Changelog
error_reporting NULL PHP_INI_ALL  
display_errors "1" PHP_INI_ALL  
display_startup_errors "0" PHP_INI_ALL  
log_errors "0" PHP_INI_ALL  
log_errors_max_len "1024" PHP_INI_ALL Available since PHP 4.3.0.
ignore_repeated_errors "0" PHP_INI_ALL Available since PHP 4.3.0.
ignore_repeated_source "0" PHP_INI_ALL Available since PHP 4.3.0.
report_memleaks "1" PHP_INI_ALL Available since PHP 4.3.0.
track_errors "0" PHP_INI_ALL  
html_errors "1" PHP_INI_ALL PHP_INI_SYSTEM in PHP <= 4.2.3.
xmlrpc_errors "0" PHP_INI_SYSTEM Available since PHP 4.1.0.
xmlrpc_error_number "0" PHP_INI_ALL Available since PHP 4.1.0.
docref_root "" PHP_INI_ALL Available since PHP 4.3.0.
docref_ext "" PHP_INI_ALL Available since PHP 4.3.2.
error_prepend_string NULL PHP_INI_ALL  
error_append_string NULL PHP_INI_ALL  
error_log NULL PHP_INI_ALL  

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

error_reporting integer

Set the error reporting level. The parameter is either an integer representing a bit field, or named constants. The error_reporting levels and constants are described in Predefined Constants, and in php.ini. To set at runtime, use the error_reporting() function. See also the display_errors directive.

In PHP 4 and PHP 5 the default value is E_ALL & ~E_NOTICE. This setting does not show E_NOTICE level errors. You may want to show them during development.

Hinweis: Enabling E_NOTICE during development has some benefits. For debugging purposes: NOTICE messages will warn you about possible bugs in your code. For example, use of unassigned values is warned. It is extremely useful to find typos and to save time for debugging. NOTICE messages will warn you about bad style. For example, $arr[item] is better to be written as $arr['item'] since PHP tries to treat "item" as constant. If it is not a constant, PHP assumes it is a string index for the array.

Hinweis: In PHP 5 a new error level E_STRICT is available. As E_STRICT is not included within E_ALL you have to explicitly enable this kind of error level. Enabling E_STRICT during development has some benefits. STRICT messages will help you to use the latest and greatest suggested method of coding, for example warn you about using deprecated functions.

Hinweis: PHP Constants outside of PHP
Using PHP Constants outside of PHP, like in httpd.conf, will have no useful meaning so in such cases the integer values are required. And since error levels will be added over time, the maximum value (for E_ALL) will likely change. So in place of E_ALL consider using a larger value to cover all bit fields from now and well into the future, a numeric value like 2147483647.

display_errors string

This determines whether errors should be printed to the screen as part of the output or if they should be hidden from the user.

Value "stderr" sends the errors to stderr instead of stdout. The value is available as of PHP 5.2.4. In earlier versions, this directive was of type boolean.

Hinweis: This is a feature to support your development and should never be used on production systems (e.g. systems connected to the internet).

Hinweis: Although display_errors may be set at runtime (with ini_set()), it won't have any affect if the script has fatal errors. This is because the desired runtime action does not get executed.

display_startup_errors boolean

Even when display_errors is on, errors that occur during PHP's startup sequence are not displayed. It's strongly recommended to keep display_startup_errors off, except for debugging.

log_errors boolean

Tells whether script error messages should be logged to the server's error log or error_log. This option is thus server-specific.

Hinweis: You're strongly advised to use error logging in place of error displaying on production web sites.

log_errors_max_len integer

Set the maximum length of log_errors in bytes. In error_log information about the source is added. The default is 1024 and 0 allows to not apply any maximum length at all. This length is applied to logged errors, displayed errors and also to $php_errormsg.

Wird ein integer-Wert verwendet, wird dieser Wert in Bytes gemessen. Sie können auch die Kurzschreibweise verwenden, wie in dieser FAQ beschrieben.
ignore_repeated_errors boolean

Do not log repeated messages. Repeated errors must occur in the same file on the same line unless ignore_repeated_source is set true.

ignore_repeated_source boolean

Ignore source of message when ignoring repeated messages. When this setting is On you will not log errors with repeated messages from different files or sourcelines.

report_memleaks boolean

If this parameter is set to Off, then memory leaks will not be shown (on stdout or in the log). This has only effect in a debug compile, and if error_reporting includes E_WARNING in the allowed list

track_errors boolean

If enabled, the last error message will always be present in the variable $php_errormsg.

html_errors boolean

Turn off HTML tags in error messages. The new format for HTML errors produces clickable messages that direct the user to a page describing the error or function in causing the error. These references are affected by docref_root and docref_ext.

xmlrpc_errors boolean

Turns off normal error reporting and formats errors as XML-RPC error message.

xmlrpc_error_number integer

Used as the value of the XML-RPC faultCode element.

docref_root string

The new error format contains a reference to a page describing the error or function causing the error. In case of manual pages you can download the manual in your language and set this ini directive to the URL of your local copy. If your local copy of the manual can be reached by "/manual/" you can simply use docref_root=/manual/ . Additional you have to set docref_ext to match the fileextensions of your copy docref_ext=.html . It is possible to use external references. For example you can use docref_root=http://manual/en/ or docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"

Most of the time you want the docref_root value to end with a slash "/". But see the second example above which does not have nor need it.

Hinweis: This is a feature to support your development since it makes it easy to lookup a function description. However it should never be used on production systems (e.g. systems connected to the internet).

docref_ext string

See docref_root.

Hinweis: The value of docref_ext must begin with a dot ".".

error_prepend_string string

String to output before an error message.

error_append_string string

String to output after an error message.

error_log string

Name of the file where script errors should be logged. The file should be writable by the web server's user. If the special value syslog is used, the errors are sent to the system logger instead. On Unix, this means syslog(3) and on Windows NT it means the event log. The system logger is not supported on Windows 95. See also: syslog(). If this directive is not set, errors are sent to the SAPI error logger. For example, it is an error log in Apache or stderr in CLI.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Die aufgelisteten Konstanten stehen immer zur Verfügung, da sie zum Grundbestand von PHP gehören.

Hinweis: Sie können diese Konstanten innerhalb von php.ini benutzen, aber nicht ausserhalb von PHP, wie etwa in der httpd.conf, wo Sie stattdessen die Werte der Bitmasken benutzen sollten.

Fehler und Meldungen
Wert Konstante Beschreibung Bemerkung
1 E_ERROR (integer) Fatale Laufzeit-Fehler. Dies zeigt Fehler an, die nicht behoben werden können. Beispielsweise Probleme bei der Speicherzuweisung. Die Ausführung des Skripts wird abgebrochen.  
2 E_WARNING (integer) Warnungen (keine fatalen Fehler) zur Laufzeit des Skripts. Das Skript wird nicht abgebrochen.  
4 E_PARSE (integer) Parser-Fehler während der Übersetzung. Parser-Fehler können nur vom Parser erzeugt werden.  
8 E_NOTICE (integer) Benachrichtigungen während der Laufzeit. Sie zeigen an, dass im Skript irgend etwas gefunden wurde, was einen Fehler verursachen könnte. Es ist aber genauso möglich, dass Benachrichtigungen im ordnungsgemäßen Ablauf eines Skripts ausgegeben werden.  
16 E_CORE_ERROR (integer) Fatale Fehler, die beim Starten von PHP auftreten. Diese sind ähnlich wie E_ERROR, nur dass diese Fehlermeldungen vom PHP-Kern erzeugt werden. seit PHP 4
32 E_CORE_WARNING (integer) Warnungen (keine fatalen Fehler), die beim Starten von PHP auftreten. Diese sind ähnlich wie E_WARNING, nur dass diese Warnungen vom PHP-Kern erzeugt werden. seit PHP 4
64 E_COMPILE_ERROR (integer) Fatale Fehler zur Übersetzungszeit. Diese sind ähnlich wie E_ERROR, nur dass diese Fehlermeldungen von der Zend Scripting Engine erzeugt werden. seit PHP 4
128 E_COMPILE_WARNING (integer) Warnungen zur Übersetzungszeit. Diese sind ähnlich wie E_WARNING, nur dass diese Warnungen von der Zend Scripting Engine erzeugt werden. seit PHP 4
256 E_USER_ERROR (integer) Benutzerdefinierte Fehlermeldungen. Diese sind ähnlich wie E_ERROR, nur dass diese Fehlermeldungen im PHP-Code mit trigger_error() erzeugt werden. seit PHP 4
512 E_USER_WARNING (integer) Benutzerdefinierte Warnungen. Diese sind ähnlich wie E_WARNING, nur dass diese Warnungen im PHP-Code mit trigger_error() erzeugt werden. seit PHP 4
1024 E_USER_NOTICE (integer) Benutzerdefinierte Benachrichtigung. Diese sind ähnlich wie E_NOTICE, nur dass diese Benachrichtigungen im PHP-Code mit trigger_error() erzeugt werden. seit PHP 4
2048 E_STRICT (integer) Benachrichtigungen des Laufzeitsystems. Damit erhalten Sie von PHP Vorschläge für Änderungen des Programmcodes, die eine bestmögliche Interoperabilität und zukünftige Kompatibilität Ihres Codes gewährleisten. seit PHP 5
4096 E_RECOVERABLE_ERROR (integer) Abfangbarer fataler Fehler. Dies bedeutet das ein potentiell gefährlicher Fehler aufgetreten ist, die Engine aber nicht in einem instabilen Zustand hinterlassen hat. Wird der Fehler nicht durch eine benutzerdefinierte Fehlerbehandlungsroutine abgefangen (siehe auch set_error_handler()) so wird die Anwendung wie bei einem E_ERROR Fehler abgebrochen. since PHP 5.2.0
8192 E_DEPRECATED (integer) Notices zur Laufzeit des Programms. Aktivieren Sie diese Einstellung, um Warnungen über Codebestandteile zu erhalten, die in zukünftigen PHP-Versionen nicht mehr funktionieren werden. since PHP 5.3.0
16384 E_USER_DEPRECATED (integer) Benutzererzeugte Warnmeldung. Diese entspricht E_DEPRECATED mit der Ausnahme, dass sie im PHP-Code durch die Verwendung der Funktion trigger_error() generiert wurde. since PHP 5.3.0
30719 E_ALL (integer) Alle Fehler und Warnungen die unterstützt werden, mit Ausnahme von E_STRICT in PHP-Versionen < 6. 32767 in PHP 6, 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously

Mit den obengennnten Werten (sowohl nummerisch als auch mit den Konstanten) wird eine Bitmaske erzeugt, die festlegt, welche Fehler angezeigt werden sollen. Mit den Bit Operatoren können Sie diese Werte kombinieren oder bestimmte Fehlertypen ausmaskieren. Beachten Sie, dass innerhalb von php.ini jedoch nur '|', '~', '!', '^' and '&' verstanden wird.



Beispiele

Below we can see an example of using the error handling capabilities in PHP. We define an error handling function which logs the information into a file (using an XML format), and e-mails the developer in case a critical error in the logic happens.

Beispiel #1 Using error handling in a script

<?php
// we will do our own error handling
error_reporting(0);

// user defined error handling function
function userErrorHandler($errno$errmsg$filename$linenum$vars
{
    
// timestamp for the error entry
    
$dt date("Y-m-d H:i:s (T)");

    
// define an assoc array of error string
    // in reality the only entries we should
    // consider are E_WARNING, E_NOTICE, E_USER_ERROR,
    // E_USER_WARNING and E_USER_NOTICE
    
$errortype = array (
                
E_ERROR              => 'Error',
                
E_WARNING            => 'Warning',
                
E_PARSE              => 'Parsing Error',
                
E_NOTICE             => 'Notice',
                
E_CORE_ERROR         => 'Core Error',
                
E_CORE_WARNING       => 'Core Warning',
                
E_COMPILE_ERROR      => 'Compile Error',
                
E_COMPILE_WARNING    => 'Compile Warning',
                
E_USER_ERROR         => 'User Error',
                
E_USER_WARNING       => 'User Warning',
                
E_USER_NOTICE        => 'User Notice',
                
E_STRICT             => 'Runtime Notice',
                
E_RECOVERABLE_ERROR  => 'Catchable Fatal Error'
                
);
    
// set of errors for which a var trace will be saved
    
$user_errors = array(E_USER_ERRORE_USER_WARNINGE_USER_NOTICE);
    
    
$err "<errorentry>\n";
    
$err .= "\t<datetime>" $dt "</datetime>\n";
    
$err .= "\t<errornum>" $errno "</errornum>\n";
    
$err .= "\t<errortype>" $errortype[$errno] . "</errortype>\n";
    
$err .= "\t<errormsg>" $errmsg "</errormsg>\n";
    
$err .= "\t<scriptname>" $filename "</scriptname>\n";
    
$err .= "\t<scriptlinenum>" $linenum "</scriptlinenum>\n";

    if (
in_array($errno$user_errors)) {
        
$err .= "\t<vartrace>" wddx_serialize_value($vars"Variables") . "</vartrace>\n";
    }
    
$err .= "</errorentry>\n\n";
    
    
// for testing
    // echo $err;

    // save to the error log, and e-mail me if there is a critical user error
    
error_log($err3"/usr/local/php4/error.log");
    if (
$errno == E_USER_ERROR) {
        
mail("phpdev@example.com""Critical User Error"$err);
    }
}


function 
distance($vect1$vect2
{
    if (!
is_array($vect1) || !is_array($vect2)) {
        
trigger_error("Incorrect parameters, arrays expected"E_USER_ERROR);
        return 
NULL;
    }

    if (
count($vect1) != count($vect2)) {
        
trigger_error("Vectors need to be of the same size"E_USER_ERROR);
        return 
NULL;
    }

    for (
$i=0$i<count($vect1); $i++) {
        
$c1 $vect1[$i]; $c2 $vect2[$i];
        
$d 0.0;
        if (!
is_numeric($c1)) {
            
trigger_error("Coordinate $i in vector 1 is not a number, using zero"
                            
E_USER_WARNING);
            
$c1 0.0;
        }
        if (!
is_numeric($c2)) {
            
trigger_error("Coordinate $i in vector 2 is not a number, using zero"
                            
E_USER_WARNING);
            
$c2 0.0;
        }
        
$d += $c2*$c2 $c1*$c1;
    }
    return 
sqrt($d);
}

$old_error_handler set_error_handler("userErrorHandler");

// undefined constant, generates a warning
$t I_AM_NOT_DEFINED;

// define some "vectors"
$a = array(23"foo");
$b = array(5.54.3, -1.6);
$c = array(1, -3);

// generate a user error
$t1 distance($c$b) . "\n";

// generate another user error
$t2 distance($b"i am not an array") . "\n";

// generate a warning
$t3 distance($a$b) . "\n";

?>



Fehlerbehandlungsfunktionen

Siehe auch

Siehe auch syslog().


debug_backtrace

(PHP 4 >= 4.3.0, PHP 5)

debug_backtraceErzeugt Daten zur Ablaufverfolgung

Beschreibung

array debug_backtrace ([ bool $provide_object = true ] )

debug_backtrace() erzeugt Daten zur Ablaufverfolgung.

Parameter-Liste

provide_object

Legt fest, ob der "Objekt"-Index befüllt wird. Standardwert ist TRUE.

Rückgabewerte

Gibt ein assoziatives Array zurück. Als zurückgegebene Arrayelemente von debug_backtrace() sind möglich:

Mögliche Rückgabewerte von debug_backtrace()
Name Typ Beschreibung
function string Der Name der aktuell ausgeführten Funktion. Siehe auch __FUNCTION__.
line integer Die aktuelle Zeilennummer. Siehe auch __LINE__.
file string Der aktuelle Dateiname. Siehe auch __FILE__.
class string Der aktuelle class - Name. Siehe auch __CLASS__.
object object Das aktuelle Objekt.
type string Der aktuelle Typ des Aufrufs. Falls der Aufruf in einer Methode erfolgte, wird "->" zurückgegeben. Falls der Aufruf aus einer statischen Funktion erfolgte, wird "::" zurückgegeben und falls der Aufruf aus einer Funktion erfolgte, wird nichts zurückgegeben.
args array Falls der Aufruf aus einer Funktion erfolgte, werden hier die Funktionsargumente aufgelistet. Falls der Aufruf aus einer eingebundenen Datei erfolgte, werden die Namen der Include-Dateien angegeben.

Changelog

Version Beschreibung
5.2.5 Der optionale Parameter provide_object wurde hinzugefügt.
5.1.1 Aktuelles object als möglichen Rückgabewert hinzugefügt.

Beispiele

Beispiel #1 debug_backtrace()-Beispiel

<?php
// Dateiname: /tmp/a.php

function a_test($str)
{
    echo 
"\nHi: $str";
    
var_dump(debug_backtrace());
}

a_test('friend');
?>

<?php
// Dateiname: /tmp/b.php
include_once '/tmp/a.php';
?>

Ergebnisse beim Aufruf von /tmp/b.php:

Hi: friend
array(2) {
  [0]=>
  array(4) {
    ["file"] => string(10) "/tmp/a.php"
    ["line"] => int(10)
    ["function"] => string(6) "a_test"
    ["args"]=>
    array(1) {
      [0] => &string(6) "friend"
    }
  }
  [1]=>
  array(4) {
    ["file"] => string(10) "/tmp/b.php"
    ["line"] => int(2)
    ["args"] =>
    array(1) {
      [0] => string(10) "/tmp/a.php"
    }
    ["function"] => string(12) "include_once"
  }
}

Siehe auch



debug_print_backtrace

(PHP 5)

debug_print_backtrace Druckt die Daten für eine Ablaufverfolgung

Beschreibung

void debug_print_backtrace ( void )

debug_print_backtrace() gibt eine PHP Ablaufverfolgung aus. Diese enthält Ausgaben zu allen Funktionsaufrufen, mit include() oder require() eingebundenen Dateien und mit eval() ausgeführtem Kode.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 debug_print_backtrace() Beispiel

<?php
// include.php Datei

function a() {
    
b();
}

function 
b() {
    
c();
}

function 
c(){
    
debug_print_backtrace();
}

a();

?>
<?php
// test.php Datei
// Dies ist die Datei die Sie ausführen sollten

include 'include.php';
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

#0  eval() called at [/tmp/include.php:5]
#1  a() called at [/tmp/include.php:17]
#2  include(/tmp/include.php) called at [/tmp/test.php:3]

#0  c() called at [/tmp/include.php:10]
#1  b() called at [/tmp/include.php:6]
#2  a() called at [/tmp/include.php:17]
#3  include(/tmp/include.php) called at [/tmp/test.php:3]

Siehe auch



error_get_last

(PHP 5 >= 5.2.0)

error_get_lastLiefert den zuletzt aufgetretenen Fehler

Beschreibung

array error_get_last ( void )

Liefert Informationen über den zuletzt aufgetretenen Fehler

Rückgabewerte

Gibt ein assoziatives Array zurück das den zuletzt aufgetretenen Fehler mit den Elementen "type" (für die Art des Fehlers), "message" (für die Fehlermeldung) sowie "file" und "line" (für den Ort an dem der Fehler aufgetreten ist) beschreibt. Wenn bisher noch kein Fehler aufgetreten ist, wird NULL zurückgegeben.

Beispiele

Beispiel #1 error_get_last()-Beispiel

<?php
echo $a;
print_r(error_get_last());
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [type] => 8
    [message] => Undefined variable: a
    [file] => C:\WWW\index.php
    [line] => 2
)



error_log

(PHP 4, PHP 5)

error_logSendet eine Fehlermeldung irgendwo hin

Beschreibung

bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )

Sendet eine Fehlermeldung an das Fehlerprotokoll (Errorlog) des Webservers, an einen TCP-Port oder an eine Datei.

Parameter-Liste

message

Die Fehlermeldung, die protokolliert werden soll.

message_type

Sagt, wohin der Fehler gehen soll. Folgende Meldungstypen sind möglich:

error_log()-Protokolltypen
0 message wird an das Log-Subsystem von PHP gesendet, das abhängig von der Einstellung in der Konfigurationsdirektive error_log das Errorlogging des Betriebssystems verwendet oder in eine Datei schreibt. Dies ist die Standardeinstellung.
1 message wird via E-Mail an die Adresse gesendet, die im Parameter destination angegeben wurde. Dies ist der einzige Meldungstyp, bei dem der vierte Parameter extra_headers verwendet wird.
2 Diese Option ist nicht mehr verfügbar.
3 message wird an die Datei destination angefügt. Ein Zeilenumbruch wird nicht automatisch an das Ende des message -Strings angehängt.
4 message wird direkt zum SAPI-Logging-Handler gesendet.

destination

Das Ziel. Die jeweilige Bedeutung hängt wie oben beschrieben vom Parameter message_type ab.

extra_headers

Die zusätzlichen Kopfzeilen. Dieser Parameter wird verwendet, wenn der Parameter message_type auf 1 gesetzt ist. Dieser Meldungstyp verwendet dieselbe interne Funktion wie mail().

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Changelog

Version Beschreibung
5.2.7 Der mögliche Wert 4 wurde zum Parameter message_type hinzugefügt.

Beispiele

Beispiel #1 error_log()-Beispiele

<?php
// Sende eine Nachricht an das Serverlog, falls
// keine Verbindung zur Datenbank herstellbar ist.
if (!Ora_Logon($benutzername$passwort)) {
    
error_log("Die Oracle-Datenbank ist nicht erreichbar!"0);
}

// Benachrichtige den Administrator per E-Mail, falls kein FOO mehr verfügbar ist.
if (!($foo allocate_new_foo())) {
    
error_log("Wir haben ein Problem: FOO ist alle!"1,
               
"operator@example.com");
}

// Eine weitere Möglichkeit, error_log() aufzurufen:
error_log("Du hast Mist gebaut!"3"/var/tmp/meine-fehler.log");
?>



error_reporting

(PHP 4, PHP 5)

error_reporting Gibt an, welche PHP-Fehlermeldungen angezeigt werden

Beschreibung

int error_reporting ([ int $level ] )

Mit error_reporting() wird die error_reporting Direktive zur Laufzeit des Programms gesetzt. In PHP gibt es viele Stufen für die Anzeige von Fehlermeldungen, die mit dieser Funktion für die Dauer der Programmausführung eingestellt werden kann.

Parameter-Liste

level

Das neue error_reporting Level. Es können sowohl eine numerische Bitmaske als auch benannte Konstanten übergeben werden. Der Einsatz benannter Konstanten wird empfohlen um die Kompatibilität mit zukünftigen Versionen sicherzustellen. Wann immer Error Level Konstanten hinzugefügt werden erweitert sich der genutzte Integerbereich so das ältere Integerkonstanten nicht unbedingt weiter das erwartete Verhalten zeigen.

Die folgende Tabelle listet die verfügbaren Konstanten auf. Die Bedeutung der jeweiligen Error Level finden Sie im Abschnitt predefined constants.

error_reporting() Level Konstanten und Bit-Werte
value constant
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
6143 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR
8192 E_DEPRECATED
16384 E_USER_DEPRECATED

Rückgabewerte

Gibt den bisherigen error_reporting Wert zurück level.

Changelog

Version Beschreibung
5.0.0 E_STRICT wurde hinzugefügt (ist aber nicht Teil von E_ALL).
5.2.0 E_RECOVERABLE_ERROR wurde hinzugefügt.
5.3.0 E_DEPRECATED und E_USER_DEPRECATED wurden hinzugefügt.
6 E_STRICT ist nun in E_ALL enthalten.

Beispiele

Beispiel #1 error_reporting() Beispiel

<?php

// Error Reporting komplett abschalten
error_reporting(0);

// Nur einfache Fehler melden
error_reporting(E_ERROR E_WARNING E_PARSE);

// E_NOTICE ist sinnvoll um uninitialisierte oder
// falsch geschriebene Variablen zu entdecken
error_reporting(E_ERROR E_WARNING E_PARSE E_NOTICE);

// Melde alle Fehler außer E_NOTICE
// Dies ist der Vorgabewert in php.ini
error_reporting(E_ALL E_NOTICE);

// Melde alle PHP Fehler
error_reporting(E_ALL);

// Dies entspricht error_reporting(E_ALL);
ini_set('error_reporting'E_ALL);

?>

Anmerkungen

Warnung

Most of E_STRICT errors are evaluated at the compile time thus such errors are not reported in the file where error_reporting is enhanced to include E_STRICT errors (and vice versa).

Siehe auch



restore_error_handler

(PHP 4 >= 4.0.1, PHP 5)

restore_error_handler Rekonstruiert die zuvor benutzte Fehlerbehandlungsfunktion

Beschreibung

bool restore_error_handler ( void )

Diese Funktion wird benutzt, um eine mit set_error_handler() gesetzte Fehlerbehandlungsfunktion wieder zurückzusetzen und zur zuvor benutzten Fehlerbehandlung zurückzukehren. (Dies kann entweder eine eingebaute oder eine benutzerdefinierte Funktion sein.)

Rückgabewerte

Diese Funktion gibt immer TRUE zurück.

Beispiele

Beispiel #1 restore_error_handler() Beispiel

Prüft ob unserialize() einen Fehler verursacht, danach wird der ursprüngliche Error-Handler wiederhergestellt.

<?php
function unserialize_handler($errno$errstr)
{
    echo 
"Ungültiger serialisierter Wert.\n";
}

$serialized 'foo';
set_error_handler('unserialize_handler');
$original unserialize($serialized);
restore_error_handler();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Ungültiger serialisierter Wert.

Anmerkungen

Hinweis: Calling restore_error_handler() from the error_handler function is ignored.

Siehe auch



restore_exception_handler

(PHP 5)

restore_exception_handler Stellt den vorherigen Exceptionhandler wieder her

Beschreibung

bool restore_exception_handler ( void )

Diese Funktion kann genutzt werdem um die Installation eines Exceptionhandlers mit set_exception_handler() rückgängig zu machen und den vorherigen Handler wieder in Kraft zu setzen (entweder den eingebauten oder eine andere benutzerdefinierte Funktion).

Rückgabewerte

Diese Funktion gibt immer TRUE zurück.

Beispiele

Beispiel #1 restore_exception_handler() Beispiel

<?php
    
function exception_handler_1(Exception $e)
    {
        echo 
'[' __FUNCTION__ '] ' $e->getMessage();
    }

    function 
exception_handler_2(Exception $e)
    {
        echo 
'[' __FUNCTION__ '] ' $e->getMessage();
    }

    
set_exception_handler('exception_handler_1');
    
set_exception_handler('exception_handler_2');

    
restore_exception_handler();

    throw new 
Exception('Dies löst den ersten Exceptionhandler aus ...');
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

[exception_handler_1] Dies löst den ersten Exceptionhandler aus ...

Siehe auch



set_error_handler

(PHP 4 >= 4.0.1, PHP 5)

set_error_handlerBestimmt eine benutzerdefinierte Funktion zur Fehlerbehandlung

Beschreibung

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

Setzt eine benutzerdefinierte Funktion (error_handler ), um Fehler in einem Skript zu behandeln.

Mit dieser Funktion können Sie Ihre eigene Behandlung von Laufzeitfehlern definieren, beispielsweise in Anwendungen, die bei einem kritischen Fehler die Löschung von Daten bzw. Dateien erfordert, oder wenn es nötig ist, unter bestimmten Bedingungen (mit der Funktion trigger_error()) eine Fehlermeldung zu generieren.

Vergessen Sie bei der Implementation auf keinen Fall, dass auf diese Weise die standardmäßige PHP-Fehlerbehandlung vollkommen umgangen wird! Die Einstellungen der Funktion error_reporting() haben keine Auswirkung, und Ihre eigene Fehlerbehandlungsroutine wird ohne Rücksicht darauf aufgerufen. Sie können jedoch immer noch den aktuellen Wert von error_reporting lesen und entsprechend handeln. Es ist besonders zu beachten, dass dieser Wert 0 sein wird, falls die Anweisung, die den Fehler verursacht hat, mit dem @ Fehler-Kontroll-Operator versehen ist.

Beachten Sie auch, dass Sie dafür zuständig sind, bei Bedarf die() aufzurufen. Nach der Funktion für die Fehlerbehandlung wird die Ausführung des Skripts bei der Anweisung fortgesetzt, die auf die Fehler verursachende Anweisung folgt.

Die folgenden Fehlertypen können nicht von einer benutzerdefinierten Funktion behandelt werden: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING und die meisten E_STRICT, die in der Datei ausgelöst werden, in der set_error_handler() aufgerufen wird.

Falls Fehler auftreten, bevor das Skript ausgeführt wird (z.B. beim Hochladen von Dateien), kann eine benutzerdefinierte Fehlerbehandlung nicht aufgerufen werden, weil sie zu diesem Zeitpunkt noch nicht registriert ist.

Parameter-Liste

error_handler

Die benutzerdefinierte Funktion erwartet notwendig zwei Parameter: den Fehlercode und eine Zeichenkette, die den Fehler beschreibt. Zudem gibt es drei optionale Parameter, die übergeben werden können: der Name der Datei, in der der Fehler auftrat, die Nummer der Zeile, in der der Fehler auftrat, und der Kontext, in welchem der Fehler auftrat (ein Array, das auf die Stelle in der aktiven Symboltabelle verweist, wo der Fehler auftrat). Die Funktion lässt sich wie folgt darstellen:

handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )

errno
Der erste Parameter errno enthält den Schweregrad des ausgelösten Fehlers als Integer.
errstr
Der zweite Parameter errstr enthält die Fehlermeldung als String.
errfile
Der dritte Parameter errfile ist optional. Er enthält den Namen der Datei, in der der Fehler verursacht wurde, als String.
errline
Der vierte Parameter errline ist optional. Er enthält die Zeilennummer, in der der Fehler verursacht wurde, als Integer.
errcontext
Der fünfte Parameter errcontext ist optional. Es handelt sich um ein Array, das auf die Stelle der aktiven Symboltabelle zeigt, die den Fehler verursacht hat. Mit anderen Worten: errcontext enthält ein Array mit allen Variablen, die im fehlerauslösenden Bereich existierten. Die benutzerdefinierte Fehlerbehandlung darf den Fehlerkontext nicht verändern.

Falls diese Funktion FALSE zurückgibt, wird mit der normalen Fehlerbehandlung fortgesetzt.

Fehlertypen

Kann wie die php.ini-Konfigurationseinstellung error_reporting, die bestimmt, welche Fehler angezeigt werden zum Maskieren des Aufrufs der error_handler -Funktion verwendet werden. Wird diese Maske nicht gesetzt, wird error_handler unabhängig von der Einstellung error_reporting bei jedem Fehler aufgerufen.

Rückgabewerte

Gibt eine Zeichenkette, die die zuvor definierte Fehlerbehandlungsroutine enthält (falls eine definiert wurde). Wenn der eingebaute Errorhandler verwendet wurde, wird NULL zurückgegeben. NULL wird ebenfalls zurückgegeben, falls ein Fehler wie z.B. ein ungültiger Callback aufgetreten ist. Wenn der vorgenannte Errorhandler eine Klassenmethode war, gibt die Funktion ein indiziertes Array mit dem Klassen- und dem Methodennamen zurück.

Changelog

Version Beschreibung
5.2.0 Die Fehlerbehandlung muss FALSE zurückgeben, um $php_errormsg zu füllen.
5.0.0 Der Parameter error_types wurde hinzugefügt.
4.3.0 Anstelle eines Funktionsnamens kann auch ein Array, das eine Referenz auf ein Objekt und einen Methodennamen enthält, als error_handler übergeben werden.
4.0.2 Drei optionale Parameter für die Benutzerfunktion error_handler hinzugefügt: den Dateinamen, die Zeilennummer und den Kontext.

Beispiele

Beispiel #1 Fehlerbehandlung mit set_error_handler() und trigger_error()

Das untenstehende Beispiel zeigt die Behandlung von internen Ausnahmen, indem Fehler ausgelöst und durch eine benutzerdefinierte Funktion behandelt werden:

<?php
// Fehlerbehandlungsfunktion
function myErrorHandler($fehlercode$fehlertext$fehlerdatei$fehlerzeile)
{
    switch (
$fehlercode) {
    case 
E_USER_ERROR:
        echo 
"<b>Mein FEHLER</b> [$fehlercode$fehlertext<br />\n";
        echo 
"  Fataler Fehler in Zeile $fehlerzeile in der Datei $fehlerdatei";
        echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
        echo 
"Abbruch...<br />\n";
        exit(
1);
        break;

    case 
E_USER_WARNING:
        echo 
"<b>Meine WARNUNG</b> [$fehlercode$fehlertext<br />\n";
        break;

    case 
E_USER_NOTICE:
        echo 
"<b>Mein HINWEIS</b> [$fehlercode$fehlertext<br />\n";
        break;

    default:
        echo 
"Unbekannter Fehlertyp: [$fehlercode$fehlertext<br />\n";
        break;
    }

    
/* Damit die PHP-interne Fehlerbehandlung nicht ausgeführt wird */
    
return true;
}

// Funktion zum Test der Fehlerbehandlung
function logarithmisch_skalieren($vektor$skalierung)
{
    if (!
is_numeric($skalierung) || $skalierung <= 0) {
        
trigger_error("log(x) ist für x <= 0 nicht definiert, Sie verwendeten: skalierung = $skalierung"E_USER_ERROR);
    }

    if (!
is_array($vektor)) {
        
trigger_error("Fehlerhafter Eingabevektor, es wird ein Wertearray erwartet"E_USER_WARNING);
        return 
null;
    }

    
$temp = array();
    foreach(
$vektor as $pos => $wert) {
        if (!
is_numeric($wert)) {
            
trigger_error("Der Wert an Position $pos ist keine Zahl, verwende 0 (Null)"E_USER_NOTICE);
            
$wert 0;
        }
        
$temp[$pos] = log($skalierung) * $wert;
    }

    return 
$temp;
}

// auf die benutzerdefinierte Fehlerbehandlung umstellen
$alter_error_handler set_error_handler("myErrorHandler");

// ein paar Fehler auslösen, zuerst wird ein gemischtes Array mit einem
// nichtnumerischen Eintrag definiert
echo "Vektor a\n";
$a = array(23"foo"5.543.321.11);
print_r($a);

// ein zweites Array erzeugen
echo "----\nVektor b - ein Hinweis (b = log(PI) * a)\n";
/* Der Wert an Position $pos ist keine Zahl, verwende 0 (Null) */
$b logarithmisch_skalieren($aM_PI);
print_r($b);

// das gibt Ärger: statt eines Arrays wird eine Zeichenkette übergeben
echo "----\nVektor c - eine Warnung\n";
/* Fehlerhafter Eingabevektor, es wird ein Wertearray erwartet */
$c logarithmisch_skalieren("kein Array"2.3);
var_dump($c); // NULL

// dies ist ein kritischer Fehler: log ist für Null oder negative Werte
// nicht definiert
echo "----\nVektor d - fataler Fehler\n";
/* log(x) ist für x <= 0 nicht definiert, Sie verwendeten: skalierung = $skalierung */
$d logarithmisch_skalieren($a, -2.5);
var_dump($d); // wird nie erreicht
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Vektor a
Array
(
    [0] => 2
    [1] => 3
    [2] => foo
    [3] => 5.5
    [4] => 43.3
    [5] => 21.11
)
----
Vektor b - ein Hinweis (b = log(PI) * a)
<b>Mein HINWEIS</b> [1024] Der Wert an Position 2 ist keine Zahl, verwende 0 (Null)<br />
Array
(
    [0] => 2.2894597716988
    [1] => 3.4341896575482
    [2] => 0
    [3] => 6.2960143721717
    [4] => 49.566804057279
    [5] => 24.165247890281
)
----
Vektor c - eine Warnung
<b>Meine WARNUNG</b> [512] Fehlerhafter Eingabevektor, es wird ein Wertearray erwartet<br />
NULL
----
Vektor d - fataler Fehler
<b>Mein FEHLER</b> [256] log(x) ist für x <= 0 nicht definiert, Sie verwendeten: skalierung = -2.5<br />
  Fataler Fehler in Zeile 35 in der Datei trigger_error.php, PHP 5.2.1 (FreeBSD)<br />
Abbruch...<br />

Siehe auch



set_exception_handler

(PHP 5)

set_exception_handler Installiert einen benutzerdefinierten Exceptionhandler

Beschreibung

string set_exception_handler ( callback $exception_handler )

Setzt den Standardexceptionhandler für Exceptions die nicht von einem try/catch Block aufgefangen wurden. Nach dem Aufruf von exception_handler wird die Ausführung angehalten.

Parameter-Liste

exception_handler

Name der Funktion die aufgerufen werden soll wenn eine nicht aufgefangene Exception auftritt. Diese Funktion muss bereits definiert sein wenn set_exception_handler() aufgerufen wird. Die Funktion muss einen Parameter akzeptieren, dieser enthält beim Aufruf das nicht aufgefangene Exception Objekt.

Rückgabewerte

Gibt den Namen des zuvor definierten Exceptionhandlers zurück oder NULL bei Fehlern oder wenn kein vorheriger Exceptionhandler installiert war.

Beispiele

Beispiel #1 set_exception_handler() Beispiel

<?php
function exception_handler($exception) {
  echo 
"Nicht aufgefangene Exception: " $exception->getMessage(), "\n";
}

set_exception_handler('exception_handler');

throw new 
Exception('Nicht aufgefangene Exception');
echo 
"Nicht ausgeführt.\n";
?>

Siehe auch



trigger_error

(PHP 4 >= 4.0.1, PHP 5)

trigger_error Erzeugt eine benutzerdefinierte Fehlermeldung/Warnung/Benachrichtigung

Beschreibung

bool trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] )

Mit dieser Funktion kann der Benutzer Bedingungen festlegen, die Fehler auslösen, entweder in Verbindung mit der standardmässigen Fehlerbehandlung oder einer benutzerdefinierten Routine, die als neue Fehlerbehandlungsfunktion gesetzt wurde (set_error_handler()).

Diese Funktion ist nützlich, wenn Sie zur Laufzeit eine bestimmte Rückmeldung bei einer Ausnahme brauchen.

Parameter-Liste

error_msg

Die gewünschte Fehlermeldung für diesen Fehler. Die Länge ist auf 1024 Zeichen begrenzt, darüber hinausgehende Zeichen werden abgeschnitten.

error_type

Der gewünschte Fehlertyp für diesen Fehler. Es können nur Konstanten der E_USER Familie gewählt werden, der Vorgabewert ist E_USER_NOTICE.

Rückgabewerte

Die Funktion gibt FALSE zurück wenn ein falscher error_type übergeben wurde, sonst TRUE

Beispiele

Beispiel #1 trigger_error() Beispiel

Siehe auch set_error_handler() für ein ausführlicheres Beispiel.

<?php
if (assert($divisor == 0)) {
    
trigger_error("Kann nicht durch 0 teilen"E_USER_ERROR);
}
?>

Siehe auch



user_error

(PHP 4, PHP 5)

user_errorAlias von trigger_error()

Beschreibung

Diese Funktion ist ein Alias für: trigger_error().


Inhaltsverzeichnis




htaccess-like support for all SAPIs


Einführung

The htscanner extension gives the possibility to use htaccess-like file to configure PHP per directory, just like apache's htaccess. It is especially useful with fastcgi (ISS5/6/7, lighttpd, etc.).



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

PHP version 5.2.0 or greater.



Installation

Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/htscanner



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

htscanner Konfigurationsoptionen
Name Standard Veränderbar Changelog
htscanner.config_file ".htscanner" PHP_INI_SYSTEM  
htscanner.default_docroot "/" PHP_INI_SYSTEM  
htscanner.default_ttl "300" PHP_INI_SYSTEM  
htscanner."stop_on_error" "Off" PHP_INI_SYSTEM  

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

htscanner.config_file string

Filename to use as configuration file.

htscanner.default_docroot string

Default document root.

htscanner.default_ttl int

Cache time out for the configuration data, in seconds.

htscanner.stop_on_error int

Stop on error (parse error, cannot set an ini setting).



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.





Inclusion hierarchy viewer


Einführung

Traces through and dumps the hierarchy of file inclusions and class inheritance at runtime.

The files may have been included using include(), include_once(), require(), or require_once().

Class inheritance dependencies are also reported.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

PHP version 5.1.0 or greater.

The included gengraph.php file utilizes the » graphviz library, however, this is not required.



Installation

Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/inclued



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

inclued Konfigurationsoptionen
Name Standard Veränderbar Changelog
inclued.enabled Off PHP_INI_*  
inclued.dumpdir Off PHP_INI_*  

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

inclued.enabled int

Whether or not to enable inclued.

inclued.dumpdir int

Location (path) to the directory that stores inclued files. If set, each PHP request will create a file.

Achtung

Because every request creates a file, this directory may fill up fast!



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

Diese Erweiterung definiert keine Konstanten.



Beispiele

Inhaltsverzeichnis


Example that implements inclued into an application

This example demonstrates the process of implementing inclued into an existing application, and viewing the results.

Beispiel #1 Getting the data from inclued

<?php
// File to store the inclued information
$fp fopen('/tmp/wp.json''w');
if (
$fp) {
    
$clue inclued_get_data();
    if (
$clue) {
        
fwrite($fpjson_encode($clue));
    }
    
fclose($fp);
}
?>

Now that some data exists, it's time to make sense of it in the form of a graph. The inclued extension includes a PHP file named gengraph.php that creates a dot file that requires the » graphviz library. However, this form is not required.

Beispiel #2 Example use of gengraph.php

This example creates an image named inclued.png that shows the inclued data.

# First, create the dot file
$ php graphviz.php -i /tmp/wp.json -o wp.dot

# Next, create the image
$ dot -Tpng -o inclued.png wp.dot




inclued Funktionen


inclued_get_data

(PECL inclued >= 0.1.0)

inclued_get_dataGet the inclued data

Beschreibung

array inclued_get_data ( void )

Get the inclued data.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

The inclued data.

Beispiele

Beispiel #1 inclued_get_data() example

See the inclued examples section for ways to create a graphs with this data.

<?php 
include 'x.php';

$clue inclued_get_data();

print_r($clue);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
  [includes] => Array
    (
      [0] => Array
        (
          [operation] => include
          [op_type] => 2
          [filename] => x.php
          [opened_path] => /tmp/x.php
          [fromfile] => /tmp/z.php
          [fromline] => 2
        )
    )
)

Siehe auch


Inhaltsverzeichnis




PHP-Optionen und -Informationen


Einführung

Diese Funktionen erlauben es Ihnen, eine Menge an nützlichen Informationen über PHP selber zu erhalten, z.B. Konfiguration zur Laufzeit, geladene Erweiterungen, Angaben zur Version und vieles mehr. Sie werden auch Funktionen finden, die es Ihnen erlauben, für Ihr laufendes PHP Optionen zu setzten. Die vermutlich bekannteste Funktion von PHP - phpinfo() - finden Sie hier.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Für diese Funktionen ist keine Installation erforderlich, diese gehören zum Grundbestand von PHP.



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Konfigurationsoptionen für PHP Optionen/Info
Name Standard Veränderbar Änderungen
assert.active "1" PHP_INI_ALL  
assert.bail "0" PHP_INI_ALL  
assert.warning "1" PHP_INI_ALL  
assert.callback NULL PHP_INI_ALL  
assert.quiet_eval "0" PHP_INI_ALL  
enable_dl "1" PHP_INI_SYSTEM Entfernt in PHP 6.0.0.
max_execution_time "30" PHP_INI_ALL  
max_input_time "-1" PHP_INI_PERDIR Verfügbar seit PHP 4.3.0.
max_input_nesting_level "64" PHP_INI_SYSTEM|PHP_INI_PERDIR Verfügbar ab PHP 4.4.8. Entfernt in PHP 5.0.0.
magic_quotes_gpc "1" PHP_INI_PERDIR PHP_INI_ALL ab PHP <= 4.2.3. Entfernt in PHP 6.0.0.
magic_quotes_runtime "0" PHP_INI_ALL Entfernt in PHP 6.0.0.
zend.enable_gc "1" PHP_INI_ALL Verfügbar ab PHP 5.3.0.

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

assert.active boolean

Aktiviert assert() Auswertung.

assert.bail boolean

Beendet die Ausführung eines Skripts bei fehlgeschlagener Aussage.

assert.warning boolean

Erzeugt ein PHP warning für jede fehlgeschlagene Aussage.

assert.callback string

Benutzerdefinierte Funktion, die bei fehlgeschlagenen Aussagen ausgeführt wird.

assert.quiet_eval boolean

Benutzt die aktuelle Einstellung von error_reporting() während der Überprüfung eines Ausdrucks einer Aussage. Ist diese Einstellung aktiviert, werden wähhrend der Überprüfung keine Fehler angezeigt (implizit error_reporting(0)). Falls deaktiviert, werden Fehler entsprechend der Einstellung von error_reporting() angezeigt.

enable_dl boolean

Sie können das dynamische Laden von PHP Erweiterungen mittels dl() für virtuelle Server oder per Verzeichnis an- und abschalten.

Der Hauptgrund dynmisches Laden abzustellen sind Sicherheitsüberlegungen. Mit dynamischen Laden ist es möglich, alle open_basedir Einschränkungen zu umgehen. Standard ist es, dynamisches Laden zu erlauben, außer wenn Sie den Safe Mode benutzen. Im Safe Mode ist es nicht möglich dl() zu benutzen.

max_execution_time integer

Legt die maximale Zeit in Sekunden fest, die ein Skript laufen darf, bevor der Parser die Ausführung stoppt. Diese Einstellung hilft zu verhindern, dass schlampig geschriebene Skripte Ihren Server lahmlegen. Der Standardwert für diese Einstellung ist 30 Sekunden. Wird PHP von der Kommandozeile ausgeführt so ist der Vorgabewert 0.

Die maximale Ausführungszeit beeinhaltet keine Systemaufrufe, Streamoperationen, usw. Weitere Details finden Sie bei der set_time_limit() Funktion.

Bei aktiviertem Safe Mode können Sie diese Einstellung nicht mit ini_set() verändern. Die einzige Möglichkeit diese Beschränkung zu umgehen besteht darin, entweder den Safe Mode abzustellen, oder das Zeitlimit in der php.ini zu verändern.

Ihr Webbserver kann andere Timeout-Einstellungen haben die ebenfalls die PHP-Ausführung unterbrechen können. Apache verfügt über eine TimeOut-Direktive und IIS hat eine CGI timeout Funktion. Beide sind als Standardwert auf 300 Sekunden eingestellt. Genauere Informationen finden Sie in der Dokumentation Ihres Webservers.

max_input_time integer

Legt die maximale Zeit in Sekunden fest, die ein Skript verbrauchen darf, um Eingabedaten (wie POST, GET und Dateiuploads) zu verarbeiten.

max_input_nesting_level integer

Legt die maximale Verschachtelungtiefe für Eingabevariablen (z.B. $_GET, $_POST ...) fest.

magic_quotes_gpc boolean
Warnung

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.

Legt die magic_quotes Einstellungen für GPC (Get/Post/Cookie) fest. Ist diese Einstellung auf on, werden alle ' (einzelne Anführungszeichen), " (doppelte Anführungszeichen), \ (Backslash) und NUL's automatisch mit einem Backslash geschützt.

Hinweis: PHP 4 werden auch $_ENV Variablen geschützt.
Steht die Einstellung für magic_quotes_sybase ebenfalls auf ON, überschreibt diese magic_quotes_gpc komplett. Beide Einstellungen aktiviert bewirken, dass nur einzelne Anführungszeichen durch '' geschützt werden. Doppelte Anführungszeichen, Backslashes und NUL's werden nicht verändert und verbleiben im Originalzustand.

Siehe auch get_magic_quotes_gpc()

magic_quotes_runtime boolean
Warnung

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.

Falls magic_quotes_runtime aktiviert ist, werden die meisten Funktionen die Daten von einer beliebigen externen Quelle zurückgeben, inklusive Datenbanken und Textdateien, die in den Daten enthaltenen Anführungszeichen mit einem Backslash geschützt zurückgeben. Falls zusätzlich magic_quotes_sybase auf on steht, werden einzelne Anführungszeichen mit einem einzelnen Anführungszeichen statt einem Backslash geschützt.

zend.enable_gc boolean

Aktiviert bzw. deaktiviert die Speicherbereinigung zirkulär abhängiger Referenzen.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Die aufgelisteten Konstanten stehen immer zur Verfügung, da sie zum Grundbestand von PHP gehören.

Vordefinierte Konstanten für phpcredits()
Konstante Wert Beschreibung
CREDITS_GROUP 1 Eine Liste der Kernentwickler
CREDITS_GENERAL 2 Generelle Credits: Sprachentwurf und -konzept, PHP-Autoren und SAPI-Module.
CREDITS_SAPI 4 Eine Liste der Server-API-Module für PHP und deren Autoren.
CREDITS_MODULES 8 Eine Liste der Erweiterungsmodule für PHP und deren Autoren.
CREDITS_DOCS 16 Die Credits für das Documentationsteam.
CREDITS_FULLPAGE 32 Wird üblicherweise in Verbindung mit den anderen Konstanten verwendet. Gibt an, dass eine komplette, eigenständige HTML-Seite ausgegeben wird, die alle Informationen enthält, die mit anderen Konstanten angefordert wurden.
CREDITS_QA 64 Die Credits für das Qualitätssicherungsteam.
CREDITS_ALL -1 Alle Credits. Dies entspricht der Angabe von: CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES + CREDITS_QA CREDITS_FULLPAGE. Eine komplette, eigenständige HTML-Seite mit den entsprechenden Tags wird erzeugt und ausgegeben. Das ist der Standardwert.
phpinfo()-Konstanten
Konstante Wert Beschreibung
INFO_GENERAL 1 Die Konfigurationsangaben, php.ini Speicherort, Builddatum, Webserver, Betriebssystem und mehr.
INFO_CREDITS 2 PHP-Credits. Siehe auch phpcredits().
INFO_CONFIGURATION 4 Gegenwärtige lokale und Master-Werte für PHP-Einstellungen. Siehe auch ini_get().
INFO_MODULES 8 Geladene Module und ihre entsprechenden Einstellungen.
INFO_ENVIRONMENT 16 Informationen über Umgebungsvariablen, die auch in $_ENV zur Verfügung stehen.
INFO_VARIABLES 32 Zeigt alle vordefinierten Variablen von EGPCS (Environment, GET, POST, Cookie, Server).
INFO_LICENSE 64 PHP-Lizenz-Informationen. Siehe auch die » Lizenz-FAQ.
INFO_ALL -1 Zeigt alle oben genannten Einträge. Das ist der Standardwert.
ASSERT_ACTIVE (integer)
ASSERT_CALLBACK (integer)
ASSERT_BAIL (integer)
ASSERT_WARNING (integer)
ASSERT_QUIET_EVAL (integer)


PHP-Optionen-/-Informationen-Funktionen


assert_options

(PHP 4, PHP 5)

assert_optionsSetzt oder liefert die Assert-Optionen

Beschreibung

mixed assert_options ( int $what [, mixed $value ] )

assert_options() ermöglicht es, die verschiedenene assert() Optionen zu setzen, oder abzufragen, welche Optionen gesetzt sind.

assert Optionen
Option Parameter in .ini-Datei Standardwert Beschreibung
ASSERT_ACTIVE assert.active 1 assert() Überprüfung aktivieren
ASSERT_WARNING assert.warning 1 gibt eine PHP Warnung für jede fehlgeschlagene Überprüfung an
ASSERT_BAIL assert.bail 0 Beendet das Programm bei fehlgeschlagener Überprüfung
ASSERT_QUIET_EVAL assert.quiet_eval 0 Unterdrückt die Fehlerausgabe während der Überprüfung
ASSERT_CALLBACK assert_callback (NULL) ermöglicht die Angabe einer benuterdefinierten Funktion

assert_options() gibt die Einstellung der gesetzten Optionen zurück oder liefert den Wert FALSE bei Auftreten eines Fehlers zurück.



assert

(PHP 4, PHP 5)

assert Prüft ab, ob eine Bedingung oder Abfrage FALSE ist

Beschreibung

int assert ( string|bool $assertion )

assert() überprüft den übergebenen Parameter assertion und führt ein über die Funktion assert_options() definiertes Ereignis aus, falls die in assertion spezifizierte Bedingung FALSE ist.

Wird der Parameter assertion als String übergeben, so wird der String als PHP-Code interpretiert. Der Vorteil der Übergabe des Parameters assertion als Zeichenkette liegt darin, dass die ausgegebene Meldung die über assertion übergebene Zeichenkette enthält.

assert() sollte nur zum Debuggen des Codes und nicht in Produktionsumgebungen verwendet werden werden, beispielsweise zur Überprüfung von Eingaben.

Die Optionen für die assert() können über die Funktion assert_options() oder in den Einstellungen der .ini-Datei gesetzt werden.

Die Funktion assert_options() mit der ASSERT_CALLBACK Direktive ermöglicht eine Funktion anzugeben, die bei fehlender Überprüfung aufgerufen wird.

Callback-Funktionen in Zusammenhang mit assert() sind nützlich, um beispielsweise automatisierte Tests durchzuführen, da die Callback-Funktion über die Information verfügt, von welcher Stelle sie aufgerufen wurde.

Die Callback-Funktion wird mit drei Parametern aufgerufen. Der erste Parameter enthält den Namen des Scripts, in dem die Überprüfung statt fand, der zweite Parameter die Zeilennummer, und der dritte Paramter enthält die über assertion angegebene Bedingung.

Beispiel #1 Überprüfung mit benutzerdefinierter Funktion

<?php
// Active assert and make it quiet
assert_options (ASSERT_ACTIVE1);
assert_options (ASSERT_WARNING0);
assert_options (ASSERT_QUIET_EVAL1);

// Create a handler function
function my_assert_handler ($file$line$code) {
    echo 
"<hr>Assertion Failed:
        File '
$file'<br>
        Line '
$line'<br>
        Code '
$code'<br><hr>";
}

// Set up the callback
assert_options (ASSERT_CALLBACK'my_assert_handler');

// Make an assertion that should fail
assert ('mysql_query ("")');
?>



dl

(PHP 4, PHP 5)

dlLädt eine PHP-Erweiterung (Extension) zur Laufzeit

Beschreibung

int dl ( string $library )

Lädt die mittels dem Parameter library angegebene PHP-Erweiterung. Der Parameter library ist nur der Dateiname der zu ladenden Erweiterung (Extension), welcher von Ihrer Plattform abhängig ist. Z.B. würde die Extension sockets (wenn als shared module kompiliert, nicht standardmäßig!) auf Unix Plattformen sockets.so, und auf Windows Plattformen php_sockets.dll heißen.

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE. Ist die Funktionalität des Ladens von Modulen nicht verfügbar (siehe Anmerkung), oder wurde sie deaktiviert (entweder durch Deaktivieren von enable_dl oder durch aktivieren von safe_mode in der php.ini), wird ein E_ERROR ausgegeben, und die Ausführung gestoppt. Scheitert dl() weil die angegebene Erweiterung nicht geladen werden konnte, wird zusätzlich zu FALSE eine E_WARNING Meldung ausgegeben.

Verwenden Sie extension_loaded() um zu testen, ob die gewünschte Erweiterung bereits verfügbar ist oder nicht. Dies funktioniert sowohl bei eingebauten, als auch bei dynamisch geladenen Erweiterungen (entweder durch php.ini, oder mittels dl()).

Beispiel #1 dl() Beispiel

if (!extension_loaded('gd')) {
    if (!dl('gd.so')) {
        exit;
    }
}

Das Verzeichnis, von wo aus die Erweiterung geladen wird, hängt von Ihrer Plattform ab:

Windows - Wenn nicht explizit in der php.ini angegeben, wird die Erweiterung standardmäßig von c:\php4\extensions\ geladen.

Unix - Wenn nicht explizit in der php.ini angegeben, hängt das standardmäßige Verzeichnis ab von:

  • ob PHP mit --enable-debug erstellt wurde oder nicht
  • ob PHP mit (experimentellem) ZTS (Zend Thread Safety) Unterstützung erstellt wurde oder nicht
  • der aktuellen internen ZEND_MODULE_API_NO (Zend interne Modul API Nummer, welche im Grunde das Datum der letzten größeren Modul API Änderung darstellt, z.B. 20010901).

Das obige in Betracht gezogen, ist das standardmäßige Verzeichnis <php-install-directory>/lib/php/extension/<debug-or-not>-<zts-or-not>-ZEND_MODULE_API_NO, z.B. /usr/local/php/lib/php/extensions/debug-non-zts-20010901 oder /usr/local/php/lib/php/extensions/no-debug-zts-20010901.

Hinweis: dl() wird in multithreaded WebServern nicht unterstützt. In solch einer Umgebung verwenden Sie bitte die extensions Anweisung in Ihrer php.ini. Die CGI und CLI Module sind davon jedoch nicht betroffen!

Hinweis: dl() unterscheidet auf Unix Plattformen zwischen Groß- und Kleinschreibung.

Siehe auch Extension Loading Directives and extension_loaded().



extension_loaded

(PHP 4, PHP 5)

extension_loadedPrüft ob eine Extension geladen ist

Beschreibung

bool extension_loaded ( string $name )

Prüft ob eine Extension geladen ist.

Parameter-Liste

name

Der Name der Extension.

Eine Liste der Namen verschiedener Extensions finden Sie in der Ausgabe von phpinfo() oder Sie können das CGI oder CLI Binary mit der -m Option aufrufen:

$ php -m
[PHP Modules]
xml
tokenizer
standard
sockets
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

Rückgabewerte

Gibt TRUE zurück wenn die Extension mit dem gewünschten Namen geladen ist, sonst FALSE.

Beispiele

Beispiel #1 extension_loaded() Beispiel

<?php
if (!extension_loaded('gd')) {
    if (!
dl('gd.so')) {
        exit;
    }
}
?>

Anmerkungen

Hinweis: extension_loaded() nutzt den internen Namen der Extension um zu prüfen ob die Extension gelanden ist oder nicht. Die meisten Extensionnamen sind in Kleinbuchstaben gehalten aber es kann auch Extension geben deren Namen auch Großbuchstaben enthalten. Beachten Sie bite das diese Funktion beim Vergleich Groß- und Kleinschreibung beachtet!.

Siehe auch



gc_collect_cycles

(PHP 5 >= 5.3.0)

gc_collect_cyclesForces collection of any existing garbage cycles

Beschreibung

int gc_collect_cycles ( void )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Forces collection of any existing garbage cycles.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Returns number of collected cycles.



gc_disable

(PHP 5 >= 5.3.0)

gc_disableDeactivates the circular reference collector

Beschreibung

void gc_disable ( void )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Deactivates the circular reference collector.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Es wird kein Wert zurückgegeben.



gc_enable

(PHP 5 >= 5.3.0)

gc_enableActivates the circular reference collector

Beschreibung

void gc_enable ( void )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Activates the circular reference collector.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Es wird kein Wert zurückgegeben.



gc_enabled

(PHP 5 >= 5.3.0)

gc_enabledReturns status of the circular reference collector

Beschreibung

bool gc_enabled ( void )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Returns status of the circular reference collector.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Returns TRUE if the garbage collector is enabled, FALSE otherwise.



get_cfg_var

(PHP 4, PHP 5)

get_cfg_varErmittelt den Wert einer Konfigurationsoption

Beschreibung

string get_cfg_var ( string $option )

Ermittelt den aktuellen Wert der Konfigurationsoption option .

Diese Funktion gibt keine Konfigurationsinformationen zurück die bereits bei der Kompilation von PHP ode über Apache-Konfigurationsdateien gesetzt wurden.

Um zu prüfen ob das System eineKonfigurationsdateibenutzt können Sie versuchen den Wert der cfg_file_path Einstellung abzufragen. Wenn dieser verfügbar ist wird eine Konfigurationsdatei genutzt.

Parameter-Liste

option

Der Name der Konfigurationsvariable.

Rückgabewerte

Gibt den aktuellen Wert der mit option angegebenen Konfigurationsvariable zurück. Tritt ein Fehler auf so wird FALSE zurückgegeben.

Changelog

Version Beschreibung
5.3.0 get_cfg_var() kann nun auch "array" Konfigurationsvariablen zurückgeben.

Siehe auch



get_current_user

(PHP 4, PHP 5)

get_current_userLiefert den Benutzernamen des Besitzers des aktuellen PHP-Skripts

Beschreibung

string get_current_user ( void )

Liefert den Namen des Benutzers, welcher der Besitzer der aktuell ausgeführten PHP-Skriptdatei ist.

Rückgabewerte

Liefert den Benutzernamen als String.

Beispiele

Beispiel #1 get_current_user()-Beispiel

<?php
echo 'Name des Benutzers: ' get_current_user();
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Name des Benutzers: SYSTEM

Siehe auch



get_defined_constants

(PHP 4 >= 4.1.0, PHP 5)

get_defined_constantsReturns an associative array with the names of all the constants and their values

Beschreibung

array get_defined_constants ([ bool $categorize ] )

Returns the names and values of all the constants currently defined. This includes those created by extensions as well as those created with the define() function.

Parameter-Liste

categorize

Causing this function to return a multi-dimensional array with categories in the keys of the first dimension and constants and their values in the second dimension.

<?php
define
("MY_CONSTANT"1);
print_r(get_defined_constants(true));
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [internal] => Array
        (
            [E_ERROR] => 1
            [E_WARNING] => 2
            [E_PARSE] => 4
            [E_NOTICE] => 8
            [E_CORE_ERROR] => 16
            [E_CORE_WARNING] => 32
            [E_COMPILE_ERROR] => 64
            [E_COMPILE_WARNING] => 128
            [E_USER_ERROR] => 256
            [E_USER_WARNING] => 512
            [E_USER_NOTICE] => 1024
            [E_ALL] => 2047
            [TRUE] => 1
        )

    [pcre] => Array
        (
            [PREG_PATTERN_ORDER] => 1
            [PREG_SET_ORDER] => 2
            [PREG_OFFSET_CAPTURE] => 256
            [PREG_SPLIT_NO_EMPTY] => 1
            [PREG_SPLIT_DELIM_CAPTURE] => 2
            [PREG_SPLIT_OFFSET_CAPTURE] => 4
            [PREG_GREP_INVERT] => 1
        )

    [user] => Array
        (
            [MY_CONSTANT] => 1
        )

)

Rückgabewerte

Changelog

Version Beschreibung
5.0.0 The categorize parameter was added.

Beispiele

Beispiel #1 get_defined_constants() Example

<?php
print_r
(get_defined_constants());
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [E_ERROR] => 1
    [E_WARNING] => 2
    [E_PARSE] => 4
    [E_NOTICE] => 8
    [E_CORE_ERROR] => 16
    [E_CORE_WARNING] => 32
    [E_COMPILE_ERROR] => 64
    [E_COMPILE_WARNING] => 128
    [E_USER_ERROR] => 256
    [E_USER_WARNING] => 512
    [E_USER_NOTICE] => 1024
    [E_ALL] => 2047
    [TRUE] => 1
)

Siehe auch



get_extension_funcs

(PHP 4, PHP 5)

get_extension_funcsLiefert die Namen der Funktionen einer Extension

Beschreibung

array get_extension_funcs ( string $module_name )

Diese Funktion gibt die Namen aller in der gegebenen Extension definierten Funktionen zurück.

Parameter-Liste

module_name

Der Extensionname.

Hinweis: Der Name muss klein geschrieben werden.

Rückgabewerte

Gibt ein Array mit den Namen aller Funktionen zurück oder FALSE wenn keine Extension mit dem Namen module_name geladen ist.

Beispiele

Beispiel #1 Gibt alle XML Funktionen aus

<?php
print_r
(get_extension_funcs("xml"));
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [0] => xml_parser_create
    [1] => xml_parser_create_ns
    [2] => xml_set_object
    [3] => xml_set_element_handler
    [4] => xml_set_character_data_handler
    [5] => xml_set_processing_instruction_handler
    [6] => xml_set_default_handler
    [7] => xml_set_unparsed_entity_decl_handler
    [8] => xml_set_notation_decl_handler
    [9] => xml_set_external_entity_ref_handler
    [10] => xml_set_start_namespace_decl_handler
    [11] => xml_set_end_namespace_decl_handler
    [12] => xml_parse
    [13] => xml_parse_into_struct
    [14] => xml_get_error_code
    [15] => xml_error_string
    [16] => xml_get_current_line_number
    [17] => xml_get_current_column_number
    [18] => xml_get_current_byte_index
    [19] => xml_parser_free
    [20] => xml_parser_set_option
    [21] => xml_parser_get_option
    [22] => utf8_encode
    [23] => utf8_decode
)

Siehe auch



get_include_path

(PHP 4 >= 4.3.0, PHP 5)

get_include_pathGets the current include_path configuration option

Beschreibung

string get_include_path ( void )

Gets the current include_path configuration option value.

Rückgabewerte

Returns the path, as a string.

Beispiele

Beispiel #1 get_include_path() example

<?php
// Works as of PHP 4.3.0
echo get_include_path();

// Works in all PHP versions
echo ini_get('include_path');
?>

Siehe auch



get_included_files

(PHP 4, PHP 5)

get_included_filesLiefert ein Array mit den Namen der includierten Dateien

Beschreibung

array get_included_files ( void )

Gibt die Namen aller Dateien zurück die mit include(), include_once(), require() oder require_once() eingebunden wurden.

Rückgabewerte

Gibt ein Array mit Dateinamen zurück.

Das ursprünglich aufgerufene Skript wird auch als includierte Datei angesehen und damit zusammen mit den Namen der tatäschlich mit include() etc. eingebundenen Dateien zurückgegeben.

Dateien die mehrfach eingebunden werden erscheinen nur einfach im Ergebnisarray.

Changelog

Version Beschreibung
4.0.1 Bis einschließlich PHP 4.0.1 nahm diese Funktion an dass die includierten Dateien grundsätzlich auf .php enden und ignorierte Dateien mit anderen Endungen. Das zurückgegebene Array war assoziativ und enthielt nur mit include() oder include_once() eingebunden wurden.

Beispiele

Beispiel #1 get_included_files()Beispiel

<?php
// Diese Datei ist abc.php

include 'test1.php';
include_once 
'test2.php';
require 
'test3.php';
require_once 
'test4.php';

$included_files get_included_files();

foreach (
$included_files as $filename) {
    echo 
"$filename\n";
}

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

abc.php
test1.php
test2.php
test3.php
test4.php

Anmerkungen

Hinweis: Dateien die über die auto_prepend_file Konfigurationsdirektive eingebunden werden sind nicht Teil des Ergebnisarrays.

Siehe auch



get_loaded_extensions

(PHP 4, PHP 5)

get_loaded_extensionsLiefert ein Array mit den Namen aller einkompilierten und geladenen Extensions

Beschreibung

array get_loaded_extensions ([ bool $zend_extensions = false ] )

Diese Funktion gibt die Namen aller in den PHP Interpreter einkompilierten und geladenen Extensions aus.

Parameter-Liste

zend_extensions

Legt fest ob auch Zend Extensions zurückgegeben werden sollen. Vorgabewert ist FALSE d.h. Zend Extensions werden ignoriert.

Rückgabewerte

Gibt ein Array mit den Namen aller Extensions zurück.

Changelog

Version Beschreibung
5.2.4 Der optionale Parameter zend_extensions wurde hinzugefügt.

Beispiele

Beispiel #1 get_loaded_extensions() Beispiele

<?php
print_r
(get_loaded_extensions());
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
   [0] => xml
   [1] => wddx
   [2] => standard
   [3] => session
   [4] => posix
   [5] => pgsql
   [6] => pcre
   [7] => gd
   [8] => ftp
   [9] => db
   [10] => calendar
   [11] => bcmath
)

Siehe auch



get_magic_quotes_gpc

(PHP 4, PHP 5)

get_magic_quotes_gpc Zeigt die aktuelle Konfiguration von magic quotes gpc

Beschreibung

long get_magic_quotes_gpc ( void )

Zeigt die aktuelle Konfiguration von magic_quotes_gpc. (0 für aus, 1 für an).

Siehe auch get_magic_quotes_runtime() und set_magic_quotes_runtime().



get_magic_quotes_runtime

(PHP 4, PHP 5)

get_magic_quotes_runtime Zeigt die aktuelle Konfiguration von magic_quotes_runtime

Beschreibung

Long get_magic_quotes_runtime ( void )

Zeigt die aktuelle Konfiguration von magic_quotes_runtime. (0 für aus, 1 für an).

Siehe auch get_magic_quotes_gpc() und set_magic_quotes_runtime().



get_required_files

(PHP 4, PHP 5)

get_required_filesAlias von get_included_files()

Beschreibung

Diese Funktion ist ein Alias für: get_included_files().



getenv

(PHP 4, PHP 5)

getenvLiefert den Wert einer Umgebungsvariable

Beschreibung

string getenv ( string $varname )

Liefert den Wert einer Umgebungsvariable.

Eine Liste aller Umgebungsvariablen können Sie über die Funktion phpinfo() anzeigen lassen. Die Bedeutung vieler dieser Variablen können Sie in der » CGI-Spezifikation im Abschnitt über » Umgebungsvariablen nachlesen.

Parameter-Liste

varname

Der Variablenname

Rückgabewerte

Gibt den Wert der Umgebungsvariable varname zurück oder FALSE bei Fehlern.

Beispiele

Beispiel #1 getenv()-Beispiel

<?php
// nutzen Sie getenv() ...
$ip getenv('REMOTE_ADDR');

// ... oder einfache die superglobalen Arrays ($_SERVER oder $_ENV)
$ip $_SERVER['REMOTE_ADDR'];
?>

Siehe auch



getlastmod

(PHP 4, PHP 5)

getlastmodUhrzeit der letzten Änderung eines Scripts

Beschreibung

int getlastmod ( void )

Ermittelt die Uhrzeit der letzten Änderung des ausgeführten Scripts

Wenn Sie sich für das Änderungsdatum einer anderen Datei interessieren nutzen Sie statt dessen filemtime().

Rückgabewerte

Liefert die Zeit der letzten Änderung des auseführten Skripts. Der Wert wird als Unix Timestamp zurückgegebn und kann mit Hilfe der Funktion date() verarbeitet werden. Im Fehlerfall wird FALSE zurückgegeben.

Beispiele

Beispiel #1 getlastmod() Beispiel

<?php
// Liefert z.B. 'Letzte Änderung: March 04 1998 20:43:59.'
echo "Letzte Änderung: " date ("F d Y H:i:s."getlastmod());
?>

Siehe auch

  • date() - Formatiert ein(e) angegebene(s) Zeit/Datum
  • getmyuid() - Zeigt die User-ID des Besitzers eines PHP-Scripts
  • getmygid() - Get PHP script owner's GID
  • get_current_user() - Liefert den Benutzernamen des Besitzers des aktuellen PHP-Skripts
  • getmyinode() - Ermittelt den Inode eines Skripts
  • getmypid() - Prozess-Id eines Scripts
  • filemtime() - Liefert Datum und Uhrzeit der letzten Dateiänderung



getmygid

(PHP 4 >= 4.1.0, PHP 5)

getmygidGet PHP script owner's GID

Beschreibung

int getmygid ( void )

Gets the group ID of the current script.

Rückgabewerte

Returns the group ID of the current script, or FALSE on error.

Siehe auch



getmyinode

(PHP 4, PHP 5)

getmyinodeErmittelt den Inode eines Skripts

Beschreibung

int getmyinode ( void )

Ermittelt den Inode der aktuell ausgeführten Skriptdatei.

Rückgabewerte

Gibt die Inode-Nummer der aktuellen Skriptdatei als Integer zurück oder FALSE bei fehlern.

Anmerkungen

Hinweis: Diese Funktion ist auf Windows-Plattformen nicht implementiert.

Siehe auch



getmypid

(PHP 4, PHP 5)

getmypidProzess-Id eines Scripts

Beschreibung

int getmypid ( void )

Liefert die Prozess-ID unter der das Skript ausgeführt wird.

Rückgabewerte

Liefert die Prozess-ID unter der das Skript ausgeführt wird, oder FALSE bei Fehlern

Anmerkungen

Warnung

Prozess-IDs sind nicht eindeutig, sie sind daher eine schwache Entropiequelle. Wir raten davon ab sich in sicherheitsrelevanten Bereichen auf Prozess-IDs zu verlassen.

Siehe auch



getmyuid

(PHP 4, PHP 5)

getmyuidZeigt die User-ID des Besitzers eines PHP-Scripts

Beschreibung

int getmyuid ( void )

Liefert die User-ID des Besitzers des aktuellen Scripts

Rückgabewerte

Liefert die User-ID des aktuellen Scripts oder FALSE bei einem Fehler.

Siehe auch



getopt

(PHP 4 >= 4.3.0, PHP 5)

getoptGets options from the command line argument list

Beschreibung

array getopt ( string $options [, array $longopts ] )

Parses options passed to the script.

Parameter-Liste

options
Each character in this string will be used as option characters and matched against options passed to the script starting with a single hyphen (-). For example, an option string "x" recognizes an option -x.
longopts
An array of options. Each element in this array will be used as option strings and matched against options passed to the script starting with two hyphens (--). For example, an longopts element "opt" recognizes an option --opt.

Hinweis: Prior to PHP5.3.0 this parameter was only available on few systems

The options parameter may contain the following elements:

  • Individual characters (do not accept values)
  • Characters followed by a colon (parameter requires value)
  • Characters followed by two colons (optional value)

Option values are the first argument after the string. It does not matter if a value has leading white space or not.

Hinweis: Optional values do not accept " " (space) as a separator.

Hinweis: The format for the options and longopts is almost the same, the only difference is that longopts takes an array of options (where each element is the option) where as options takes a string (where each character is the option).

Rückgabewerte

This function will return an array of option / argument pairs or FALSE on failure.

Changelog

Version Beschreibung
5.3.0 Added support for "=" as argument/value separator.
5.3.0 Added support for optional values (specified with "::").
5.3.0 This function is no longer system dependent and works on Windows too.

Beispiele

Beispiel #1 getopt() example

<?php
$options 
getopt("f:hp:");
var_dump($options);
?>

Running the above script with php script.php -fvalue -h will output:

array(2) {
  ["f"]=>
  string(5) "value"
  ["h"]=>
  bool(false)
}

Beispiel #2 getopt() example#2

<?php
$shortopts  
"";
$shortopts .= "f:";  // Required value
$shortopts .= "v::"// Optional value
$shortopts .= "abc"// These options do not accept values

$longopts  = array(
    
"required:",     // Required value
    
"optional::",    // Optional value
    
"option",        // No value
    
"opt",           // No value
);
$options getopt($shortopts$longopts);
var_dump($options);
?>

Running the above script with php script.php -f "value for f" -v -a --required value --optional="optional value" --option will output:

array(6) {
  ["f"]=>
  string(11) "value for f"
  ["v"]=>
  bool(false)
  ["a"]=>
  bool(false)
  ["required"]=>
  string(5) "value"
  ["optional"]=>
  string(14) "optional value"
  ["option"]=>
  bool(false)
}

Beispiel #3 getopt() example#3

Passing multiple options as one

<?php
$options 
getopt("abc");
var_dump($options);
?>

Running the above script with php script.php -aaac will output:

array(2) {
  ["a"]=>
  array(3) {
    [0]=>
    bool(false)
    [1]=>
    bool(false)
    [2]=>
    bool(false)
  }
  ["c"]=>
  bool(false)
}



getrusage

(PHP 4, PHP 5)

getrusage Zeigt den aktuellen Ressourcenverbrauch an

Beschreibung

array getrusage ([ int $who ] )

Dies ist eine Schnittstlle zu getrusage(2). Stellt ein assoziatives Array mit den Daten zur Verfügung, die der Systemaufruf ausgibt. Wenn who 1 ist, wird getusage mit RUSAGE_CHILDREN aufgerufen.

Alle Einträge können über ihre Dukumentenfeldernamen aufgerufen werden.

Beispiel #1 getrusage() Beispiel


$dat = getrusage();
echo $dat["ru_nswap"]; # number of swaps
echo $dat["ru_majflt"]; # number of page faults
echo $dat["ru_utime.tv_sec"]; # user time used (seconds)
echo $dat["ru_utime.tv_usec"]; # user time used (microseconds)

Siehe auch im Handbuch des Betriebssystems für weitere Details.



ini_alter

(PHP 4, PHP 5)

ini_alterAlias von ini_set()

Beschreibung

Diese Funktion ist ein Alias für: ini_set().



ini_get_all

(PHP 4 >= 4.2.0, PHP 5)

ini_get_allGets all configuration options

Beschreibung

array ini_get_all ([ string $extension [, bool $details = true ]] )

Returns all the registered configuration options.

Parameter-Liste

extension

An optional extension name. If set, the function return only options specific for that extension.

details

Retrieve details settings or only the current value for each setting. Default is TRUE (retrieve details).

Rückgabewerte

Returns an associative array with directive name as the array key.

When details is TRUE (default) the array will contain global_value (set in php.ini), local_value (perhaps set with ini_set() or .htaccess), and access (the access level).

When details is FALSE the value will be the current value of the option.

See the manual section for information on what access levels mean.

Hinweis: It's possible for a directive to have multiple access levels, which is why access shows the appropriate bitmask values.

Changelog

Version Beschreibung
5.3.0 Added details .

Beispiele

Beispiel #1 ini_get_all() examples

<?php
print_r
(ini_get_all("pcre"));
print_r(ini_get_all());
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [pcre.backtrack_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

    [pcre.recursion_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

)
Array
(
    [allow_call_time_pass_reference] => Array
        (
            [global_value] => 0
            [local_value] => 0
            [access] => 6
        )

    [allow_url_fopen] => Array
        (
            [global_value] => 1
            [local_value] => 1
            [access] => 4
        )

    ...

)

Beispiel #2 Disabling details

<?php
print_r
(ini_get_all("pcre"false)); // Added in PHP 5.3.0
print_r(ini_get_all(nullfalse)); // Added in PHP 5.3.0
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [pcre.backtrack_limit] => 100000
    [pcre.recursion_limit] => 100000
)
Array
(
    [allow_call_time_pass_reference] => 0
    [allow_url_fopen] => 1
    ...
)

Siehe auch



ini_get

(PHP 4, PHP 5)

ini_getGets the value of a configuration option

Beschreibung

string ini_get ( string $varname )

Returns the value of the configuration option on success.

Parameter-Liste

varname

The configuration option name.

Rückgabewerte

Returns the value of the configuration option as a string on success, or an empty string on failure or for null values.

Beispiele

Beispiel #1 A few ini_get() examples

<?php
/*
Our php.ini contains the following settings:

display_errors = On
register_globals = Off
post_max_size = 8M
*/

echo 'display_errors = ' ini_get('display_errors') . "\n";
echo 
'register_globals = ' ini_get('register_globals') . "\n";
echo 
'post_max_size = ' ini_get('post_max_size') . "\n";
echo 
'post_max_size+1 = ' . (ini_get('post_max_size')+1) . "\n";
echo 
'post_max_size in bytes = ' return_bytes(ini_get('post_max_size'));

function 
return_bytes($val) {
    
$val trim($val);
    
$last strtolower($val[strlen($val)-1]);
    switch(
$last) {
        
// The 'G' modifier is available since PHP 5.1.0
        
case 'g':
            
$val *= 1024;
        case 
'm':
            
$val *= 1024;
        case 
'k':
            
$val *= 1024;
    }

    return 
$val;
}

?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:


display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = 8388608

Anmerkungen

Hinweis: When querying boolean values
A boolean ini value of off will be returned as an empty string or "0" while a boolean ini value of on will be returned as "1". The function can also return the literal string of INI value.

Hinweis: When querying memory size values
Many ini memory size values, such as upload_max_filesize, are stored in the php.ini file in shorthand notation. ini_get() will return the exact string stored in the php.ini file and NOT its integer equivalent. Attempting normal arithmetic functions on these values will not have otherwise expected results. The example above shows one way to convert shorthand notation into bytes, much like how the PHP source does it.

Siehe auch



ini_restore

(PHP 4, PHP 5)

ini_restoreRestores the value of a configuration option

Beschreibung

void ini_restore ( string $varname )

Restores a given configuration option to its original value.

Parameter-Liste

varname

The configuration option name.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 ini_restore() example

<?php
$setting 
'y2k_compliance';

echo 
'Current value for \'' $setting '\': ' ini_get($setting), PHP_EOL;

ini_set($settingini_get($setting) ? 1);
echo 
'New value for \'' $setting '\': ' ini_get($setting), PHP_EOL;

ini_restore($setting);
echo 
'Original value for \'' $setting '\': ' ini_get($setting), PHP_EOL;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Current value for 'y2k_compliance': 1
New value for 'y2k_compliance': 0
Original value for 'y2k_compliance': 1

Siehe auch



ini_set

(PHP 4, PHP 5)

ini_setSets the value of a configuration option

Beschreibung

string ini_set ( string $varname , string $newvalue )

Sets the value of the given configuration option. The configuration option will keep this new value during the script's execution, and will be restored at the script's ending.

Parameter-Liste

varname

Not all the available options can be changed using ini_set(). There is a list of all available options in the appendix.

newvalue

The new value for the option.

Rückgabewerte

Returns the old value on success, FALSE on failure.

Beispiele

Beispiel #1 Setting an ini option

<?php
echo ini_get('display_errors');

if (!
ini_get('display_errors')) {
    
ini_set('display_errors'1);
}

echo 
ini_get('display_errors');
?>

Siehe auch



magic_quotes_runtime

(PHP 4, PHP 5)

magic_quotes_runtimeAlias von set_magic_quotes_runtime()

Beschreibung

Diese Funktion ist ein Alias für: set_magic_quotes_runtime()



main

mainDummy for main()

Beschreibung

There is no function named main() except in the PHP source. In PHP 4.3.0, a new type of error handling in the PHP source (php_error_docref) was introduced. One feature is to provide links to a manual page in PHP error messages when the PHP directives html_errors (on by default) and docref_root (on by default until PHP 4.3.2) are set.

Sometimes error messages refer to a manual page for the function main() which is why this page exists. If you discover such a reference, please » file a bug report, indicating the PHP function caused the error that linked to main() and it will be fixed and properly documented.

Known errors that point to main()
Function name No longer points here as of
include() 5.1.0
include_once() 5.1.0
require() 5.1.0
require_once() 5.1.0



memory_get_peak_usage

(PHP 5 >= 5.2.0)

memory_get_peak_usageReturns the peak of memory allocated by PHP

Beschreibung

int memory_get_peak_usage ([ bool $real_usage = false ] )

Returns the peak of memory, in bytes, that's been allocated to your PHP script.

Parameter-Liste

real_usage

Set this to TRUE to get the real size of memory allocated from system. If not set or FALSE only the memory used by emalloc() is reported.

Rückgabewerte

Returns the memory peak in bytes.

Changelog

Version Beschreibung
5.2.1 Compiling with --enable-memory-limit is no longer required for this function to exist.
5.2.0 real_usage was added.

Siehe auch



memory_get_usage

(PHP 4 >= 4.3.2, PHP 5)

memory_get_usageReturns the amount of memory allocated to PHP

Beschreibung

int memory_get_usage ([ bool $real_usage = false ] )

Returns the amount of memory, in bytes, that's currently being allocated to your PHP script.

Parameter-Liste

real_usage

Set this to TRUE to get the real size of memory allocated from system. If not set or FALSE only the memory used by emalloc() is reported.

Rückgabewerte

Returns the memory amount in bytes.

Changelog

Version Beschreibung
5.2.1 Compiling with --enable-memory-limit is no longer required for this function to exist.
5.2.0 real_usage was added.

Beispiele

Beispiel #1 A memory_get_usage() example

<?php
// This is only an example, the numbers below will
// differ depending on your system

echo memory_get_usage() . "\n"// 36640

$a str_repeat("Hello"4242);

echo 
memory_get_usage() . "\n"// 57960

unset($a);

echo 
memory_get_usage() . "\n"// 36744

?>

Siehe auch



php_ini_loaded_file

(PHP 5 >= 5.2.4)

php_ini_loaded_fileRetrieve a path to the loaded php.ini file

Beschreibung

string php_ini_loaded_file ( void )

Check if a php.ini file is loaded, and retrieve its path.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

The loaded php.ini path, or FALSE if one is not loaded.

Beispiele

Beispiel #1 php_ini_loaded_file() example

<?php
$inipath 
php_ini_loaded_file();

if (
$inipath) {
    echo 
'Loaded php.ini: ' $inipath;
} else {
    echo 
'A php.ini file is not loaded';
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Loaded php.ini: /usr/local/php/php.ini

Siehe auch



php_ini_scanned_files

(PHP 4 >= 4.3.0, PHP 5)

php_ini_scanned_filesReturn a list of .ini files parsed from the additional ini dir

Beschreibung

string php_ini_scanned_files ( void )

php_ini_scanned_files() returns a comma-separated list of configuration files parsed after php.ini. These files are found in a directory defined by the --with-config-file-scan-dir option which is set during compilation.

The returned configuration files also include the path as declared in the --with-config-file-scan-dir option.

Rückgabewerte

Returns a comma-separated string of .ini files on success. Each comma is followed by a newline. If the directive --with-config-file-scan-dir wasn't set, FALSE is returned. If it was set and the directory was empty, an empty string is returned. If a file is unrecognizable, the file will still make it into the returned string but a PHP error will also result. This PHP error will be seen both at compile time and while using php_ini_scanned_files().

Beispiele

Beispiel #1 A simple example to list the returned ini files

<?php
if ($filelist php_ini_scanned_files()) {
    if (
strlen($filelist) > 0) {
        
$files explode(','$filelist);

        foreach (
$files as $file) {
            echo 
"<li>" trim($file) . "</li>\n";
        }
    }
}
?>

Siehe auch



php_logo_guid

(PHP 4, PHP 5)

php_logo_guidDie GUID des PHP-Logos

Beschreibung

string php_logo_guid ( void )

Diese Funktion gibt die ID zurück, die genutzt werden kann, um das eingebaute PHP-Logo darzustellen. Das Logo wird nur angezeigt, wenn expose_php auf On steht.

Rückgabewerte

Gibt PHPE9568F34-D428-11d2-A769-00AA001ACF42 zurück.

Beispiele

Beispiel #1 php_logo_guid()-Beispiel

<?php

echo '<img src="' $_SERVER['PHP_SELF'] .
     
'?=' php_logo_guid() . '" alt="PHP Logo !" />';

?>

Siehe auch



php_sapi_name

(PHP 4 >= 4.0.1, PHP 5)

php_sapi_nameGibt das genutzte Interface zwischen PHP und dem Webserver zurück

Beschreibung

string php_sapi_name ( void )

Gibt einen kleingeschriebenen String zurück, der die Schnittstelle (das Server-API, SAPI) beschreibt, die PHP verwendet. Dieser String ist z.B. "cli" für den PHP-Kommandozeileninterpreter CLI, während beim Einsatz mit Apache unterschiedliche Werte zurückgegeben werden können, je nachdem welches SAPI genutzt wird. Die möglichen Rückgabewerte sind weiter unten aufgelistet.

Rückgabewerte

Gibt den Schnittstellentyp als kleingeschriebenen String zurück.

Mögliche Werte sind unter anderem aolserver, apache, apache2filter, apache2handler, caudium, cgi (until PHP 5.3), cgi-fcgi, cli, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux und webjames.

Beispiele

Beispiel #1 php_sapi_name() Beispiel

<?php
$sapi_type 
php_sapi_name();
if (
substr($sapi_type03) == 'cgi') {
    echo 
"Sie benutzen CGI PHP\n";
} else {
    echo 
"Sie benutzen nicht CGI PHP\n";
}
?>

Siehe auch



php_uname

(PHP 4 >= 4.0.2, PHP 5)

php_unameReturns information about the operating system PHP is running on

Beschreibung

string php_uname ([ string $mode = "a" ] )

php_uname() returns a description of the operating system PHP is running on. This is the same string you see at the very top of the phpinfo() output. For the name of just the operating system, consider using the PHP_OS constant, but keep in mind this constant will contain the operating system PHP was built on.

On some older UNIX platforms, it may not be able to determine the current OS information in which case it will revert to displaying the OS PHP was built on. This will only happen if your uname() library call either doesn't exist or doesn't work.

Parameter-Liste

mode

mode is a single character that defines what information is returned:

  • 'a': This is the default. Contains all modes in the sequence "s n r v m".
  • 's': Operating system name. eg. FreeBSD.
  • 'n': Host name. eg. localhost.example.com.
  • 'r': Release name. eg. 5.1.2-RELEASE.
  • 'v': Version information. Varies a lot between operating systems.
  • 'm': Machine type. eg. i386.

Rückgabewerte

Returns the description, as a string.

Beispiele

Beispiel #1 Some php_uname() examples

<?php
echo php_uname();
echo 
PHP_OS;

/* Some possible outputs:
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
Linux

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD

Windows NT XN1 5.1 build 2600
WINNT
*/

if (strtoupper(substr(PHP_OS03)) === 'WIN') {
    echo 
'This is a server using Windows!';
} else {
    echo 
'This is a server not using Windows!';
}

?>

There are also some related Predefined PHP constants that may come in handy, for example:

Beispiel #2 A few OS related constant examples

<?php
// *nix
echo DIRECTORY_SEPARATOR// /
echo PHP_SHLIB_SUFFIX;    // so
echo PATH_SEPARATOR;      // :

// Win*
echo DIRECTORY_SEPARATOR// \
echo PHP_SHLIB_SUFFIX;    // dll
echo PATH_SEPARATOR;      // ;
?>

Siehe auch



phpcredits

(PHP 4, PHP 5)

phpcreditsPrints out the credits for PHP

Beschreibung

bool phpcredits ([ int $flag = CREDITS_ALL ] )

This function prints out the credits listing the PHP developers, modules, etc. It generates the appropriate HTML codes to insert the information in a page.

Parameter-Liste

flag

To generate a custom credits page, you may want to use the flag parameter. flag is optional, and it defaults to CREDITS_ALL.

Pre-defined phpcredits() flags
name description
CREDITS_ALL All the credits, equivalent to using: CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES + CREDITS_FULLPAGE. It generates a complete stand-alone HTML page with the appropriate tags.
CREDITS_DOCS The credits for the documentation team
CREDITS_FULLPAGE Usually used in combination with the other flags. Indicates that a complete stand-alone HTML page needs to be printed including the information indicated by the other flags.
CREDITS_GENERAL General credits: Language design and concept, PHP 4.0 authors and SAPI module.
CREDITS_GROUP A list of the core developers
CREDITS_MODULES A list of the extension modules for PHP, and their authors
CREDITS_SAPI A list of the server API modules for PHP, and their authors

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 Prints the general credits

<?php
phpcredits
(CREDITS_GENERAL);
?>

Beispiel #2 Prints the core developers and the documentation group

<?php
phpcredits
(CREDITS_GROUP CREDITS_DOCS CREDITS_FULLPAGE);
?>

Beispiel #3 Printing all the credits

<html>
 <head>
  <title>My credits page</title>
 </head>
 <body>
<?php
// some code of your own
phpcredits(CREDITS_ALL CREDITS_FULLPAGE);
// some more code
?>
 </body>
</html>

Siehe auch



phpinfo

(PHP 4, PHP 5)

phpinfoZeigt viele Informationen zu PHP

Beschreibung

bool phpinfo ([ int $what = INFO_ALL ] )

Zeigt eine große Anzahl von Informationen über den aktuellen Zustand von PHP an. Dies umfasst Informationen über die Optionen während des Kompilierens und die Extensions, die PHP-Version, Server-Informationen und -Umgebung (falls als Modul kompiliert), die PHP-Umgebung, Versionsinformationen zum Betriebssystem, Pfade, Master- und lokale Werte der Konfigurationsoptionen, HTTP-Header und die PHP-Lizenz.

Weil jedes System anders installiert ist, wird phpinfo() oft genutzt, um die Konfigurationseinstellungen und die verfügbaren vordefinierten Variablen auf einem System zu prüfen.

phpinfo() ist außerdem ein wertvolles Debugging-Tool, da es alle EGPCS-Daten (Environment, GET, POST, Cookie, Server) enthält.

Parameter-Liste

what

Die Ausgabe kann durch die bitweise summierte Angabe von einer oder mehrerer der folgenden Konstanten im optionalen what -Parameter angepasst werden. Die Konstanten oder Bitwerte können auch mit dem or-Operator kombiniert werden.

phpinfo()-Optionen
Name (Konstante) Wert Beschreibung
INFO_GENERAL 1 Die Konfigurationszeile, die Ort der php.ini, das Übersetzungsdatum, der Webserver, das System und mehr.
INFO_CREDITS 2 PHP-Credits. Siehe auch phpcredits().
INFO_CONFIGURATION 4 Aktueller lokaler und Master-Wert der PHP-Direktiven. Siehe auch ini_get().
INFO_MODULES 8 Die geladenene Module und ihre jeweiligen Einstellungen. Siehe auch get_loaded_extensions().
INFO_ENVIRONMENT 16 Informationen über die Umgebungsvariablen, die auch in $_ENV verfügbar ist.
INFO_VARIABLES 32 Zeigt alle vordefinierten Variablen aus EGPCS (Environment, GET, POST, Cookie, Server).
INFO_LICENSE 64 PHP-Lizenz-Informationen. Siehe auch » Lizenz-FAQ.
INFO_ALL -1 Zeigt alle genannten Informationen. Dies ist der Standardwert.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Changelog

Version Beschreibung
5.2.2 Die Information über die "Loaded Configuration File" wurde hinzugefügt, während vorher nur die Information "Configuration File (php.ini) Path" existierte.

Beispiele

Beispiel #1 phpinfo()-Beispiel

<?php

// Zeigt alle Informationen (Standardwert ist INFO_ALL)
phpinfo();

// Zeigt nur die Modul-Informationen.
// phpinfo(8) führt zum gleichen Ergebnis.
phpinfo(INFO_MODULES);

?>

Anmerkungen

Hinweis: Teile der angezeigten Informationen sind deaktiviert, wenn die expose_php-Konfigurationseinstellung auf off gesetzt ist. Dies umfasst die PHP- und Zend-Logos sowie die Credits.

Hinweis: phpinfo() gibt reinen Text statt HTML aus, wenn es im CLI-Modus benutzt wird.

Siehe auch



phpversion

(PHP 4, PHP 5)

phpversionLiefert die aktuelle PHP-Version

Beschreibung

string phpversion ([ string $extension ] )

Liefert die Versionsnummer der gerade laufenden PHP-Version oder der angegebenen extension als String.

Parameter-Liste

extension

Ein optionaler Extensionname

Rückgabewerte

Wenn der optionale Parameter extension angegeben wurde, wird die Versionsnummer dieser Extension zurückgegeben oder FALSE, falls die Extension nicht geladen ist oder keine Versionsinformation enthält.

Beispiele

Beispiel #1 phpversion()-Beispiel

<?php
// gibt z.B. 'Die aktuelle PHP-Version ist 4.1.1' aus
echo 'Die aktuelle PHP Version ist ' phpversion();

// Gibt z.B. '2.0' aus oder nichts, falls die Extension nicht aktiviert ist
echo phpversion('tidy');
?>

Anmerkungen

Hinweis: Die PHP Version kann auch über die vordefinierte Konstante PHP_VERSION ermittelt werden.

Siehe auch



putenv

(PHP 4, PHP 5)

putenv Setzt den Wert einer Umgebungsvariablen.

Beschreibung

void putenv ( string $setting )

Setzt setting als Umgebungsvariable.

Beispiel #1 Setzen einer Umgebungsvariablen


putenv ("UNIQID=$uniqid");



restore_include_path

(PHP 4 >= 4.3.0, PHP 5)

restore_include_pathRestores the value of the include_path configuration option

Beschreibung

void restore_include_path ( void )

Restores the include_path configuration option back to its original master value as set in php.ini

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 restore_include_path() example

<?php

echo get_include_path();  // .:/usr/local/lib/php

set_include_path('/inc');

echo 
get_include_path();  // /inc

// Works as of PHP 4.3.0
restore_include_path();

// Works in all PHP versions
ini_restore('include_path');

echo 
get_include_path();  // .:/usr/local/lib/php

?>

Siehe auch



set_include_path

(PHP 4 >= 4.3.0, PHP 5)

set_include_pathSets the include_path configuration option

Beschreibung

string set_include_path ( string $new_include_path )

Sets the include_path configuration option for the duration of the script.

Parameter-Liste

new_include_path

The new value for the include_path

Rückgabewerte

Returns the old include_path on success or FALSE on failure.

Beispiele

Beispiel #1 set_include_path() example

<?php
// Works as of PHP 4.3.0
set_include_path('/inc');

// Works in all PHP versions
ini_set('include_path''/inc');
?>

Beispiel #2 Adding to the include path

Making use of the PATH_SEPARATOR constant, it is possible to extend the include path regardless of the operating system.

In this example we add /usr/lib/pear to the end of the existing include_path.

<?php
$path 
'/usr/lib/pear';
set_include_path(get_include_path() . PATH_SEPARATOR $path);
?>

Siehe auch



set_magic_quotes_runtime

(PHP 4, PHP 5)

set_magic_quotes_runtimeSetzt magic_quotes_runtime

Beschreibung

long set_magic_quotes_runtime ( int $new_setting )

Setzt magic_quotes_runtime. (0 für aus, 1 für an).

Siehe auch get_magic_quotes_gpc() und get_magic_quotes_runtime().



set_time_limit

(PHP 4, PHP 5)

set_time_limitLegt die maximale Ausführungszeit fest

Beschreibung

void set_time_limit ( int $seconds )

Legt die Zeit in Sekunden fest, die ein Script laufen darf. Ist diese Zeit abgelaufen, wird ein Fehler zurückgegeben. Der Standard liegt bei 30 Sekunden, es sei denn max_execution_time wurde in php.ini gesetzt.

Wenn set_time_limit() aufgerufen wird, dann startet der Zähler neu. Das heißt, wenn die Standardeinstellung 30 Sekunden beträgt und nach 25 Sekunden durch ein Script ein Aufruf wie z.B. set_time_limit(20) erfolgt, darf das Script insgesamt 45 Sekunden laufen, bevor eine Fehlermeldung ausgegeben wird.

Parameter-Liste

seconds

Die maximale Ausführungszeit in Sekunden, oder 0 wenn die Ausführungszeit nicht limitiert werden soll.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Anmerkungen

Warnung

Diese Funktion hat keine Wirkung, wenn PHP im Safe Mode ausgeführt wird. Dies lässt sich nur umgehen, wenn man den Safe Mode deaktiviert oder das Zeitlimit bereits in der php.ini ändert.

Hinweis: Die set_time_limit()-Funktion und die max_execution_time Konfigurationsdirektive beschränken nur die Ausführungszeit des Skripts selbst. Zeit die für Aktivitäten außerhalb des Skripts aufgebracht wird wie z.B. die Ausführung von Systemaufrufen mit system(), Streamoperationen, Datenbankabfragen usw. werden nicht in die Berechnung der Ausführungszeit mit einbezogen.



sys_get_temp_dir

(PHP 5 >= 5.2.1)

sys_get_temp_dirReturns directory path used for temporary files

Beschreibung

string sys_get_temp_dir ( void )

Returns the path of the directory PHP stores temporary files in by default.

Rückgabewerte

Returns the path of the temporary directory.

Beispiele

Beispiel #1 sys_get_temp_dir() example

<?php
// Create a temporary file in the temporary 
// files directory using sys_get_temp_dir()
$temp_file tempnam(sys_get_temp_dir(), 'Tux');

echo 
$temp_file;
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

C:\Windows\Temp\TuxA318.tmp

Siehe auch

  • tmpfile() - Legt eine temporäre Datei an
  • tempnam() - Erzeugt eine Datei mit eindeutigem Dateinamen



version_compare

(PHP 4 >= 4.1.0, PHP 5)

version_compareCompares two "PHP-standardized" version number strings

Beschreibung

mixed version_compare ( string $version1 , string $version2 [, string $operator ] )

version_compare() compares two "PHP-standardized" version number strings. This is useful if you would like to write programs working only on some versions of PHP.

The function first replaces _, - and + with a dot . in the version strings and also inserts dots . before and after any non number so that for example '4.3.2RC1' becomes '4.3.2.RC.1'. Then it splits the results like if you were using explode('.', $ver). Then it compares the parts starting from left to right. If a part contains special version strings these are handled in the following order: any string not found in this list < dev < alpha = a < beta = b < RC = rc < # < pl = p. This way not only versions with different levels like '4.1' and '4.1.2' can be compared but also any PHP specific version containing development state.

Parameter-Liste

version1

First version number.

version2

Second version number.

operator

If you specify the third optional operator argument, you can test for a particular relationship. The possible operators are: <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne respectively.

This parameter is case-sensitive, so values should be lowercase.

Rückgabewerte

By default, version_compare() returns -1 if the first version is lower than the second, 0 if they are equal, and 1 if the second is lower.

When using the optional operator argument, the function will return TRUE if the relationship is the one specified by the operator, FALSE otherwise.

Beispiele

The examples below use the PHP_VERSION constant, because it contains the value of the PHP version that is executing the code.

Beispiel #1 version_compare() examples

<?php
if (version_compare(PHP_VERSION'6.0.0') === 1) {
    echo 
'I am at least PHP version 6.0.0, my version: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.3.0') === 1) {
    echo 
'I am at least PHP version 5.3.0, my version: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.0.0''>')) {
    echo 
'I am using PHP 5, my version: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.0.0''<')) {
    echo 
'I am using PHP 4, my version: ' PHP_VERSION "\n";
}
?>

Anmerkungen

Hinweis: The PHP_VERSION constant holds current PHP version.

Hinweis: Note that pre-release versions, such as 5.3.0-dev, are considered lower than their final release counterparts (like 5.3.0).

Siehe auch

  • phpversion() - Liefert die aktuelle PHP-Version
  • php_uname() - Returns information about the operating system PHP is running on
  • function_exists() - Falls die angegebene Funktion definiert ist, wird TRUE zurück gegeben



zend_logo_guid

(PHP 4, PHP 5)

zend_logo_guidDie GUID des Zend Logos

Beschreibung

string zend_logo_guid ( void )

Diese Funktion gibt die ID des eingebauten Zend Logos zurück die zur Darstellung dieses Logos benutzt werden kann.

Rückgabewerte

Gibt PHPE9568F35-D428-11d2-A769-00AA001ACF42 zurück.

Beispiele

Beispiel #1 zend_logo_guid() Beispiel

<?php

echo '<img src="' $_SERVER['PHP_SELF'] .
     
'?=' zend_logo_guid() . '" alt="Zend Logo !" />';

?>

Siehe auch



zend_thread_id

(PHP 5)

zend_thread_idReturns a unique identifier for the current thread

Beschreibung

int zend_thread_id ( void )

Die Funktion liefert eine eindeutige ID für den aktuellen Thread.

Rückgabewerte

Gibt die Thread-ID als Integer zurück.

Beispiele

Beispiel #1 zend_thread_id()-Beispiel

<?php
$thread_id 
zend_thread_id();

echo 
'Der aktuelle Thread ist: ' $thread_id;
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Der aktuelle Thread ist: 7864

Anmerkungen

Hinweis: Diese Funktion ist nur verfügbar, wenn PHP mit ZTS- (Zend Thread Safety) und Debug- (--enable-debug) -Unterstützung kompiliert wurde.



zend_version

(PHP 4, PHP 5)

zend_versionLiefert die aktuelle Version der Zend Engine

Beschreibung

string zend_version ( void )

Liefert die Versionsnummer der aktuell laufenden Zend Engine als String. Zend Engine.

Rückgabewerte

Liefert die Versionsnummer der Zend Engine als String.

Beispiele

Beispiel #1 zend_version() Beispiel

<?php
echo "Zend Engine Version: " zend_version();
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Zend Engine Version: 2.2.0

Siehe auch


Inhaltsverzeichnis




Memtrack


Einführung

The purpose of this extension is to detect the most memory hungry scripts and functions.

memtrack tracks memory consumption in PHP scripts and produces reports (warnings) when the consumption reaches certain levels set by the user. This is achieved by replacing default executor function by a special function which compares memory usage before and after running the original executor - this way we can tell how much the memory usage has changed during the execution of the current part of the code.

Zend Engine runs its executor for each opcode array (op_array), which usually means function, plain script and such, so memtrack doesn't have any noticeable effect on performance.

memtrack doesn't provide any functions, there are only INI directives which allow you to configure the way it should work.

Warnung

Diese Erweiterung ist EXPERIMENTELL. Das Verhalten dieser Erweiterung, einschließlich der Funktionsnamen, und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Erweiterung auf eigenes Risiko.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/memtrack



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Memtrack Configuration Options
Name Default Changeable
memtrack.enabled "0" PHP_INI_SYSTEM
memtrack.soft_limit "0" PHP_INI_ALL
memtrack.hard_limit "0" PHP_INI_ALL
memtrack.vm_limit "0" PHP_INI_ALL
memtrack.ignore_functions "" PHP_INI_SYSTEM

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

memtrack.enabled boolean

Disables or enables the extension. Default value is 0, i.e. disabled.

memtrack.soft_limit int

Soft memory limit.

The extension checks memory consumption before and after executing an op_array and produces a warning is the difference between the two values is equal to or greater than the soft limit, but only if the function is not ignored.

Setting this option to 0 also disables both soft and hard limit warnings. Default value is 0, i.e. no warnings is produced.

memtrack.hard_limit int

Hard memory limit.

The extension checks memory consumption before and after executing an op_array and produces a warning is the difference between the two values is equal to or greater than the hard limit, even if the function is ignored. Setting this option to 0 disables hard limit warnings completely. Default value is 0, i.e. no hard limit warnings is produced.

memtrack.vm_limit int

Virtual memory limit (set on a process).

This limit is checked only on shutdown and a warning is produced if the value is greater than or equal to the limit.

This option is currently supported only on OSes where mallinfo() function is available (i.e. Linux).

memtrack.ignore_functions string

A comma or whitespace-separated list of functions which are to be ignored by soft_limit. The values are case-insensitive, for class methods use class::method syntax.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Diese Erweiterung definiert keine Konstanten.



Beispiele

Inhaltsverzeichnis


Basic example on using memtrack extension:

Beispiel #1 Creating large array in a function

<?php

/* /tmp/example1.php */

function foo() {
    
$a = array();
    for (
$i 0$i 10000$i++) $a[] = "test";
    return 
$a;
}
$arr foo();

?>

Run the example with the following command:

php -d memtrack.enabled=1 -d memtrack.soft_limit=1M -d memtrack.vm_limit=3M /tmp/example1.php

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Warning: [memtrack] [pid 26177] user function foo() executed in /tmp/example1.php on line 10 allocated 4194304 bytes in /tmp/example1.php on line 0
Warning: [memtrack] [pid 26177] virtual memory usage on shutdown: 32911360 bytes in Unknown on line 0




Objekteigenschaften und Methodenaufrufe überladen


Einführung

Das Ziel dieser Extension ist es zu ermöglichen, dass der Zugriff auf Objekteigenschaften und Methodenaufrufe überladen werden kann. Nur eine einzige Funktion - overload() - ist in dieser Extension definiert, der der Name der Klasse übergeben wird, der die Überladefunktionalität zur Verfügung gestellt werden soll. Die benannte Klasse muss die dazugehörigen Methoden definiert haben, wenn die Funktionalität aktiviert werden soll: __get(), __set() und __call(), um eine Eigenschaft oder einen Methodenaufruf zu beeinflussen. Diese Art des Überladens kann selektiv sein. Innerhalb der Handlerfunktionen ist das Überladen ausgeschaltet, damit können Sie wie gewohnt auf Objekteigenschaften zugreifen.

Warnung

Diese Erweiterung ist EXPERIMENTELL. Das Verhalten dieser Erweiterung, einschließlich der Funktionsnamen, und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Erweiterung auf eigenes Risiko.

Warnung

Diese Extension ist nicht Teil von PHP 5 . PHP 5 unterstützt __get(), __set() und __call() nativ. Lesen Sie auch den Abschnitt Überladen in PHP 5, um mehr Informationen zu erhalten.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Wenn Sie diese Funktionen nutzen wollen, müssen Sie Ihr PHP mit der Option --enable-overload kompilieren. Mit der Einführung von PHP 4.3.0 ist die Extension bereits standardmäßig aktiviert. Sie können dann die Überladungsfunktionalität mittels --disable-overload deaktivieren.

Die Windowsversion von PHP enthält diese Erweiterung. Um diese Funktionen zu verwenden, müssen Sie keine zusätzlichen Erweiterungen aktivieren.

Hinweis: Eingebaute Unterstützung für das Überladen ist ab PHP 4.3.0 verfügbar.



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Diese Erweiterung definiert keine Konstanten.



Beispiele

Inhaltsverzeichnis


Einige einfache Beispiele für die Verwendung der overload()-Funktion:

Beispiel #1 Eine PHP-Klasse überladen

<?php

class OO {
   var 
$a 111;
   var 
$elem = array('b' => 9'c' => 42);

   
// Callback-Methode für die Abfrage einer Eigenschaft
   
function __get($prop_name, &$prop_value)
   {
       if (isset(
$this->elem[$prop_name])) {
           
$prop_value $this->elem[$prop_name];
           return 
true;
       } else {
           return 
false;
       }
   }

   
// Callback-Methode für das Setzen einer Eigenschaft
   
function __set($prop_name$prop_value)
   {
       
$this->elem[$prop_name] = $prop_value;
       return 
true;
   }
}

// Hier überladen wir das OO-Objekt
overload('OO');

$o = new OO;
echo 
"\$o->a: $o->a\n"// print: $o->a: 111
echo "\$o->b: $o->b\n"// print: $o->b: 9
echo "\$o->c: $o->c\n"// print: $o->c: 42
echo "\$o->d: $o->d\n"// print: $o->d:

// füge einen neuen Eintrag zum $elem-Array in OO hinzu
$o->56;

// instanziiere stdclass (ist in PHP 4 eingebaut)
// $val ist nicht überladen!
$val = new stdclass;
$val->prop 555;

// setze "a" als Array mit dem $val-Objekt als Value
// __set() wird dies aber trotzdem dem $elem-Array zuordnen
$o->= array($val);
var_dump($o->a[0]->prop);

?>




Funktionen zum Überladen von Objekten


overload

(PHP 4 >= 4.3.0)

overloadAktivieren des Überladens von Eigenschaften und Methodenaufrufen für eine Klasse

Beschreibung

void overload ( string $class_name )

Die overload()-Funktion aktiviert das Überladen von Eigenschaften und Methodenaufrufen für eine Klasse, die von class_name bestimmt wird.

Parameter-Liste

class_name

Der Name der zu überladenden Klasse als String

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Sie finden ein Beispiel im Einführungsabschnitt zu dieser Extension.


Inhaltsverzeichnis

  • overload — Aktivieren des Überladens von Eigenschaften und Methodenaufrufen für eine Klasse



Ausgabepufferung


Einführung

Mit den Funktionen zur Ausgabesteuerung können Sie die Ausgabe eines Skripts steuern. Dies kann in verschiedenen Situationen ganz nützlich sein, besonders wenn Sie Header an den Browser schicken müssen, nachdem Ihr Skript bereits etwas ausgegeben hat. Die Ausgabesteuerungsfunktionen gelten nicht für Header, die mit header() oder setcookie() geschickt wurden, sondern nur für Daten, die mit echo() gesendet wurden oder für Daten zwischen PHP-Codeblöcken.

Hinweis: Bei Upgrades von PHP 4.1.x (und 4.2.x) auf 4.3.x müssen Sie wegen eines Fehlers in früheren Versionen sicherstellen, dass implict_flush in Ihrer php.ini auf OFF gesetzt ist, anderenfalls werden Ausgaben auch nach Aufruf von ob_start() noch an den Browser weitergegeben.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Für diese Funktionen ist keine Installation erforderlich, diese gehören zum Grundbestand von PHP.



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Output-Control-Konfigurationsoptionen
Name Default Änderbar Kommentar
output_buffering "0" PHP_INI_PERDIR  
output_handler NULL PHP_INI_PERDIR Verfügbar seit 4.0.4.
implicit_flush "0" PHP_INI_ALL PHP_INI_PERDIR in PHP <= 4.2.3.

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

output_buffering boolean/integer

Sie können Output Buffering für alle Scripte aktivieren, indem Sie diesen Wert auf 'On' setzen. Wenn Sie die Größe des Buffers auf limitieren wollen, so können Sie die maximale Größe in Bytes an Stelle von 'On' angeben (z.B. output_buffering=4096). Ab PHP 4.3.5 ist dieser Wert für den PHP-CLI-Kommandozeileninterpreter grundsätzlich 'Off'.

output_handler string

Sie können die Ausgaben Ihres Scriptes an eine Funktion weiterleiten. Wenn sie z.B. mb_output_handler() als output_handler setzen, so wird das Character-Encoding transparent in das spezifizierte Encoding umgewandelt. Das Setzen einer output_handle- Funktion aktiviert das Output Buffering automatisch.

Hinweis: Sie können mb_output_handler() nicht gleichzeitig mit ob_iconv_handler() und ob_gzhandler() nicht gleichzeitig mit zlib.output_compression. benutzen.

Hinweis: Es können nur eingebaute PHP-Funktionen angegeben werden, benutzerdefinierte Funktionen können mit Hilfe der ob_start()-Funktion genutzt werden.

implicit_flush boolean

Diese Option ist standardmäßig deaktiviert. Wenn Sie implicit_flush aktivieren, so wird PHP angewiesen, nach jedem Output-Block automatisch den Output-Layer zu leeren. Dies ist äquivalent zu flush()-Aufrufen nach jedem echo()- oder print()-Aufruf und nach jedem HTML-Block.

In Webanwendungen hat diese Option massive Performanceauswirkungen und sollte wenn überhaupt dann nur zu Debuggingzwecken aktiviert werden. Im PHP-CLI-Kommandozeileninterpreter dagegen ist diese Option standardmäßig aktiviert.

Siehe auch ob_implicit_flush().



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Diese Erweiterung definiert keine Konstanten.



Beispiele

Inhaltsverzeichnis


Beispiele

Beispiel #1 Output-Control-Beispiel

<?php

ob_start
();
echo 
"Hello\n";

setcookie("cookiename""cookiedata");

ob_end_flush();

?>

Im obigen Beispiel wird die Ausgabe der echo() solange im Ausgabepuffer zwischengespeichert, bis die Funktion ob_end_flush() aufgeufen wird. In der Zwischenzeit speichert der Aufruf von setcookie() erfolgreich einen Cookie, ohne einen Fehler zu erzeugen. (Normalerweise können Sie keine header an den Browser mehr schicken, wenn schon Daten ausgegeben wurden.)




Output-Control-Funktionen

Siehe auch

Siehe auch header() und setcookie().


flush

(PHP 4, PHP 5)

flush Leert (sendet) den Ausgabepuffer

Beschreibung

void flush ( void )

flush() sendet den Inhalt des Ausgabepuffers und des darunterliegenden PHP Backends (CGI, Apache, ...). Die bisherigen Ausgaben werden damit soweit wie möglich in Richtung des Users weitergereicht.

flush() hat keinen Einfluss auf das Pufferverhalten des Webservers oder des Browsers auf der Clientseite. Daher müssen Sie sowohl ob_flush() als auch flush() aufrufen um die Ausgabebuffer zu leeren.

Einige Webserver, besonders auf Windwos, puffern Ihre Scriptausgaben weiterhin bis zum Scriptende befor Sie sie zum Browser übertragen.

Auch Apache-Module wie mod_gzip puffern zum Teil Ausgaben und verhindern so das Ausgaben nach flush() direkt zum Benutzer weitergegeben werden.

Selbst Browser können empfangene Ausgaben puffern bevor sie sie tatsächlich darstellen. Netscape Browser z.B. puffern Text bis sie entweder einen Zeilenwechsel oder den Anfang eines Tags emfangen und zeigen Tabellen erst nach dem Empfang des </table> Tags der äußersten Tabelle.

Einige Versionen des Mircrosoft Internet Explorers beginnen erst dann mit der Ausgabe wenn sie mindestens 256 Bytes empfangen haben. Sie müssen daher eventuell zusätzliche Leerzeichen in Ihre Ausgaben einfügen um eine Darstellung vor Scriptende auf solchen Browsern zu erzwingen.

Rückgabewerte

Es wird kein Wert zurückgegeben.



ob_clean

(PHP 4 >= 4.2.0, PHP 5)

ob_clean Löscht den Ausgabepuffer

Beschreibung

void ob_clean ( void )

Diese Funktion verwirft den aktuellen Inhalt des Ausgabepuffers. Anders als bei ob_end_clean() bleibt der Ausgabepuffer dabei aber erhalten.

Siehe auch ob_flush(), ob_end_flush() und ob_end_clean().

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch

  • ob_flush() - Leert (sendet) den Ausgabepuffer
  • ob_end_flush() - Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
  • ob_end_clean() - Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung



ob_end_clean

(PHP 4, PHP 5)

ob_end_clean Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung

Beschreibung

bool ob_end_clean ( void )

Der Inhalt des Ausgabepuffers (sofern vorhanden) wird verworfen und der Ausgabepuffer (aber nur dieser) wird deaktiviert. Falls sie mit dem Puffer-Inhalt weiter arbeiten möchten, müssen sie diesen erst per ob_get_contents() zwischen speichern bevor sie ob_end_clean() aufrufen, da dadurch der Puffer geleert wird.

Rückgabewerte

Die Funktion gibt TRUE zurück wenn ein Ausgabepuffer entfernt wurde, FALSE wenn kein aktiver Puffer vorhanden war oder der aktuelle Puffer nicht deaktiviert werden konnte (dies ist bei speziellen Puffern möglich).

Fehler/Exceptions

Im Fehlerfall generiert die Funktion eine E_NOTICE Meldung.

Changelog

Version Beschreibung
4.2.0 Der Boolean-Rückgabewert wurde hinzugefügt.

Beispiele

Das folgende Beispiel zeigt einen einfachen Weg um alle aktiven Ausgabepuffer zu entfernen:

Beispiel #1 ob_end_clean() Beispiel

<?php
ob_start
();
echo 
'Text der nicht ausgegeben wird.';
ob_end_clean();
?>

Siehe auch



ob_end_flush

(PHP 4, PHP 5)

ob_end_flush Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung

Beschreibung

bool ob_end_flush ( void )

Der Inhalt des Ausgabepuffers (sofern vorhanden) wird abgeschickt und der Ausgabepuffer (aber nur dieser) wird deaktiviert. Falls sie mit dem Puffer-Inhalt weiter arbeiten möchten, müssen sie diesen erst per ob_get_contents() zwischen speichern bevor sie ob_end_flush() aufrufen, da dadurch der Puffer geleert wird.

Hinweis: Diese Funktion ähnelt ob_get_flush(), aber ob_get_flush() lieft den Inhalt des Puffers als String zurück.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE. Gründe für Fehler sind erstens, dass sie die Funktion ohne einen aktiven Puffer augerufen haben, oder zweitens, dass aus irgendeinem Grund der Puffer nicht gelöscht werden konnte (möglich bei speziellen Puffern).

Fehler/Exceptions

Wenn die Funktion fehlschlägt, generiert sie eine E_NOTICE.

Changelog

Version Beschreibung
4.2.0 Die Funktion gibt nun den Erfolgsstatus als bool zurück.

Beispiele

Beispiel #1 ob_end_clean()-Beispiel

Das folgende Beispiel zeigt einen einfachen Weg, um alle aktiven Ausgabepuffer zu leeren und zu entfernen:

<?php
  
while (@ob_end_flush());
?>

Siehe auch

  • ob_start() - Ausgabepufferung aktivieren
  • ob_get_contents() - Gibt den Inhalt des Ausgabe-Puffers zurück
  • ob_get_flush() - Flush the output buffer, return it as a string and turn off output buffering
  • ob_flush() - Leert (sendet) den Ausgabepuffer
  • ob_end_clean() - Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung



ob_flush

(PHP 4 >= 4.2.0, PHP 5)

ob_flush Leert (sendet) den Ausgabepuffer

Beschreibung

void ob_flush ( void )

Diese Funktion sendet den aktuellen Inhalt des Ausgabepuffers (falls vorhanden). Wenn sie die Pufferinhalte mit ob_get_contents() weiterverarbeiten wollen so müssen sie dies vor Aufruf von ob_flush() tun da diese sonst nicht mehr vorhanden sind.

Anders als bei ob_end_flush() bleibt der Ausgabepuffer erhalten.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch

  • ob_get_contents() - Gibt den Inhalt des Ausgabe-Puffers zurück
  • ob_clean() - Löscht den Ausgabepuffer
  • ob_end_flush() - Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
  • ob_end_clean() - Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung



ob_get_clean

(PHP 4 >= 4.3.0, PHP 5)

ob_get_cleanGet current buffer contents and delete current output buffer

Beschreibung

string ob_get_clean ( void )

Gets the current buffer contents and delete current output buffer.

ob_get_clean() essentially executes both ob_get_contents() and ob_end_clean().

Rückgabewerte

Returns the contents of the output buffer and end output buffering. If output buffering isn't active then FALSE is returned.

Beispiele

Beispiel #1 A simple ob_get_clean() example

<?php

ob_start
();

echo 
"Hello World";

$out ob_get_clean();
$out strtolower($out);

var_dump($out);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:


string(11) "hello world"

Siehe auch



ob_get_contents

(PHP 4, PHP 5)

ob_get_contents Gibt den Inhalt des Ausgabe-Puffers zurück

Beschreibung

string ob_get_contents ( void )

Gibt den Inhalt des Ausgabepuffers ohne Löschung zurück.

Rückgabewerte

ob_get_contents() gibt den Inhalt des Ausgabepuffers zurück ohne ihn zu löschen oder FALSE, wenn die Ausgabe-Pufferung nicht aktiv ist.

Beispiele

Beispiel #1 Einfaches ob_get_contents()-Beispiel

<?php

ob_start
();

echo 
"Hello ";

$out1 ob_get_contents();

echo 
"World";

$out2 ob_get_contents();

ob_end_clean();

var_dump($out1$out2);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(6) "Hello "
string(11) "Hello World"

Siehe auch



ob_get_flush

(PHP 4 >= 4.3.0, PHP 5)

ob_get_flushFlush the output buffer, return it as a string and turn off output buffering

Beschreibung

string ob_get_flush ( void )

ob_get_flush() flushes the output buffer, return it as a string and turns off output buffering.

Hinweis: This function is similar to ob_end_flush(), except that this function returns the buffer as a string.

Rückgabewerte

Returns the output buffer or FALSE if no buffering is active.

Beispiele

Beispiel #1 ob_get_flush() example

<?php
//using output_buffering=On
print_r(ob_list_handlers());

//save buffer in a file
$buffer ob_get_flush();
file_put_contents('buffer.txt'$buffer);

print_r(ob_list_handlers());
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => default output handler
)
Array
(
)

Siehe auch

  • ob_end_clean() - Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
  • ob_end_flush() - Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
  • ob_list_handlers() - List all output handlers in use



ob_get_length

(PHP 4 >= 4.0.2, PHP 5)

ob_get_lengthReturn the length of the output buffer

Beschreibung

int ob_get_length ( void )

This will return the length of the contents in the output buffer.

Rückgabewerte

Returns the length of the output buffer contents or FALSE if no buffering is active.

Beispiele

Beispiel #1 A simple ob_get_length() example

<?php

ob_start
();

echo 
"Hello ";

$len1 ob_get_length();

echo 
"World";

$len2 ob_get_length();

ob_end_clean();

echo 
$len1 ", ." $len2;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

6, 11

Siehe auch



ob_get_level

(PHP 4 >= 4.2.0, PHP 5)

ob_get_level Anzahl der aktiven Ausgabepuffer

Beschreibung

int ob_get_level ( void )

ob_get_level() liefert die Anzahl der zur Zeit gleichzeitig (übereinanderliegend) aktiven Ausgabepuffer oder 0 wenn keine Ausgabepufferung genutzt wird.

Rückgabewerte

Gibt die Anzahle der aktiven Ausgabepuffer zurück. Wenn keine Ausgabepufferung aktiv ist wird 0 zurückgegeben.

Siehe auch



ob_get_status

(PHP 4 >= 4.2.0, PHP 5)

ob_get_statusGet status of output buffers

Beschreibung

array ob_get_status ([ bool $full_status = FALSE ] )

ob_get_status() returns status information on either the top level output buffer or all active output buffer levels if full_status is set to TRUE.

Parameter-Liste

full_status

TRUE to return all active output buffer levels. If FALSE or not set, only the top level output buffer is returned.

Rückgabewerte

If called without the full_status parameter or with full_status = FALSE a simple array with the following elements is returned:

Array
(
    [level] => 2
    [type] => 0
    [status] => 0
    [name] => URL-Rewriter
    [del] => 1
)

Simple ob_get_status() results
Key:level
Value:Output nesting level
Key:type
Value:PHP_OUTPUT_HANDLER_INTERNAL (0) or PHP_OUTPUT_HANDLER_USER (1)
Key:status
Value:One of PHP_OUTPUT_HANDLER_START (0), PHP_OUTPUT_HANDLER_CONT (1) or PHP_OUTPUT_HANDLER_END (2)
Key:name
Value:Name of active output handler or ' default output handler' if none is set
Key:del
Value:Erase-flag as set by ob_start()

If called with full_status = TRUE an array with one element for each active output buffer level is returned. The output level is used as key of the top level array and each array element itself is another array holding status information on one active output level.

Array
(
    [0] => Array
        (
            [chunk_size] => 0
            [size] => 40960
            [block_size] => 10240
            [type] => 1
            [status] => 0
            [name] => default output handler
            [del] => 1
        )

    [1] => Array
        (
            [chunk_size] => 0
            [size] => 40960
            [block_size] => 10240
            [type] => 0
            [buffer_size] => 0
            [status] => 0
            [name] => URL-Rewriter
            [del] => 1
        )

)

The full output contains these additional elements:

Full ob_get_status() results
Key:chunk_size
Value:Chunk size as set by ob_start()
Key:size
Value:...
Key:blocksize
Value:...

Siehe auch



ob_gzhandler

(PHP 4 >= 4.0.4, PHP 5)

ob_gzhandlerob_start callback function to gzip output buffer

Beschreibung

string ob_gzhandler ( string $buffer , int $mode )

ob_gzhandler() is intended to be used as a callback function for ob_start() to help facilitate sending gz-encoded data to web browsers that support compressed web pages. Before ob_gzhandler() actually sends compressed data, it determines what type of content encoding the browser will accept ("gzip", "deflate" or none at all) and will return its output accordingly. All browsers are supported since it's up to the browser to send the correct header saying that it accepts compressed web pages. If a browser doesn't support compressed pages this function returns FALSE.

Parameter-Liste

buffer

mode

Rückgabewerte

Changelog

Version Beschreibung
4.0.5 The mode parameter was added.

Beispiele

Beispiel #1 ob_gzhandler() example

<?php

ob_start
("ob_gzhandler");

?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>

Anmerkungen

Hinweis: ob_gzhandler() requires the zlib extension.

Hinweis: You cannot use both ob_gzhandler() and zlib.output_compression. Also note that using zlib.output_compression is preferred over ob_gzhandler().

Siehe auch

  • ob_start() - Ausgabepufferung aktivieren
  • ob_end_flush() - Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung



ob_implicit_flush

(PHP 4, PHP 5)

ob_implicit_flush Schaltet die implizite Ausgabe ein bzw. aus

Beschreibung

void ob_implicit_flush ([ int $flag ] )

ob_implicit_flush() schaltet die implizite Ausgabe an oder aus. Die implizite Puffer-Ausgabe erzeugt eine Ausgabe nach jedem Ausgabe-Befehl, so dass keine Extra-Aufrufe von flush() mehr erforderlich sind.

Parameter-Liste

flag

TRUE schaltet implizite Ausgabe ein, FALSE schaltet sie aus. Vorgabewert ist TRUE.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch

  • flush() - Leert (sendet) den Ausgabepuffer
  • ob_start() - Ausgabepufferung aktivieren
  • ob_end_flush() - Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung



ob_list_handlers

(PHP 4 >= 4.3.0, PHP 5)

ob_list_handlersList all output handlers in use

Beschreibung

array ob_list_handlers ( void )

Lists all output handlers in use.

Rückgabewerte

This will return an array with the output handlers in use (if any). If output_buffering is enabled or an anonymous function was used with ob_start(), ob_list_handlers() will return "default output handler".

Beispiele

Beispiel #1 ob_list_handlers() example

<?php
//using output_buffering=On
print_r(ob_list_handlers());
ob_end_flush();

ob_start("ob_gzhandler");
print_r(ob_list_handlers());
ob_end_flush();

// anonymous functions
ob_start(create_function('$string''return $string;'));
print_r(ob_list_handlers());
ob_end_flush();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => default output handler
)

Array
(
    [0] => ob_gzhandler
)

Array
(
    [0] => default output handler
)

Siehe auch

  • ob_end_clean() - Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
  • ob_end_flush() - Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
  • ob_get_flush() - Flush the output buffer, return it as a string and turn off output buffering
  • ob_start() - Ausgabepufferung aktivieren



ob_start

(PHP 4, PHP 5)

ob_startAusgabepufferung aktivieren

Beschreibung

bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )

Diese Funktion aktiviert die Ausgabepufferung. Während die Ausgabepufferung aktiv ist werden Scriptausgaben (mit Ausnahme von Headerinformationen) nicht direkt an den Client weitergegeben sondern in einem internen Puffer gesammelt.

Der Inhalt dieses internen Puffers kann mit Hilfe der Funktion ob_get_contents() in eine Stringvariable kopiert werden. Mit der Funktion ob_end_flush() können die Pufferinhalte an den Client ausgegeben werden, ob_end_clean() wird der Puffer ohne Ausgabe gelöscht.

ob_start() kann über den optionalen Parameter output_callback ein Funktion zur Nachbearbeitung der Pufferinhalte mitgegeben werden. Die Funktion sollte als einzigen Parameter einen String erwarten und auch einen String als Rückgabewert zurückliefern. Die so spezifizierte Funktion wird aufgerufen wenn der Pufferinhalt mit ob_end_flush() oder am Scriptende ausgegeben wird. Wenn output_callback aufgerufen wird erhält die Funktion den aktuellen Inhalt des Ausgabepuffers als Parameter, der Rückgabestring wird dann als neuer Pufferinhalt ausgegeben. Ist output_callback kein gültiger Callback-Parameter so gibt ob_start() false zurück. Hat die Callback-Funktion zwei Parameter so wird der zweite Parameter mit einer Bitmaske befüllt die sich aus den Werten PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT und PHP_OUTPUT_HANDLER_END zusammensetzen kann. Liefert output_callback FALSE als Ergebnis so wird der ursprüngliche Pufferinhalt unverändert ausgegeben.

Hinweis: ob_gzhandler() wurde in PHP 4.0.4 eingeführt um die gz-komprimierte Ausgabe an Clients zu ermöglichen die dies unterstützen. Wird ob_gzhandler() als Callback- Funktion spezifiziert so prüft es die vom Client unterstützten Ausgabecodierungen und gibt den Pufferinhalt dementsprechend codiert weiter.

Hinweis: Vor PHP 4.3.2 lieferte die Funktion bei ungültigen output_callback Werten noch nicht FALSE zurück.

Warnung

Einige Webserver (z.B. Apache) ändern das Arbeitsverzeichnis des Scripts vor dem Aufruf der Callback-Funktion am Scriptende. Sie können falls nötig mit Hilfe von chdir(dirname($_SERVER['SCRIPT_FILENAME'])) wieder in das Scriptverzeichnis zurückwechselni.

Wird ein Wert für den optionalen Parameter chunk_size angegeben so wird die Callback-Funktion jeweils nach dem ersten Newline- Zeichen nach Überschreiten der so festgelegten Anzahl von Ausgabebytes aufgerufen. Wird NULL als Parameterwert übergeben so wird der Parameter ignoriert.

Wird für den Parameter erase FALSE übergeben so wird der Ausgabepuffer nur zum Scriptende geleert (ab PHP 4.3.0).

Ausgabepuffer können verschachtelt werden, d.g. Sie können ob_start() erneut aufrufen während bereits ein anderer ob_start() Aufruf aktiv ist. Sie müssen nur sicher stellen das Sie später auch ob_end_flush() entsprechend oft aufrufen. Sind mehrere Callback-Funktion aktiv so werden die Ausgaben der Reihe nach von Ausgabepuffer zu Ausgabepuffer weitergegeben und die Callback-Funktionen in Verschachtelungsreihenfolge aufgerufen.

ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() und ob_start() können innerhalb einer Callback-Funktion nicht benutzt werden, das Ergebnis eines solchen Aufrufs ist nicht definiert. Wenn Sie den Inhalt eines Puffers aus einem Callback löschen wollen so gegeben Sie einfach den Leerstring "" zurück. Auch Funktionen wie print_r($expression, true) oder highlight_file($filename, true) die den Ausgabepuffermechanismus intern nutzen können innerhalb eines Callbacks nicht benutzt werden.

Beispiel #1 Beispiel einer benutzerkonfigurierten Callbackfunktion

<?php

function callback($buffer
{
  
// ersetzt Äpfel mit Birnen
  
return (str_replace("Äpfel""Birnen"$buffer));
}

ob_start("callback");

?>
<html>
<body>
<p>Das ist wie Äpfel mit Birnen zu vergleichen.</p>
</body>
</html>
<?php

ob_end_flush
();

?>

Would produce:

<html>
<body>
<p>Das ist wie Birnen mit Birnen zu vergleichen.</p>
</body>
</html>

Siehe auch ob_get_contents(), ob_end_flush(), ob_end_clean(), ob_implicit_flush(), ob_gzhandler(), ob_iconv_handler() mb_output_handler(), und ob_tidyhandler().



output_add_rewrite_var

(PHP 4 >= 4.3.0, PHP 5)

output_add_rewrite_var Setzt URL Revriter Variablen

Description

bool output_add_rewrite_var ( string $name , string $value )

Diese Funktion fügt ein Name/Wert-Paar zum URL Rewrite Mechanismus hinzu. Name und Wert werden in der gleichen Art wie die Session-ID als GET-Parameter zu URLs und als versteckte Felder zu Formularen hinzugefügt wenn das transparente URL-Rewriting mit session.use_trans_sid aktiviert ist. Bitte beachten Sie das nur relative URLs, nicht aber absolute wie http://example.com/... automatisch erweitert werden.

Diese Funktion wird auch über den php.ini Parameter url_rewriter.tags gesteuert.

Hinweis: Ein Aufruf dieser Funktion aktiviert automatisch die Ausgabepufferung falls sie nicht schon aktiv ist.

Beispiel #1 output_add_rewrite_var() Beispiel

<?php
output_add_rewrite_var
('var''value');

// some links
echo '<a href="file.php">link</a>
<a href="http://example.com">link2</a>'
;

// a form
echo '<form action="script.php" method="post">
<input type="text" name="var2" />
</form>'
;

print_r(ob_list_handlers());
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

<a href="file.php?var=value">link</a>
<a href="http://example.com">link2</a>

<form action="script.php" method="post">
<input type="hidden" name="var" value="value" />
<input type="text" name="var2" />
</form>

Array
(
    [0] => URL-Rewriter
)

Siehe auch output_reset_rewrite_vars(), ob_flush() und ob_list_handlers().



output_reset_rewrite_vars

(PHP 4 >= 4.3.0, PHP 5)

output_reset_rewrite_varsReset URL rewriter values

Beschreibung

bool output_reset_rewrite_vars ( void )

This function resets the URL rewriter and removes all rewrite variables previously set by the output_add_rewrite_var() function or the session mechanism (if session.use_trans_sid was set on session_start()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 output_reset_rewrite_vars() example

<?php
session_start
();
output_add_rewrite_var('var''value');

echo 
'<a href="file.php">link</a>';
ob_flush();

output_reset_rewrite_vars();
echo 
'<a href="file.php">link</a>';
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

<a href="file.php?PHPSESSID=xxx&var=value">link</a>
<a href="file.php">link</a>

Siehe auch


Inhaltsverzeichnis




runkit


Einführung

The runkit extension provides means to modify constants, user-defined functions, and user-defined classes. It also provides for custom superglobal variables and embeddable sub-interpreters via sandboxing.

This package is meant as a feature added replacement for the » classkit package. When compiled with the --enable-runkit=classkit option to ./configure, it will export classkit compatible function definitions and constants.



Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

RUNKIT_IMPORT_FUNCTIONS (integer)
runkit_import() flag indicating that normal functions should be imported from the specified file.
RUNKIT_IMPORT_CLASS_METHODS (integer)
runkit_import() flag indicating that class methods should be imported from the specified file.
RUNKIT_IMPORT_CLASS_CONSTS (integer)
runkit_import() flag indicating that class constants should be imported from the specified file. Note that this flag is only meaningful in PHP versions 5.1.0 and above.
RUNKIT_IMPORT_CLASS_PROPS (integer)
runkit_import() flag indicating that class standard properties should be imported from the specified file.
RUNKIT_IMPORT_CLASSES (integer)
runkit_import() flag representing a bitwise OR of the RUNKIT_IMPORT_CLASS_* constants.
RUNKIT_IMPORT_OVERRIDE (integer)
runkit_import() flag indicating that if any of the imported functions, methods, constants, or properties already exist, they should be replaced with the new definitions. If this flag is not set, then any imported definitions which already exist will be discarded.
RUNKIT_ACC_PUBLIC (integer)
PHP 5 specific flag to runkit_method_add()
RUNKIT_ACC_PROTECTED (integer)
PHP 5 specific flag to runkit_method_add()
RUNKIT_ACC_PRIVATE (integer)
PHP 5 specific flag to runkit_method_add()
CLASSKIT_ACC_PUBLIC (integer)
PHP 5 specific flag to classkit_method_add() Only defined when classkit compatibility is enabled.
CLASSKIT_ACC_PROTECTED (integer)
PHP 5 specific flag to classkit_method_add() Only defined when classkit compatibility is enabled.
CLASSKIT_ACC_PRIVATE (integer)
PHP 5 specific flag to classkit_method_add() Only defined when classkit compatibility is enabled.
CLASSKIT_AGGREGATE_OVERRIDE (integer)
PHP 5 specific flag to classkit_import() Only defined when classkit compatibility is enabled.
RUNKIT_VERSION (string)
Defined to the current version of the runkit package.
CLASSKIT_VERSION (string)
Defined to the current version of the runkit package. Only defined when classkit compatibility is enabled.


Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Modifying Constants, Functions, Classes, and Methods works with all releases of PHP 4 and PHP 5. No special requirements are necessary.

Custom Superglobals are only available in PHP 4.2.0 or later.

Sandboxing requires PHP 5.1.0 or later, or PHP 5.0.0 with a special TSRM patch applied. Regardless of which version of PHP is in use it must be compiled with the --enable-maintainer-zts option. See the README file in the runkit package for additional information.



Installation

Diese » PECL-Extension ist nicht Teil von PHP.

Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/runkit.

Sie können die DLL für diese PECL-Extension entweder von » PHP-Downloads oder von » http://pecl4win.php.net/ herunterladen.



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Runkit Configuration Options
Name Default Changeable Changelog
runkit.superglobal "" PHP_INI_PERDIR  
runkit.internal_override "0" PHP_INI_SYSTEM  

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

runkit.superglobal string
Comma-separated list of variable names to be treated as superglobals. This value should be set in the systemwide php.ini file, but may work in perdir configuration contexts depending on your SAPI.

Beispiel #1 Custom Superglobals with runkit.superglobal=_FOO,_BAR in php.ini

<?php
function show_values() {
  echo 
"Foo is $_FOO\n";
  echo 
"Bar is $_BAR\n";
  echo 
"Baz is $_BAZ\n";
}

$_FOO 'foo';
$_BAR 'bar';
$_BAZ 'baz';

/* Displays foo and bar, but not baz */
show_values();
?>
runkit.internal_override boolean
Enables ability to modify/rename/remove internal functions.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




runkit Funktionen


Runkit_Sandbox

(PECL runkit >= 0.7.0)

Runkit_Sandbox Runkit Sandbox Class -- PHP Virtual Machine

Beschreibung

Instantiating the Runkit_Sandbox class creates a new thread with its own scope and program stack. Using a set of options passed to the constructor, this environment may be restricted to a subset of what the primary interpreter can do and provide a safer environment for executing user supplied code.

Hinweis: Sandbox-Unterstützung (wird benötigt für runkit_lint(), runkit_lint_file(), und die Runkit_Sandbox-Klasse) ist nur ab PHP 5.1 und speziell gepatchten Versionen von PHP 5.0 verfügbar und setzt voraus das Thread-Unterstützung aktiviert wurde. Weiterführende Informationen finden sie in der README-Datei des runkit-Pakets.

Constructor

void Runkit_Sandbox::__construct ([ array $options ] )

options is an associative array containing any combination of the special ini options listed below.

safe_mode

If the outer script which is instantiating the Runkit_Sandbox class is configured with safe_mode = off, then safe_mode may be turned on for the sandbox environment. This setting can not be used to disable safe_mode when it's already enabled in the outer script.

safe_mode_gid

If the outer script which is instantiating the Runkit_Sandbox class is configured with safe_mode_gid = on, then safe_mode_gid may be turned off for the sandbox environment. This setting can not be used to enable safe_mode_gid when it's already disabled in the outer script.

safe_mode_include_dir

If the outer script which is instantiating the Runkit_Sandbox class is configured with a safe_mode_include_dir, then a new safe_mode_include_dir may be set for sandbox environments below the currently defined value. safe_mode_include_dir may also be cleared to indicate that the bypass feature is disabled. If safe_mode_include_dir was blank in the outer script, but safe_mode was not enabled, then any arbitrary safe_mode_include_dir may be set while turning safe_mode on.

open_basedir

open_basedir may be set to any path below the current setting of open_basedir. If open_basedir is not set within the global scope, then it is assumed to be the root directory and may be set to any location.

allow_url_fopen

Like safe_mode , this setting can only be made more restrictive, in this case by setting it to FALSE when it is previously set to TRUE

disable_functions

Comma separated list of functions to disable within the sandbox sub-interpreter. This list need not contain the names of the currently disabled functions, they will remain disabled whether listed here or not.

disable_classes

Comma separated list of classes to disable within the sandbox sub-interpreter. This list need not contain the names of the currently disabled classes, they will remain disabled whether listed here or not.

runkit.superglobal

Comma separated list of variables to be treated as superglobals within the sandbox sub-interpreter. These variables will be used in addition to any variables defined internally or through the global runkit.superglobal setting.

runkit.internal_override

Ini option runkit.internal_override may be disabled (but not re-enabled) within sandboxes.

Beispiel #1 Instantiating a restricted sandbox

<?php
$options 
= array(
  
'safe_mode'=>true,
  
'open_basedir'=>'/var/www/users/jdoe/',
  
'allow_url_fopen'=>'false',
  
'disable_functions'=>'exec,shell_exec,passthru,system',
  
'disable_classes'=>'myAppClass');
$sandbox = new Runkit_Sandbox($options);
/* Non-protected ini settings may set normally */
$sandbox->ini_set('html_errors',true);
?>

Accessing Variables

All variables in the global scope of the sandbox environment are accessible as properties of the sandbox object. The first thing to note is that because of the way memory between these two threads is managed, object and resource variables can not currently be exchanged between interpreters. Additionally, all arrays are deep copied and any references will be lost. This also means that references between interpreters are not possible.

Beispiel #2 Working with variables in a sandbox

<?php
$sandbox 
= new Runkit_Sandbox();

$sandbox->foo 'bar';
$sandbox->eval('echo "$foo\n"; $bar = $foo . "baz";');
echo 
"{$sandbox->bar}\n";
if (isset(
$sandbox->foo)) unset($sandbox->foo);
$sandbox->eval('var_dump(isset($foo));');
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

bar
barbaz
bool(false)

Calling PHP Functions

Any function defined within the sandbox may be called as a method on the sandbox object. This also includes a few pseudo-function language constructs: eval(), include(), include_once(), require(), require_once(), echo(), print(), die(), and exit().

Beispiel #3 Calling sandbox functions

<?php
$sandbox 
= new Runkit_Sandbox();

echo 
$sandbox->str_replace('a','f','abc');
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

fbc

When passing arguments to a sandbox function, the arguments are taken from the outer instance of PHP. If you wish to pass arguments from the sandbox's scope, be sure to access them as properties of the sandbox object as illustrated above.

Beispiel #4 Passing arguments to sandbox functions

<?php
$sandbox 
= new Runkit_Sandbox();

$foo 'bar';
$sandbox->foo 'baz';
echo 
$sandbox->str_replace('a',$foo,'a');
echo 
$sandbox->str_replace('a',$sandbox->foo,'a');
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

bar
baz

Changing Sandbox Settings

As of runkit version 0.5, certain Sandbox settings may be modified on the fly using ArrayAccess syntax. Some settings, such as active are read-only and meant to provide status information. Other settings, such as output_handler may be set and read much like a normal array offset. Future settings may be write-only, however no such settings currently exist.

Sandbox Settings / Status Indicators
Setting Type Purpose Default
active Boolean (Read Only) TRUE if the Sandbox is still in a usable state, FALSE if the request is in bailout due to a call to die(), exit(), or because of a fatal error condition. TRUE (Initial)
output_handler Callback When set to a valid callback, all output generated by the Sandbox instance will be processed through the named function. Sandbox output handlers follow the same calling conventions as the system-wide output handler. None
parent_access Boolean May the sandbox use instances of the Runkit_Sandbox_Parent class? Must be enabled for other Runkit_Sandbox_Parent related settings to work. FALSE
parent_read Boolean May the sandbox read variables in its parent's context? FALSE
parent_write Boolean May the sandbox modify variables in its parent's context? FALSE
parent_eval Boolean May the sandbox evaluate arbitrary code in its parent's context? DANGEROUS FALSE
parent_include Boolean May the sandbox include php code files in its parent's context? DANGEROUS FALSE
parent_echo Boolean May the sandbox echo data in its parent's context effectively bypassing its own output_handler? FALSE
parent_call Boolean May the sandbox call functions in its parent's context? FALSE
parent_die Boolean May the sandbox kill its own parent? (And thus itself) FALSE
parent_scope Integer What scope will parental property access look at? 0 == Global scope, 1 == Calling scope, 2 == Scope preceeding calling scope, 3 == The scope before that, etc..., etc... 0 (Global)
parent_scope String When parent_scope is set to a string value, it refers to a named array variable in the global scope. If the named variable does not exist at the time of access it will be created as an empty array. If the variable exists but it not an array, a dummy array will be created containing a reference to the named global variable.  



Runkit_Sandbox_Parent

(PECL runkit >= 0.7.0)

Runkit_Sandbox_Parent Runkit Anti-Sandbox Class

Beschreibung

void Runkit_Sandbox_Parent::__construct ( void )

Instantiating the Runkit_Sandbox_Parent class from within a sandbox environment created from the Runkit_Sandbox class provides some (controlled) means for a sandbox child to access its parent.

Hinweis: Sandbox-Unterstützung (wird benötigt für runkit_lint(), runkit_lint_file(), und die Runkit_Sandbox-Klasse) ist nur ab PHP 5.1 und speziell gepatchten Versionen von PHP 5.0 verfügbar und setzt voraus das Thread-Unterstützung aktiviert wurde. Weiterführende Informationen finden sie in der README-Datei des runkit-Pakets.

In order for any of the Runkit_Sandbox_Parent features to function. Support must be enabled on a per-sandbox basis by enabling the parent_access flag from the parent's context.

Beispiel #1 Working with variables in a sandbox

<?php
$sandbox 
= new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>

Accessing the Parent's Variables

Just as with sandbox variable access, a sandbox parent's variables may be read from and written to as properties of the Runkit_Sandbox_Parent class. Read access to parental variables may be enabled with the parent_read setting (in addition to the base parent_access setting). Write access, in turn, is enabled through the parent_write setting.

Unlike sandbox child variable access, the variable scope is not limited to globals only. By setting the parent_scope setting to an appropriate integer value, other scopes in the active call stack may be inspected instead. A value of 0 (Default) will direct variable access at the global scope. 1 will point variable access at whatever variable scope was active at the time the current block of sandbox code was executed. Higher values progress back through the functions that called the functions that led to the sandbox executing code that tried to access its own parent's variables.

Beispiel #2 Accessing parental variables

<?php
$php 
= new Runkit_Sandbox();
$php['parent_access'] = true;
$php['parent_read'] = true;

$test "Global";

$php->eval('$PARENT = new Runkit_Sandbox_Parent;');

$php['parent_scope'] = 0;
one();

$php['parent_scope'] = 1;
one();

$php['parent_scope'] = 2;
one();

$php['parent_scope'] = 3;
one();

$php['parent_scope'] = 4;
one();

$php['parent_scope'] = 5;
one();

function 
one() {
    
$test "one()";
    
two();
}

function 
two() {
    
$test "two()";
    
three();
}

function 
three() {
    
$test "three()";
    
$GLOBALS['php']->eval('var_dump($PARENT->test);');
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(6) "Global"
string(7) "three()"
string(5) "two()"
string(5) "one()"
string(6) "Global"
string(6) "Global"

Calling the Parent's Functions

Just as with sandbox access, a sandbox may access its parents functions providing that the proper settings have been enabled. Enabling parent_call will allow the sandbox to call all functions available to the parent scope. Language constructs are each controlled by their own setting: print() and echo() are enabled with parent_echo. die() and exit() are enabled with parent_die. eval() is enabled with parent_eval while include(), include_once(), require(), and require_once() are enabled through parent_include.



runkit_class_adopt

(PECL runkit >= 0.7.0)

runkit_class_adopt Convert a base class to an inherited class, add ancestral methods when appropriate

Beschreibung

bool runkit_class_adopt ( string $classname , string $parentname )

Parameter-Liste

classname

Name of class to be adopted

parentname

Parent class which child class is extending

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 A runkit_class_adopt() example

<?php
class myParent {
  function 
parentFunc() {
    echo 
"Parent Function Output\n";
  }
}

class 
myChild {
}

runkit_class_adopt('myChild','myParent');
myChild::parentFunc();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Parent Function Output

Siehe auch



runkit_class_emancipate

(PECL runkit >= 0.7.0)

runkit_class_emancipate Convert an inherited class to a base class, removes any method whose scope is ancestral

Beschreibung

bool runkit_class_emancipate ( string $classname )

Parameter-Liste

classname

Name of class to emancipate

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 A runkit_class_emancipate() example

<?php
class myParent {
  function 
parentFunc () {
    echo 
"Parent Function Output\n";
  }
}
class 
myChild extends myParent {
}

myChild::parentFunc();
runkit_class_emancipate('myChild');
myChild::parentFunc();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Parent Function Output
Fatal error: Call to undefined function:  parentFunc() in example.php on line 12

Siehe auch

  • runkit_class_adopt() - Convert a base class to an inherited class, add ancestral methods when appropriate



runkit_constant_add

(PECL runkit >= 0.7.0)

runkit_constant_add Similar to define(), but allows defining in class definitions as well

Beschreibung

bool runkit_constant_add ( string $constname , mixed $value )

Parameter-Liste

constname

Name of constant to declare. Either a string to indicate a global constant, or classname::constname to indicate a class constant.

value

NULL, Bool, Long, Double, String, or Resource value to store in the new constant.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



runkit_constant_redefine

(PECL runkit >= 0.7.0)

runkit_constant_redefine Redefine an already defined constant

Beschreibung

bool runkit_constant_redefine ( string $constname , mixed $newvalue )

Parameter-Liste

constname

Constant to redefine. Either string indicating global constant, or classname::constname indicating class constant.

newvalue

New value to assign to constant.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



runkit_constant_remove

(PECL runkit >= 0.7.0)

runkit_constant_remove Remove/Delete an already defined constant

Beschreibung

bool runkit_constant_remove ( string $constname )

Parameter-Liste

constname

Name of constant to remove. Either a string indicating a global constant, or classname::constname indicating a class constant.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



runkit_function_add

(PECL runkit >= 0.7.0)

runkit_function_add Add a new function, similar to create_function()

Beschreibung

bool runkit_function_add ( string $funcname , string $arglist , string $code )

Parameter-Liste

funcname

Name of function to be created

arglist

Comma separated argument list

code

Code making up the function

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 A runkit_function_add() example

<?php
runkit_function_add
('testme','$a,$b','echo "The value of a is $a\n"; echo "The value of b is $b\n";');
testme(1,2);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

The value of a is 1
The value of b is 2

Siehe auch



runkit_function_copy

(PECL runkit >= 0.7.0)

runkit_function_copy Copy a function to a new function name

Beschreibung

bool runkit_function_copy ( string $funcname , string $targetname )

Parameter-Liste

funcname

Name of existing function

targetname

Name of new function to copy definition to

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 A runkit_function_copy() example

<?php
function original() {
  echo 
"In a function\n";
}
runkit_function_copy('original','duplicate');
original();
duplicate();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

In a function
In a function

Siehe auch



runkit_function_redefine

(PECL runkit >= 0.7.0)

runkit_function_redefine Replace a function definition with a new implementation

Beschreibung

bool runkit_function_redefine ( string $funcname , string $arglist , string $code )

Hinweis: Normalerweise können nur benutzerdefinierte Funktionen gelöscht, umbenannt oder modifiziert werden. Wenn Sie auch interne Funktionen übersteuern wollen, müssen Sie runkit.internal_override in Ihrer php.ini aktivieren.

Parameter-Liste

funcname

Name of function to redefine

arglist

New list of arguments to be accepted by function

code

New code implementation

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 A runkit_function_redefine() example

<?php
function testme() {
  echo 
"Original Testme Implementation\n";
}
testme();
runkit_function_redefine('testme','','echo "New Testme Implementation\n";');
testme();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Original Testme Implementation
New Testme Implementation

Siehe auch



runkit_function_remove

(PECL runkit >= 0.7.0)

runkit_function_remove Remove a function definition

Beschreibung

bool runkit_function_remove ( string $funcname )

Hinweis: Normalerweise können nur benutzerdefinierte Funktionen gelöscht, umbenannt oder modifiziert werden. Wenn Sie auch interne Funktionen übersteuern wollen, müssen Sie runkit.internal_override in Ihrer php.ini aktivieren.

Parameter-Liste

funcname

Name of function to be deleted

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



runkit_function_rename

(PECL runkit >= 0.7.0)

runkit_function_rename Change a function's name

Beschreibung

bool runkit_function_rename ( string $funcname , string $newname )

Hinweis: Normalerweise können nur benutzerdefinierte Funktionen gelöscht, umbenannt oder modifiziert werden. Wenn Sie auch interne Funktionen übersteuern wollen, müssen Sie runkit.internal_override in Ihrer php.ini aktivieren.

Parameter-Liste

funcname

Current function name

newname

New function name

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



runkit_import

(PECL runkit >= 0.7.0)

runkit_import Process a PHP file importing function and class definitions, overwriting where appropriate

Beschreibung

bool runkit_import ( string $filename [, int $flags = RUNKIT_IMPORT_CLASS_METHODS ] )

Similar to include() however any code residing outside of a function or class is simply ignored. Additionally, depending on the value of flags , any functions or classes which already exist in the currently running environment will be automatically overwritten by their new definitions.

Parameter-Liste

filename

Filename to import function and class definitions from

flags

Bitwise OR of the RUNKIT_IMPORT_* family of constants.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.



runkit_lint_file

(PECL runkit >= 0.7.0)

runkit_lint_file Check the PHP syntax of the specified file

Beschreibung

bool runkit_lint_file ( string $filename )

The runkit_lint_file() function performs a syntax (lint) check on the specified filename testing for scripting errors. This is similar to using php -l from the commandline.

Hinweis: Sandbox-Unterstützung (wird benötigt für runkit_lint(), runkit_lint_file(), und die Runkit_Sandbox-Klasse) ist nur ab PHP 5.1 und speziell gepatchten Versionen von PHP 5.0 verfügbar und setzt voraus das Thread-Unterstützung aktiviert wurde. Weiterführende Informationen finden sie in der README-Datei des runkit-Pakets.

Parameter-Liste

filename

File containing PHP Code to be lint checked

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



runkit_lint

(PECL runkit >= 0.7.0)

runkit_lint Check the PHP syntax of the specified php code

Beschreibung

bool runkit_lint ( string $code )

The runkit_lint() function performs a syntax (lint) check on the specified php code testing for scripting errors. This is similar to using php -l from the command line except runkit_lint() accepts actual code rather than a filename.

Hinweis: Sandbox-Unterstützung (wird benötigt für runkit_lint(), runkit_lint_file(), und die Runkit_Sandbox-Klasse) ist nur ab PHP 5.1 und speziell gepatchten Versionen von PHP 5.0 verfügbar und setzt voraus das Thread-Unterstützung aktiviert wurde. Weiterführende Informationen finden sie in der README-Datei des runkit-Pakets.

Parameter-Liste

code

PHP Code to be lint checked

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



runkit_method_add

(PECL runkit >= 0.7.0)

runkit_method_addDynamically adds a new method to a given class

Beschreibung

bool runkit_method_add ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Parameter-Liste

classname

The class to which this method will be added

methodname

The name of the method to add

args

Comma-delimited list of arguments for the newly-created method

code

The code to be evaluated when methodname is called

flags

The type of method to create, can be RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED or RUNKIT_ACC_PRIVATE

Hinweis: This parameter is only used as of PHP 5, because, prior to this, all methods were public.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 runkit_method_add() example

<?php
class Example {
    function 
foo() {
        echo 
"foo!\n";
    }
}

// create an Example object
$e = new Example();

// Add a new public method
runkit_method_add(
    
'Example',
    
'add',
    
'$num1, $num2',
    
'return $num1 + $num2;',
    
RUNKIT_ACC_PUBLIC
);

// add 12 + 4
echo $e->add(124);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

16

Siehe auch



runkit_method_copy

(PECL runkit >= 0.7.0)

runkit_method_copyCopies a method from class to another

Beschreibung

bool runkit_method_copy ( string $dClass , string $dMethod , string $sClass [, string $sMethod ] )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Parameter-Liste

dClass

Destination class for copied method

dMethod

Destination method name

sClass

Source class of the method to copy

sMethod

Name of the method to copy from the source class. If this parameter is omitted, the value of dMethod is assumed.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 runkit_method_copy() example

<?php
class Foo {
    function 
example() {
        return 
"foo!\n";
    }
}

class 
Bar {
    
// initially, no methods
}

// copy the example() method from the Foo class to the Bar class, as baz()
runkit_method_copy('Bar''baz''Foo''example');

// output copied function
echo Bar::baz();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

foo!

Siehe auch



runkit_method_redefine

(PECL runkit >= 0.7.0)

runkit_method_redefineDynamically changes the code of the given method

Beschreibung

bool runkit_method_redefine ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )

Hinweis: Diese Funktion kann nicht genutzt werden, um die aktuell ausgeführte (oder verkette) Methode zu manipulieren.

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Parameter-Liste

classname

The class in which to redefine the method

methodname

The name of the method to redefine

args

Comma-delimited list of arguments for the redefined method

code

The new code to be evaluated when methodname is called

flags

The redefined method can be RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED or RUNKIT_ACC_PRIVATE

Hinweis: This parameter is only used as of PHP 5, because, prior to this, all methods were public.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 runkit_method_redefine() example

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
}

// create an Example object
$e = new Example();

// output Example::foo() (before redefine)
echo "Before: " $e->foo();

// Redefine the 'foo' method
runkit_method_redefine(
    
'Example',
    
'foo',
    
'',
    
'return "bar!\n";',
    
RUNKIT_ACC_PUBLIC
);

// output Example::foo() (after redefine)
echo "After: " $e->foo();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Before: foo!
After: bar!

Siehe auch



runkit_method_remove

(PECL runkit >= 0.7.0)

runkit_method_removeDynamically removes the given method

Beschreibung

bool runkit_method_remove ( string $classname , string $methodname )

Hinweis: Diese Funktion kann nicht genutzt werden, um die aktuell ausgeführte (oder verkette) Methode zu manipulieren.

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Parameter-Liste

classname

The class in which to remove the method

methodname

The name of the method to remove

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 runkit_method_remove() example

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
    
    function 
bar() {
        return 
"bar!\n";
    }
}

// Remove the 'foo' method
runkit_method_remove(
    
'Example',
    
'foo'
);

echo 
implode(' 'get_class_methods('Example'));

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

bar

Siehe auch



runkit_method_rename

(PECL runkit >= 0.7.0)

runkit_method_renameDynamically changes the name of the given method

Beschreibung

bool runkit_method_rename ( string $classname , string $methodname , string $newname )

Hinweis: Diese Funktion kann nicht genutzt werden, um die aktuell ausgeführte (oder verkette) Methode zu manipulieren.

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Parameter-Liste

classname

The class in which to rename the method

methodname

The name of the method to rename

newname

The new name to give to the renamed method

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 runkit_method_rename() example

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
}

// Rename the 'foo' method to 'bar'
runkit_method_rename(
    
'Example',
    
'foo',
    
'bar'
);

// output renamed function
echo Example::bar();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

foo!

Siehe auch



runkit_return_value_used

(PECL runkit >= 0.8.0)

runkit_return_value_usedDetermines if the current functions return value will be used

Beschreibung

bool runkit_return_value_used ( void )

Rückgabewerte

Returns TRUE if the function's return value is used by the calling scope, otherwise FALSE

Beispiele

Beispiel #1 runkit_return_value_used() example

<?php
function foo() {
  
var_dump(runkit_return_value_used());
}

foo();
$f foo();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

bool(false)
bool(true)



runkit_sandbox_output_handler

(PECL runkit >= 0.7.0)

runkit_sandbox_output_handler Specify a function to capture and/or process output from a runkit sandbox

Beschreibung

mixed runkit_sandbox_output_handler ( object $sandbox [, mixed $callback ] )

Ordinarily, anything output (such as with echo() or print()) will be output as though it were printed from the parent's scope. Using runkit_sandbox_output_handler() however, output generated by the sandbox (including errors), can be captured by a function outside of the sandbox.

Hinweis: Sandbox-Unterstützung (wird benötigt für runkit_lint(), runkit_lint_file(), und die Runkit_Sandbox-Klasse) ist nur ab PHP 5.1 und speziell gepatchten Versionen von PHP 5.0 verfügbar und setzt voraus das Thread-Unterstützung aktiviert wurde. Weiterführende Informationen finden sie in der README-Datei des runkit-Pakets.

Hinweis: Deprecated
As of runkit version 0.5, this function is deprecated and is scheduled to be removed from the package prior to a 1.0 release. The output handler for a given Runkit_Sandbox instance may be read/set using the array offset syntax shown on the Runkit_Sandbox class definition page.

Parameter-Liste

sandbox

Object instance of Runkit_Sandbox class on which to set output handling.

callback

Name of a function which expects one parameter. Output generated by sandbox will be passed to this callback. Anything returned by the callback will be displayed normally. If this parameter is not passed then output handling will not be changed. If a non-truth value is passed, output handling will be disabled and will revert to direct display.

Rückgabewerte

Returns the name of the previously defined output handler callback, or FALSE if no handler was previously defined.

Beispiele

Beispiel #1 Feeding output to a variable

<?php
function capture_output($str) {
  
$GLOBALS['sandbox_output'] .= $str;

  return 
'';
}

$sandbox_output '';

$php = new Runkit_Sandbox();
runkit_sandbox_output_handler($php'capture_output');
$php->echo("Hello\n");
$php->eval('var_dump("Excuse me");');
$php->die("I lost myself.");
unset(
$php);

echo 
"Sandbox Complete\n\n";
echo 
$sandbox_output;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Sandbox Complete

Hello
string(9) "Excuse me"
I lost myself.



runkit_superglobals

(PECL runkit >= 0.7.0)

runkit_superglobals Return numerically indexed array of registered superglobals

Beschreibung

array runkit_superglobals ( void )

Rückgabewerte

Returns a numerically indexed array of the currently registered superglobals. i.e. _GET, _POST, _REQUEST, _COOKIE, _SESSION, _SERVER, _ENV, _FILES

Siehe auch


Inhaltsverzeichnis




Break the silence operator


Einführung

The scream extension gives the possibility to disable the silencing error control operator so all errors are being reported. This feature is controlled by an ini setting.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

PHP version 5.2.0 or greater.



Installation

Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/scream



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

scream Konfigurationsoptionen
Name Standard Veränderbar Changelog
scream.enabled Off PHP_INI_ALL  

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

scream.enabled int

Whether or not to enable scream.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Beispiele

Inhaltsverzeichnis


Example that shows the effect of scream

This example demonstrates how scream affects the behaviour of PHP's error handler.

Beispiel #1 Enabling and disabling scream at runtime

<?php
// Make sure errors will be shown
ini_set('display_errors'true);
error_reporting(E_ALL);

// Disable scream - this is the default and produce an error
ini_set('scream.enabled'false);
echo 
"Opening http://example.com/not-existing-file\n";
@
fopen('http://example.com/not-existing-file''r');

// Now enable scream and try again
ini_set('scream.enabled'true);
echo 
"Opening http://example.com/not-existing-file\n";
@
fopen('http://example.com/another-not-existing-file''r');
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Opening http://example.com/not-existing-file
Opening http://example.com/not-existing-file

Warning: fopen(http://example.com/another-not-existing-file): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in example.php on line 14

Hinweis: Usually one would set this in the php.ini configuration file instead of changing the code.






Manipulation von Audioformaten


ID3 Tags


Einführung

Diese Funktionen erlauben Ihnen das Lesen und Schreiben von ID3-Tags. ID3-Tags werden in MP3-Dateien verwendet, um Informationen wie Songtitel, interpret, Albumname, Kommentare und weitere zu speichern.

Seit Version 0.2 ist es mit der Extension auch möglich Text-Frames aus ID3 V2.2 Dateien oder höher zu extrahieren.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Die id3 Extension ist Teil des PECL Archivs und kann mit Hilfe des PEAR Installationstools installiert werden. Wenn Sie PHP selbst mit id3 Unterstützung kompilieren wollen laden Sie den Quellcode herunter, entpacken ihn in php-src/ext/id3 und kompilieren dann PHP mit --enable-id3.



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Bei den meisten id3-Funktionen können Sie eine Tag-Version als Parameter angeben oder erhalten eine solche als Rückgabewert der Funktion. Falls Sie auf diese Versionsnummern zugreifen, verwenden Sie bitte diese Konstanten.

ID3_V1_0 (integer)
Verwenden Sie ID3_V1_0 bei der Arbeit mit ID3v1.0 Tags. Diese Tags enthalten die Felder title, artist, album, genre, year und comment.
ID3_V1_1 (integer)
Verwenden Sie ID3_V1_1 bei der Arbeit mit ID3v1.1 Tags. Solche Tags enthalten sämtliche Informationen von ID3v1.0 Tags und zusätzlich eine Tracknummer.
ID3_V2_1 (integer)
Verwenden Sie ID3_V2_1 bei der Arbeit mit ID3 V2.1 tags.
ID3_V2_2 (integer)
Verwenden Sie ID3_V2_2 bei der Arbeit mit ID3v2.2 Tags.
ID3_V2_3 (integer)
Verwenden Sie ID3_V2_3 bei der Arbeit mit ID3v2.3 Tags.
ID3_V2_4 (integer)
Verwenden Sie ID3_V2_4 bei der Arbeit mit ID3v2.4 Tags.
ID3_BEST (integer)
Verwenden Sie ID3_BEST, wenn Sie die id3-Funktionen bestimmen lassen wollen, welche Tag-Version verwendet werden soll.



ID3 Funktionen


id3_get_frame_long_name

(PECL id3 >= 0.2)

id3_get_frame_long_nameErmittelt den ausführlichen Namen eines ID3v2-Frames

Beschreibung

string id3_get_frame_long_name ( string $frameId )

id3_get_frame_long_name() liefert den ausführlichen Namen eines ID3v2-Frames.

Beispiel #1 id3_get_frame_long_name() Beispiel

<?php
$longName 
id3_get_frame_long_name("TOLY");
echo 
$longName;
?>

Das Beispiel liefert folgende Ausgabe:

Original lyricist(s)/text writer(s)

Siehe auch id3_get_frame_short_name().



id3_get_frame_short_name

(PECL id3 >= 0.2)

id3_get_frame_short_nameErmittelt den kurzen Namen eines ID3v2-Frames

Beschreibung

string id3_get_frame_short_name ( string $frameId )

id3_get_frame_short_name() liefert den kurzen Namen für einen ID3v2-Frame.

Beispiel #1 id3_get_frame_short_name() example

<?php
$shortName 
id3_get_frame_short_name("TOLY");
echo 
$shortName;
?>

Liefert die Ausgabe:

originalLyricist

Die Werte, die von id3_get_short_name() zurückgegeben werden, verwendet id3_get_tag() im zurückgegebenen Array.

Siehe auch id3_get_frame_long_name().



id3_get_genre_id

(PECL id3 >= 0.1)

id3_get_genre_idErmitteln der ID für ein Genre

Beschreibung

int id3_get_genre_id ( string $genre )

id3_get_genre_id() liefert die ID für ein Genre. Ist das angegebene Genre nicht in der Genreliste, so wird false zurückgegeben.

Das Genre wird in einem ID3-Tag als Ganzzahl mit einem Wert zwischen 0 und 147 gespeichert.

Beispiel #1 id3_get_genre_id() Beispiel

<?php
$id 
id3_get_genre_id("Alternative");
echo 
$id;
?>

Liefert die Ausgabe:

20

Siehe auch id3_get_genre_list() and id3_get_genre_name().



id3_get_genre_list

(PECL id3 >= 0.1)

id3_get_genre_listErmitteln aller möglichen Genres

Beschreibung

array id3_get_genre_list ( void )

id3_get_genre_list() liefert ein Array, das alle Genres enthält, die in einem ID3-Tag vorkommen können. Diese Liste wurde von Eric Kemp erstellt und später von WinAMP erweitert.

Die Funktion ist hilfreich, um Benutzern eine Liste aller möglichen Genres zur Auswahl zu geben. Beim Aktualisieren eines ID3-Tags, müssen Sie immer eine Ganzzahl zwischen 0 und 147 angeben.

Beispiel #1 id3_get_genre_list() Beispiel

<?php
$genres 
id3_get_genre_list();
print_r($genres);
?>

Liefert die Ausgabe:

Array
(
    [0] => Blues
    [1] => Classic Rock
    [2] => Country
    [3] => Dance
    [4] => Disco
    [5] => Funk
    [6] => Grunge
    [7] => Hip-Hop
    [8] => Jazz
    [9] => Metal
    [10] => New Age
    [11] => Oldies
    [12] => Other
    [13] => Pop
    [14] => R&B
    [15] => Rap
    [16] => Reggae
    [17] => Rock
    [18] => Techno
    [19] => Industrial
    [20] => Alternative
    [21] => Ska
    [22] => Death Metal
    [23] => Pranks
    [24] => Soundtrack
    [25] => Euro-Techno
    [26] => Ambient
    [27] => Trip-Hop
    [28] => Vocal
    [29] => Jazz+Funk
    [30] => Fusion
    [31] => Trance
    [32] => Classical
    [33] => Instrumental
    [34] => Acid
    [35] => House
    [36] => Game
    [37] => Sound Clip
    [38] => Gospel
    [39] => Noise
    [40] => Alternative Rock
    [41] => Bass
    [42] => Soul
    [43] => Punk
    [44] => Space
    [45] => Meditative
    [46] => Instrumental Pop
    [47] => Instrumental Rock
    [48] => Ethnic
    [49] => Gothic
    [50] => Darkwave
    [51] => Techno-Industrial
    [52] => Electronic
    [53] => Pop-Folk
    [54] => Eurodance
    [55] => Dream
    [56] => Southern Rock
    [57] => Comedy
    [58] => Cult
    [59] => Gangsta
    [60] => Top 40
    [61] => Christian Rap
    [62] => Pop/Funk
    [63] => Jungle
    [64] => Native US
    [65] => Cabaret
    [66] => New Wave
    [67] => Psychadelic
    [68] => Rave
    [69] => Showtunes
    [70] => Trailer
    [71] => Lo-Fi
    [72] => Tribal
    [73] => Acid Punk
    [74] => Acid Jazz
    [75] => Polka
    [76] => Retro
    [77] => Musical
    [78] => Rock & Roll
    [79] => Hard Rock
    [80] => Folk
    [81] => Folk-Rock
    [82] => National Folk
    [83] => Swing
    [84] => Fast Fusion
    [85] => Bebob
    [86] => Latin
    [87] => Revival
    [88] => Celtic
    [89] => Bluegrass
    [90] => Avantgarde
    [91] => Gothic Rock
    [92] => Progressive Rock
    [93] => Psychedelic Rock
    [94] => Symphonic Rock
    [95] => Slow Rock
    [96] => Big Band
    [97] => Chorus
    [98] => Easy Listening
    [99] => Acoustic
    [100] => Humour
    [101] => Speech
    [102] => Chanson
    [103] => Opera
    [104] => Chamber Music
    [105] => Sonata
    [106] => Symphony
    [107] => Booty Bass
    [108] => Primus
    [109] => Porn Groove
    [110] => Satire
    [111] => Slow Jam
    [112] => Club
    [113] => Tango
    [114] => Samba
    [115] => Folklore
    [116] => Ballad
    [117] => Power Ballad
    [118] => Rhytmic Soul
    [119] => Freestyle
    [120] => Duet
    [121] => Punk Rock
    [122] => Drum Solo
    [123] => Acapella
    [124] => Euro-House
    [125] => Dance Hall
    [126] => Goa
    [127] => Drum & Bass
    [128] => Club-House
    [129] => Hardcore
    [130] => Terror
    [131] => Indie
    [132] => BritPop
    [133] => Negerpunk
    [134] => Polsk Punk
    [135] => Beat
    [136] => Christian Gangsta
    [137] => Heavy Metal
    [138] => Black Metal
    [139] => Crossover
    [140] => Contemporary C
    [141] => Christian Rock
    [142] => Merengue
    [143] => Salsa
    [144] => Thrash Metal
    [145] => Anime
    [146] => JPop
    [147] => SynthPop
)

Siehe auch id3_get_genre_name() and id3_get_genre_id().



id3_get_genre_name

(PECL id3 >= 0.1)

id3_get_genre_nameErmitteln eine Genrenamen anhand einer Genre-Id

Beschreibung

string id3_get_genre_name ( int $genre_id )

id3_get_genre_name() liefert den Genrenamen für eine zugehörige Genre-Id.

Das Genre wird in einem ID3-Tag als Ganzzahl mit einem Wert zwischen 0 und 147 gespeichert.

Beispiel #1 id3_get_genre_name() Beispiel

<?php
$genre 
id3_get_genre_name(20);
echo 
$genre;
?>

Liefert die Ausgabe:

Alternative

Siehe auch id3_get_genre_list() und id3_get_genre_id().



id3_get_tag

(PECL id3 >= 0.1)

id3_get_tagErmitteln aller Informationen in einem ID3-Tag

Beschreibung

array id3_get_tag ( string $filename [, int $version ] )

id3_get_tag() wird verwendet, um alle Informationen in einem ID3-Tag einer bestimmten Datei zu ermitteln.

Hinweis: Anstelle eines Dateinamens können Sie auch eine stream-Ressource übergeben.

Der optionale Parameter version erlaubt es, die Version des zu schreibenden Tags anzugeben. MP3-Dateien können sowohl ID3v1-, als auch ID3v2-Tags enthalten.

Beispiel #1 id3_get_tag() Beispiel

<?php
$tag 
id3_get_tag"path/to/example.mp3" );
print_r($tag);
?>

Die Ausgabe wird in etwa so aussehen:

Array
(
    [title] => DN-38416
    [artist] => Re:\Legion
    [album] => Reflections
    [year] => 2004
    [genre] => 19
)

Der Key genre enthält eine Ganzzahl zwischen 0 and 147. Sie können die Funktion id3_get_genre_name() verwenden, um diese in eine menschenlesbare Form zu bringen.

Seit Version 0.2 unterstützt id3_get_tag() auch ID3-Tags in den Versionen 2.2, 2.3 und 2.4. Übergeben Sie eine der Konstanten ID3_V2_2, ID3_V2_3 oder ID3_V2_4 als zweiten Parameter, um Informationen aus diesen Tags zu lesen.

Beispiel #2 id3_get_tag() Beispiel

<?php
$tag 
id3_get_tag"path/to/example2.mp3"ID3_V2_3 );
print_r($tag);
?>

Die Ausgabe wird in etwa so aussehen:

Array
(
    [copyright] => Dirty Mac
    [originalArtist] => Dirty Mac
    [composer] => Marcus Götze
    [artist] => Dirty Mac
    [title] => Little Big Man
    [album] => Demo-Tape
    [track] => 5/12
    [genre] => (17)Rock
    [year] => 2001
)

ID3v2.x Tags können weit mehr Informationen über eine MP3-Datei enthalten, als ID3v1.x Tags.

Siehe auch id3_set_tag(), id3_remove_tag() und id3_get_version().



id3_get_version

(PECL id3 >= 0.1)

id3_get_versionVersion eines ID3-Tags feststellen

Beschreibung

int id3_get_version ( string $filename )

id3_get_version() ermittelt die Version(en) des/der ID3-Tags in einer MP3-Datei. Da MP3-Dateien mehrere ID3-Tags enthalten können, sollten Sie den Rückgabewert dieser Funktion bitweise mit den vordefinierten Konstanten ID3_V1_0, ID3_V1_1 und ID3_V2 vergleichen.

Hinweis: Anstelle eines Dateinamens können Sie auch eine stream-Ressource übergeben.

Beispiel #1 id3_get_version() Beispiel

<?php
$version 
id3_get_version"path/to/example.mp3" );
if (
$version ID3_V1_0) {
    echo 
"Contains a 1.x tag\n";
}
if (
$version ID3_V1_1) {
    echo 
"Contains a 1.1 tag\n";
}
if (
$version ID3_V2) {
    echo 
"Contains a 2.x tag\n";
}
?>

Die Ausgabe wird in etwa so aussehen:

Contains a 1.x tag
Contains a 1.1 tag

Wenn eine Datei ein ID3v1.1-Tag enthält, ist auch immer ein v1.0-Tag enthalten, da v1.1 eine Erweiterung von v1.0 ist.

Siehe auch id3_get_tag(), id3_set_tag() und id3_remove_tag().



id3_remove_tag

(PECL id3 >= 0.1)

id3_remove_tagEntfernen eines vorhandenen ID3-Tags

Beschreibung

bool id3_remove_tag ( string $filename [, int $version ] )

id3_remove_tag() entfernt die Informationen, die in einem ID3-Tag gespeichert sind. Wenn kein Tag vorhanden ist, belässt die Funktion die Datei unverändert und gibt false zurück.

Hinweis: Anstelle eines Dateinamens können Sie auch eine stream-Ressource übergeben.

Der optionale Parameter version erlaubt es, die Version des zu schreibenden Tags anzugeben. MP3-Dateien können sowohl ID3v1-, als auch ID3v2-Tags enthalten.

Beispiel #1 id3_remove_tag() Beispiel

<?php
$result 
id3_remove_tag"path/to/example.mp3"ID3_V1_0 );
if (
$result === true) {
    echo 
"Tag succesfully removed\n";
}
?>

Wenn die Datei schreibbar ist und ein ID3v1.0-Tag enthält, erhalten Sie folgende Ausgabe:

Tag succesfully removed

Hinweis: Momentan unterstützt id3_remove_tag() nur ID3-Tags in den Versionen 1.0 und 1.1. Wenn Sie ein ID3v1.0-Tag entfernen und die Datei enthält ein ID3v1.1-Tag, wird dieses entfernt, da v1.1 nur eine Erweiterung von v1.0 ist.

Siehe auch id3_get_tag(), id3_set_tag() und id3_get_version().



id3_set_tag

(PECL id3 >= 0.1)

id3_set_tagManipulation der Informationen in einem ID3-Tag

Beschreibung

bool id3_set_tag ( string $filename , array $tag [, int $version ] )

id3_set_tag() wird verwendet, um die Informationen in einem ID3-Tag zu manipulieren. Wenn kein Tag existiert, so wird es zur Datei hinzugefügt.

Hinweis: Anstelle eines Dateinamens können Sie auch eine stream-Ressource übergeben.

Der optionale Parameter version erlaubt es, die Version des zu schreibenden Tags anzugeben. MP3-Dateien können sowohl ID3v1-, als auch ID3v2-Tags enthalten.

Beispiel #1 id3_set_tag() Beispiel

<?php
$data 
= array(
              
"title" => "Re:Start",
              
"artist" => "Re:\Legion",
              
"comment" => "A nice track"
             
);
$result id3_set_tag"path/to/example.mp3"$dataID3_V1_0 );
if (
$result === true) {
    echo 
"Tag succesfully updated\n";
}
?>

Wenn die Datei schreibbar ist, sieht die Ausgabe wie folgt aus:

Tag succesfully updated

Hinweis: Momentan unterstützt id3_set_tag() nur ID3-Tags in den Versionen 1.0 und 1.1.

Folgende Schlüssel können in dem assoziativen Array verwendet werden:

Schlüssel des assoziativen Arrays
Schlüssel möglicher Wert verfügbar in Tag-Version
title String mit maximal 30 Zeichen v1.0, v1.1
artist String mit maximal 30 Zeichen v1.0, v1.1
album String mit maximal 30 Zeichen v1.0, v1.1
year 4-stellige Zahl v1.0, v1.1
genre Ganzzahl zwischen 0 und 147 v1.0, v1.1
comment String mit maximal 30 Zeichen (28 in v1.1) v1.0, v1.1
track Ganzzahl zwischen 0 und 255 v1.1

Siehe auch id3_get_tag(), id3_remove_tag() und id3_get_version().


Inhaltsverzeichnis




KTaglib


Einführung

KTaglib is an object oriented binding to the taglib library from the KDE project used in projects like Amarok to read and write ID3 and Ogg tags. The library also provides access to audio information. The bindings are designed usually follow the underlying C++ API, but were changed whenever there is a more PHP-like way.

Hinweis: At the moment ktaglib is able to read and write ID3v1 and ID3v2 tags.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

If you want to build ktaglib you need at least taglib 1.5 installed. To obtain the taglib see the » taglib project page. Windows DLL's are build static against taglib, therefore there is no need to have taglib installed.



Installation

KTaglib support in PHP is not enabled by default. You will need to configure PHP --with-ktaglib[=DIR]

Hinweis: KTaglib is part of PECL.




Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

KTaglib uses class constants. Most of the constants are mappings to the according Taglib enums and constants.

KTaglib_MPEG_Header::Version1 (integer)
ID3 version is 1.0
KTaglib_MPEG_Header::Version2 (integer)
ID3 version is 2.0
KTaglib_MPEG_Header::Version2_5 (integer)
ID3 version is 2.5
KTaglib_ID3v2_AttachedPictureFrame::Other (integer)
Picture type Other
KTaglib_ID3v2_AttachedPictureFrame::FileIcon (integer)
Picture type FileIcon
KTaglib_ID3v2_AttachedPictureFrame::OtherFileIcon (integer)
Picture type OtherFileIcon
KTaglib_ID3v2_AttachedPictureFrame::FrontCover (integer)
Picture type FrontCover
KTaglib_ID3v2_AttachedPictureFrame::BackCover (integer)
Picture type BackCover
KTaglib_ID3v2_AttachedPictureFrame::LeafletPage (integer)
Picture type LeafletPage
KTaglib_ID3v2_AttachedPictureFrame::Media (integer)
Picture type Media
KTaglib_ID3v2_AttachedPictureFrame::LeadArtist (integer)
Picture type LeadArtist
KTaglib_ID3v2_AttachedPictureFrame::Artist (integer)
Picture type Artist
KTaglib_ID3v2_AttachedPictureFrame::Conductor (integer)
Picture type Condutor
KTaglib_ID3v2_AttachedPictureFrame::Band (integer)
Picture type Band
KTaglib_ID3v2_AttachedPictureFrame::Composer (integer)
Picture type Composer
KTaglib_ID3v2_AttachedPictureFrame::Lyricist (integer)
Picture type Lyricist
KTaglib_ID3v2_AttachedPictureFrame::RecordingLocation (integer)
Picture type RecordingLocation
KTaglib_ID3v2_AttachedPictureFrame::DuringRecording (integer)
Picture type DuringRecording
KTaglib_ID3v2_AttachedPictureFrame::DuringPerformance (integer)
Picture type DuringPerformance
KTaglib_ID3v2_AttachedPictureFrame::MovieScreenCapture (integer)
Picture type MovieScreenCapture
KTaglib_ID3v2_AttachedPictureFrame::ColouredFish (integer)
Picture type ColouredFish
KTaglib_ID3v2_AttachedPictureFrame::Illustration (integer)
Picture type Illustration
KTaglib_ID3v2_AttachedPictureFrame::BandLogo (integer)
Picture type BandLogo


The KTagLib_MPEG_File class

Einführung

Represents an MPEG file. MPEG files can have ID3v1, ID3v2 tags and audio properties.

Class synopsis

KTagLib_MPEG_File
KTagLib_MPEG_File {
}

KTaglib_MPEG_File::__construct

(0.0.1)

KTaglib_MPEG_File::__constructOpens a new file

Beschreibung

KTaglib_MPEG_File::__construct ( string $filename )

Opens a new MPEG file.

Parameter-Liste

filename

The file to read

Beispiele

Beispiel #1 Opens a new MP3 file and read the title

<?php
$mpeg 
= new KTaglib_MPEG_File('example.mp3');
echo 
$mpeg->getID3v1Tag()->getTitle();
?>



KTaglib_MPEG_File::getAudioProperties

(0.0.1)

KTaglib_MPEG_File::getAudioPropertiesReturns an object that provides access to the audio properties

Beschreibung

public KTaglib_MPEG_File: KTaglib_MPEG_File::getAudioProperties ( void )

Returns an object that provides access to the audio properties of the mpeg file.

Rückgabewerte

Returns an KTaglib_MPEG_AudioProperties object or false.



KTaglib_MPEG_File::getID3v1Tag

(0.0.1)

KTaglib_MPEG_File::getID3v1TagReturns an object representing an ID3v1 tag

Beschreibung

public KTaglib_ID3v1_Tag KTaglib_MPEG_File::getID3v1Tag ([ bool $create = false ] )

Returns an object that represents an ID3v1 tag, which can be used to get information about the ID3v1 tag.

Rückgabewerte

Returns an KTaglib_MPEG_ID3v1Tag object or false if there is no ID3v1 tag.



KTaglib_MPEG_File::getID3v2Tag

(0.0.1)

KTaglib_MPEG_File::getID3v2TagReturns a ID3v2 object

Beschreibung

public KTaglib_ID3v2_Tag KTaglib_MPEG_File::getID3v2Tag ([ bool $create = false ] )

Returns a ID3v2 object for the mpeg file. If no ID3v2 Tag is present, an KTaglib_TagNotFoundException is thrown.

Rückgabewerte

Returns the KTaglib_ID3v2_Tag object of the MPEG file or false if there is no ID3v2 tag


Inhaltsverzeichnis



The KTaglib_MPEG_AudioProperties class

Einführung

Represents the audio properties of a MPEG file, like length, bitrate or samplerate.

Class synopsis

KTaglib_MPEG_Audioproperties
KTaglib_MPEG_AudioProperties {
}

KTaglib_MPEG_AudioProperties::getBitrate

(0.0.1)

KTaglib_MPEG_AudioProperties::getBitrateReturns the bitrate of the MPEG file

Beschreibung

public int KTaglib_MPEG_AudioProperties::getBitrate ( void )

Returns the bitrate of the MPEG file

Rückgabewerte

Returns the bitrate as an integer



KTaglib_MPEG_AudioProperties::getChannels

(0.0.1)

KTaglib_MPEG_AudioProperties::getChannelsReturns the amount of channels of a MPEG file

Beschreibung

public int KTaglib_MPEG_AudioProperties::getChannels ( void )

Returns the amount of channels of the MPEG file

Rückgabewerte

Returns the channel count as an integer



KTaglib_MPEG_AudioProperties::getLayer

(0.0.1)

KTaglib_MPEG_AudioProperties::getLayerReturns the layer of a MPEG file

Beschreibung

public int KTaglib_MPEG_AudioProperties::getLayer ( void )

Returns the layer of the MPEG file (usually 3 for MP3).

Rückgabewerte

Returns the layer as an integer



KTaglib_MPEG_AudioProperties::getLength

(0.0.1)

KTaglib_MPEG_AudioProperties::getLengthReturns the length of a MPEG file

Beschreibung

public int KTaglib_MPEG_AudioProperties::getLength ( void )

Returns the length of the MPEG file

Rückgabewerte

Returns the length as an integer



KTaglib_MPEG_AudioProperties::getSampleBitrate

(0.0.1)

KTaglib_MPEG_AudioProperties::getSampleBitrateReturns the sample bitrate of a MPEG file

Beschreibung

public int KTaglib_MPEG_AudioProperties::getSampleBitrate ( void )

Returns the sample bitrate of the MPEG file

Rückgabewerte

Returns the sample bitrate as an integer



KTaglib_MPEG_AudioProperties::getVersion

(0.0.1)

KTaglib_MPEG_AudioProperties::getVersionReturns the version of a MPEG file

Beschreibung

public int KTaglib_MPEG_AudioProperties::getVersion ( void )

Returns the version of the MPEG file header. The possible versions are defined in Tag_MPEG_Header (Version1, Version2, Version2.5).

Rückgabewerte

Returns the version



KTaglib_MPEG_AudioProperties::isCopyrighted

(0.0.1)

KTaglib_MPEG_AudioProperties::isCopyrightedReturns the length of a MPEG file

Beschreibung

public bool KTaglib_MPEG_AudioProperties::isCopyrighted ( void )

Returns true if the MPEG file is copyrighted

Rückgabewerte

Returns true if the MPEG file is copyrighted



KTaglib_MPEG_AudioProperties::isOriginal

(0.0.1)

KTaglib_MPEG_AudioProperties::isOriginalReturns the length of a MPEG file

Beschreibung

public bool KTaglib_MPEG_AudioProperties::isOriginal ( void )

Returns true if the file is marked as the original file

Rückgabewerte

Returns true if the file is marked as the original file



KTaglib_MPEG_AudioProperties::isProtectionEnabled

(0.0.1)

KTaglib_MPEG_AudioProperties::isProtectionEnabledReturns the length of a MPEG file

Beschreibung

public bool KTaglib_MPEG_AudioProperties::isProtectionEnabled ( void )

Returns true if protection mechanism (like DRM) are enabled for this file

Rückgabewerte

Returns true if protection mechanism (like DRM) are enabled for this file


Inhaltsverzeichnis



The KTaglib_Tag class

Einführung

Base class for ID3v1 or ID3v2 tags

Class synopsis

KTaglib_Tag
KTaglib_Tag {
}

KTaglib_Tag::getAlbum

(0.0.1)

KTaglib_Tag::getAlbumReturns the title string from a ID3 tag

Beschreibung

public string KTaglib_Tag::getAlbum ( void )

Returns the album string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Rückgabewerte

Returns the album string



KTaglib_Tag::getArtist

(0.0.1)

KTaglib_Tag::getArtistReturns the artist string from a ID3 tag

Beschreibung

public string KTaglib_Tag::getArtist ( void )

Returns the artist string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Rückgabewerte

Returns the artist string



KTaglib_Tag::getComment

(0.0.1)

KTaglib_Tag::getCommentReturns the comment from a ID3 tag

Beschreibung

public string KTaglib_Tag::getComment ( void )

Returns the comment of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Rückgabewerte

Returns the comment string



KTaglib_Tag::getGenre

(0.0.1)

KTaglib_Tag::getGenreReturns the genre from a ID3 tag

Beschreibung

public string KTaglib_Tag::getGenre ( void )

Returns the genre of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Rückgabewerte

Returns the genre string



KTaglib_Tag::getTitle

(0.0.1)

KTaglib_Tag::getTitleReturns the title string from a ID3 tag

Beschreibung

public string KTaglib_Tag::getTitle ( void )

Returns the title string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Rückgabewerte

Returns the title string



KTaglib_Tag::getTrack

(0.0.1)

KTaglib_Tag::getTrackReturns the track number from a ID3 tag

Beschreibung

public int KTaglib_Tag::getTrack ( void )

Returns the track number of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Rückgabewerte

Returns the track number as an integer



KTaglib_Tag::getYear

(0.0.1)

KTaglib_Tag::getYearReturns the year from a ID3 tag

Beschreibung

public int KTaglib_Tag::getYear ( void )

Returns the year of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Rückgabewerte

Returns the year as an integer



KTaglib_Tag::isEmpty

(0.0.1)

KTaglib_Tag::isEmptyReturns true if the tag is empty

Beschreibung

public bool KTaglib_Tag::isEmpty ( void )

Returns true if the tag exists, but is empty. This method is implemented in ID3v1 and ID3v2 tags.

Rückgabewerte

Returns true if the tag is empty, otherwise false.


Inhaltsverzeichnis



The KTagLib_ID3v2_Tag class

Einführung

Represents and ID3v2 tag. It provides a list of ID3v2 frames and can be used to add and remove additional frames.

Class synopsis

KTagLib_ID3v2_Tag
extends KTagLib_Tag {
}

KTaglib_ID3v2_Tag::addFrame

(0.0.1)

KTaglib_ID3v2_Tag::addFrameAdd a frame to the ID3v2 tag

Beschreibung

public bool KTaglib_ID3v2_Tag::addFrame ( KTagLib_ID3v2_Frame $frame )

Adds a frame to the ID3v2 tag. The frame must be a valid KTagLib_ID3v2_Frame object. To save the tag, the save function needs to be invoked.

Rückgabewerte

Returns true on success, otherwise false.



KTaglib_ID3v2_Tag::getFrameList

(0.0.1)

KTaglib_ID3v2_Tag::getFrameListReturns an array of ID3v2 frames, associated with the ID3v2 tag

Beschreibung

public array KTaglib_ID3v2_Tag::getFrameList ( void )

Returns an array of ID3v2 frames, associated with the ID3v2 tag.

Rückgabewerte

Return an array of KTaglib_ID3v2_Frame objects


Inhaltsverzeichnis



The KTagLib_ID3v2_Frame class

Einführung

The base class for ID3v2 frames. ID3v2 tags are separated in various specialized frames. Some frames can exists multiple times.

Class synopsis

KTagLib_ID3v2_Frame
extends KTagLib_Tag {
}

KTaglib_ID3v2_Frame::getSize

(0.0.1)

KTaglib_ID3v2_Frame::getSizeReturns the size of the frame in bytes

Beschreibung

public int KTaglib_ID3v2_Frame::getSize ( void )

Returns the size of the frame in bytes. Please refer to id3.org to see what ID3v2 frames are and how they are defined.

Rückgabewerte

Returns the size of the frame in bytes



KTaglib_ID3v2_Frame::__toString

(0.0.1)

KTaglib_ID3v2_Frame::__toStringReturns a string representation of the frame

Beschreibung

public string KTaglib_ID3v2_Frame::__toString ( void )

Returns a string representation of the frame. This might be just the frame id, but might contain more information. Please see the ktaglib documentation for more information

Rückgabewerte

Returns a string representation of the frame.


Inhaltsverzeichnis



The KTaglib_ID3v2_AttachedPictureFrame class

Einführung

Represents an ID3v2 frame that can hold a picture.

Class synopsis

KTaglib_ID3v2_AttachedPictureFrame
extends KTagLib_ID3v2_Frame {
}

KTaglib_ID3v2_AttachedPictureFrame::getDescription

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::getDescriptionReturns a description for the picture in a picture frame

Beschreibung

public string KTaglib_ID3v2_AttachedPictureFrame::getDescription ( void )

Returns the attached description for a picture frame in an ID3v2.x frame.

Rückgabewerte

Returns a description for the picture in a picture frame



KTaglib_ID3v2_AttachedPictureFrame::getMimeType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::getMimeTypeReturns the mime type of the picture

Beschreibung

public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( void )

Returns the mime type of the image represented by the attached picture frame.

Please notice that this method might return different types. While ID3v2.2 have a mime type that doesn't start with "image/", ID3v2.3 and v2.4 usually start with "image/". Therefore the method might return "image/png" for IDv2.3 frames and just "PNG" for ID3v2.2 frames.

Notice that even the frame is an attached picture, the mime type might not be set and therefore an empty string might be returned.

Rückgabewerte

Returns the mime type of the image represented by the attached picture frame.



KTaglib_ID3v2_AttachedPictureFrame::getType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::getTypeReturns the type of the image

Beschreibung

public int KTaglib_ID3v2_AttachedPictureFrame::getType ( void )

Returns the type of the image.

The ID3v2 specification allows an AttachedPictureFrame to set the type of an image. This can be e.g. FrontCover or FileIcon. Please refer to the KTagLib_ID3v2_AttachedPictureFrame class description for a list of available types.

Rückgabewerte

Returns the integer representation of the type.



KTaglib_ID3v2_AttachedPictureFrame::savePicture

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::savePictureSaves the picture to a file

Beschreibung

public bool KTaglib_ID3v2_AttachedPictureFrame::savePicture ( string $filename )

Saves the attached picture to the given filename.

Rückgabewerte

Returns true on success, otherwise false



KTaglib_ID3v2_AttachedPictureFrame::setMimeType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::setMimeTypeSet's the mime type of the picture

Beschreibung

public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( string $type )

Sets the mime type of the image. This should in most cases be "image/png" or "image/jpeg".



KTaglib_ID3v2_AttachedPictureFrame::setPicture

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::setPictureSets the frame picture to the given image

Beschreibung

public void KTaglib_ID3v2_AttachedPictureFrame::setPicture ( string $filename )

Sets the picture to the give image. The image is loaded from the given filename. Please note that the picture is not saved unless you call the save method of the corresponding file object.

Rückgabewerte

Returns true on success, otherwise false



KTaglib_ID3v2_AttachedPictureFrame::setType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::setTypeSet the type of the image

Beschreibung

public void KTaglib_ID3v2_AttachedPictureFrame::setType ( int $type )

Sets the type of the image. This can be e.g. FrontCover or FileIcon. Please refer to the KTaglib_ID3v2_AttachedPictureFrame class description for a list of available types and their constant mappings.


Inhaltsverzeichnis




OGG/Vorbis


Einführung

The OGG/Vorbis file format, as defined by » http://www.vorbis.com/, is a scheme for compressing audio streams by multiple factors with a minimum of quality loss. This extension adds Ogg Vorbis support to PHP's URL Wrappers. When used in read mode, compressed OGG/Vorbis data is expanded to raw PCM audio in one of six PCM encoding formats listed below.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

This extension requires PHP >= 4.3.0, » libogg >= 1.0, and » libvorbis >= 1.0.



Installation

Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/oggvorbis



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

OGG/Vorbis supports PCM encodings in the following formats
Constant Definition
OGGVORBIS_PCM_U8 Unsigned 8-bit PCM.
OGGVORBIS_PCM_S8 Signed 8-bit PCM.
OGGVORBIS_PCM_U16_LE Unsigned 16-bit PCM. Little Endian byte order.
OGGVORBIS_PCM_U16_BE Unsigned 16-bit PCM. Big Endian byte order.
OGGVORBIS_PCM_S16_LE Signed 16-bit PCM. Little Endian byte order.
OGGVORBIS_PCM_S16_BE Signed 16-bit PCM. Big Endian byte order.


Context options

OGG/Vorbis tuning options
Option Definition Relevance Default
pcm_mode PCM byte encoding used. See constants below. Read / Write OGGVORBIS_PCM_S16_LE
rate PCM Sampling rate. Measured in Hz. Write only 44100
bitrate Vorbis Average Bitrate Encoding / Variable Bitrate Encoding. Measured in bps (ABR) or Quality level (VBR: 0.0 to 1.0). 128000 ABR is rough equal to 0.4 VBR. Write only 128000
channels Number of PCM channels. 1 == Mono, 2 == Stereo. Write only 2
serialno Serial Number of stream within file. Must be unique within file. Because of the potential to select a duplicate serial number within a chained file, make efforts to manually assign unique numbers when encoding. Write only Random
comments Associative array of file comments. Will be translated to strtoupper($name) . "=$value". Note: This context option is not available in oggvorbis-0.1 Write only array('ENCODER' => 'PHP/OggVorbis, http://pear.php.net/oggvorbis')


Beispiele

Inhaltsverzeichnis


Examples on using the ogg:// wrapper.

Beispiel #1 Reading an OGG/Vorbis file

<?php
dl
("oggvorbis.so");

/* By default, ogg:// will decode to Signed 16-bit Little Endian */
$fp fopen('ogg://myaudio.ogg''r');

/* Collect some information about the file. */
$metadata stream_get_meta_data($fp);

/* Inspect the first song (usually the only song, 
   but OGG/Vorbis files may be chained) */
$songdata $metadata['wrapper_data'][0];

echo 
"OGG/Vorbis file encoded by: {$songdata['vendor']}\n.";
echo 
"  {$songdata['channels']} channels of {$songdata['rate']}Hz sampling encoded at {$songdata['bitrate_nominal']}bps.\n";
foreach(
$songdata['comments'] as $comment) {
    echo 
"  $comment\n";
}

while (
$audio_data fread($fp8192)) {
  
/* Do something with the PCM audio we're extracting from the OGG.
     Copying to /dev/dsp is a good target on linux systems, 
     just remember to setup the device for your sampling mode first. */
}

fclose($fp);

?>

Beispiel #2 Encode an audio file to OGG/Vorbis

<?php
dl
('oggvorbis.so');

$context stream_context_create(array('ogg'=>array(
             
'pcm_mode' => OGGVORBIS_PCM_S8,  /* Signed 8bit audio */
             
'rate' => 44100,                 /* 44kHz CD quality */
             
'bitrate' => 0.5,                /* Midquality VBR */
             
'channels' => 1,                 /* Mono */
             
'serialno' => 12345)));          /* Unique within our stream */

/* Open file for appending.  This will "chain" a second OGG stream at the end of the first. */
$ogg fopen('ogg://mysong.ogg''a'false$context);

$pcm fopen('mysample.pcm''r');

/* Compress the raw PCM audio from mysample.pcm into mysong.ogg */
stream_copy_to_stream($pcm$ogg);

fclose($pcm);
fclose($ogg);
?>





OpenAL Audio Bindings


Einführung

Platform independent audio bindings. Requires the » OpenAL library.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Diese » PECL-Extension ist nicht Teil von PHP.

Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/openal.

Sie können die DLL für diese PECL-Extension entweder von » PHP-Downloads oder von » http://pecl4win.php.net/ herunterladen.



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

This extension defines four resource types: Open AL(Device) - Returned by openal_device_open(), Open AL(Context) - Returned by openal_context_create(), Open AL(Buffer) - Returned by openal_buffer_create(), and Open AL(Source) - Returned by openal_source_create().




Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

ALC_FREQUENCY (integer)
Context Attribute
ALC_REFRESH (integer)
Context Attribute
ALC_SYNC (integer)
Context Attribute
AL_FREQUENCY (integer)
Buffer Setting
AL_BITS (integer)
Buffer Setting
AL_CHANNELS (integer)
Buffer Setting
AL_SIZE (integer)
Buffer Setting
AL_BUFFER (integer)
Source/Listener Setting (Integer)
AL_SOURCE_RELATIVE (integer)
Source/Listener Setting (Integer)
AL_SOURCE_STATE (integer)
Source/Listener Setting (Integer)
AL_PITCH (integer)
Source/Listener Setting (Float)
AL_GAIN (integer)
Source/Listener Setting (Float)
AL_MIN_GAIN (integer)
Source/Listener Setting (Float)
AL_MAX_GAIN (integer)
Source/Listener Setting (Float)
AL_MAX_DISTANCE (integer)
Source/Listener Setting (Float)
AL_ROLLOFF_FACTOR (integer)
Source/Listener Setting (Float)
AL_CONE_OUTER_GAIN (integer)
Source/Listener Setting (Float)
AL_CONE_INNER_ANGLE (integer)
Source/Listener Setting (Float)
AL_CONE_OUTER_ANGLE (integer)
Source/Listener Setting (Float)
AL_REFERENCE_DISTANCE (integer)
Source/Listener Setting (Float)
AL_POSITION (integer)
Source/Listener Setting (Float Vector)
AL_VELOCITY (integer)
Source/Listener Setting (Float Vector)
AL_DIRECTION (integer)
Source/Listener Setting (Float Vector)
AL_ORIENTATION (integer)
Source/Listener Setting (Float Vector)
AL_FORMAT_MONO8 (integer)
PCM Format
AL_FORMAT_MONO16 (integer)
PCM Format
AL_FORMAT_STEREO8 (integer)
PCM Format
AL_FORMAT_STEREO16 (integer)
PCM Format
AL_INITIAL (integer)
Source State
AL_PLAYING (integer)
Source State
AL_PAUSED (integer)
Source State
AL_STOPPED (integer)
Source State
AL_LOOPING (integer)
Source State
AL_TRUE (integer)
Boolean value recognized by OpenAL
AL_FALSE (integer)
Boolean value recognized by OpenAL


OpenAL Funktionen


openal_buffer_create

(PECL openal >= 0.1.0)

openal_buffer_create Generate OpenAL buffer

Beschreibung

resource openal_buffer_create ( void )

Rückgabewerte

Returns an Open AL(Buffer) resource on success or FALSE on failure.

Siehe auch



openal_buffer_data

(PECL openal >= 0.1.0)

openal_buffer_data Load a buffer with data

Beschreibung

bool openal_buffer_data ( resource $buffer , int $format , string $data , int $freq )

Parameter-Liste

buffer

An Open AL(Buffer) resource (previously created by openal_buffer_create()).

format

Format of data , one of: AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 und AL_FORMAT_STEREO16

data

Block of binary audio data in the format and freq specified.

freq

Frequency of data given in Hz.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_buffer_destroy

(PECL openal >= 0.1.0)

openal_buffer_destroy Destroys an OpenAL buffer

Beschreibung

bool openal_buffer_destroy ( resource $buffer )

Parameter-Liste

buffer

An Open AL(Buffer) resource (previously created by openal_buffer_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_buffer_get

(PECL openal >= 0.1.0)

openal_buffer_get Retrieve an OpenAL buffer property

Beschreibung

int openal_buffer_get ( resource $buffer , int $property )

Parameter-Liste

buffer

An Open AL(Buffer) resource (previously created by openal_buffer_create()).

property

Specific property, one of: AL_FREQUENCY, AL_BITS, AL_CHANNELS und AL_SIZE.

Rückgabewerte

Returns an integer value appropriate to the property requested or FALSE on failure.

Siehe auch



openal_buffer_loadwav

(PECL openal >= 0.1.0)

openal_buffer_loadwav Load a .wav file into a buffer

Beschreibung

bool openal_buffer_loadwav ( resource $buffer , string $wavfile )

Parameter-Liste

buffer

An Open AL(Buffer) resource (previously created by openal_buffer_create()).

wavfile

Path to .wav file on local file system.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_context_create

(PECL openal >= 0.1.0)

openal_context_create Create an audio processing context

Beschreibung

resource openal_context_create ( resource $device )

Parameter-Liste

device

An Open AL(Device) resource (previously created by openal_device_open()).

Rückgabewerte

Returns an Open AL(Context) resource on success or FALSE on failure.

Siehe auch



openal_context_current

(PECL openal >= 0.1.0)

openal_context_current Make the specified context current

Beschreibung

bool openal_context_current ( resource $context )

Parameter-Liste

context

An Open AL(Context) resource (previously created by openal_context_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_context_destroy

(PECL openal >= 0.1.0)

openal_context_destroy Destroys a context

Beschreibung

bool openal_context_destroy ( resource $context )

Parameter-Liste

context

An Open AL(Context) resource (previously created by openal_context_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_context_process

(PECL openal >= 0.1.0)

openal_context_process Process the specified context

Beschreibung

bool openal_context_process ( resource $context )

Parameter-Liste

context

An Open AL(Context) resource (previously created by openal_context_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_context_suspend

(PECL openal >= 0.1.0)

openal_context_suspend Suspend the specified context

Beschreibung

bool openal_context_suspend ( resource $context )

Parameter-Liste

context

An Open AL(Context) resource (previously created by openal_context_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_device_close

(PECL openal >= 0.1.0)

openal_device_close Close an OpenAL device

Beschreibung

bool openal_device_close ( resource $device )

Parameter-Liste

device

An Open AL(Device) resource (previously created by openal_device_open()) to be closed.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_device_open

(PECL openal >= 0.1.0)

openal_device_open Initialize the OpenAL audio layer

Beschreibung

resource openal_device_open ([ string $device_desc ] )

Parameter-Liste

device_desc

Open an audio device optionally specified by device_desc . If device_desc is not specified the first available audio device will be used.

Rückgabewerte

Returns an Open AL(Device) resource on success or FALSE on failure.

Siehe auch



openal_listener_get

(PECL openal >= 0.1.0)

openal_listener_get Retrieve a listener property

Beschreibung

mixed openal_listener_get ( int $property )

Parameter-Liste

property

Property to retrieve, one of: AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)) und AL_ORIENTATION (array(float,float,float)).

Rückgabewerte

Returns a float or array of floats (as appropriate), or FALSE on failure.

Siehe auch



openal_listener_set

(PECL openal >= 0.1.0)

openal_listener_set Set a listener property

Beschreibung

bool openal_listener_set ( int $property , mixed $setting )

Parameter-Liste

property

Property to set, one of: AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)) und AL_ORIENTATION (array(float,float,float)).

setting

Value to set, either float, or an array of floats as appropriate.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_source_create

(PECL openal >= 0.1.0)

openal_source_create Generate a source resource

Beschreibung

resource openal_source_create ( void )

Rückgabewerte

Returns an Open AL(Source) resource on success or FALSE on failure.

Siehe auch



openal_source_destroy

(PECL openal >= 0.1.0)

openal_source_destroy Destroy a source resource

Beschreibung

bool openal_source_destroy ( resource $source )

Parameter-Liste

source

An Open AL(Source) resource (previously created by openal_source_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_source_get

(PECL openal >= 0.1.0)

openal_source_get Retrieve an OpenAL source property

Beschreibung

mixed openal_source_get ( resource $source , int $property )

Parameter-Liste

source

An Open AL(Source) resource (previously created by openal_source_create()).

property

Property to get, one of: AL_SOURCE_RELATIVE (int), AL_SOURCE_STATE (int), AL_PITCH (float), AL_GAIN (float), AL_MIN_GAIN (float), AL_MAX_GAIN (float), AL_MAX_DISTANCE (float), AL_ROLLOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float), AL_CONE_INNER_ANGLE (float), AL_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(float,float,float)).

Rückgabewerte

Returns the type associated with the property being retrieved or FALSE on failure.

Siehe auch



openal_source_pause

(PECL openal >= 0.1.0)

openal_source_pause Pause the source

Beschreibung

bool openal_source_pause ( resource $source )

Parameter-Liste

source

An Open AL(Source) resource (previously created by openal_source_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_source_play

(PECL openal >= 0.1.0)

openal_source_play Start playing the source

Beschreibung

bool openal_source_play ( resource $source )

Parameter-Liste

source

An Open AL(Source) resource (previously created by openal_source_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_source_rewind

(PECL openal >= 0.1.0)

openal_source_rewind Rewind the source

Beschreibung

bool openal_source_rewind ( resource $source )

Parameter-Liste

source

An Open AL(Source) resource (previously created by openal_source_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_source_set

(PECL openal >= 0.1.0)

openal_source_set Set source property

Beschreibung

bool openal_source_set ( resource $source , int $property , mixed $setting )

Parameter-Liste

source

An Open AL(Source) resource (previously created by openal_source_create()).

property

Property to set, one of: AL_BUFFER (OpenAL(Source)), AL_LOOPING (bool), AL_SOURCE_RELATIVE (int), AL_SOURCE_STATE (int), AL_PITCH (float), AL_GAIN (float), AL_MIN_GAIN (float), AL_MAX_GAIN (float), AL_MAX_DISTANCE (float), AL_ROLLOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float), AL_CONE_INNER_ANGLE (float), AL_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(float,float,float)).

setting

Value to assign to specified property . Refer to the description of property for a description of the value(s) expected.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_source_stop

(PECL openal >= 0.1.0)

openal_source_stop Stop playing the source

Beschreibung

bool openal_source_stop ( resource $source )

Parameter-Liste

source

An Open AL(Source) resource (previously created by openal_source_create()).

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



openal_stream

(PECL openal >= 0.1.0)

openal_stream Begin streaming on a source

Beschreibung

resource openal_stream ( resource $source , int $format , int $rate )

Parameter-Liste

source

An Open AL(Source) resource (previously created by openal_source_create()).

format

Format of data , one of: AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 und AL_FORMAT_STEREO16

rate

Frequency of data to stream given in Hz.

Rückgabewerte

Returns a stream resource on success, or FALSE on failure.

Siehe auch


Inhaltsverzeichnis





Authentifizierungsdienste


Kerberos V


Einführung

These package allows you to access Kerberos V administration servers. You can create, modify, and delete Kerberos V principals and policies.

More information about Kerberos can be found at » http://web.mit.edu/kerberos/www/.

Documentation for Kerberos and KADM5 can be found at » http://web.mit.edu/kerberos/www/krb5-1.2/krb5-1.2.8/doc/admin_toc.html.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

These functions allow you to access Kerberos administration servers. In order to have these functions available, you must compile PHP with KADM5 support by using the --with-kadm5 configurable option. If you use this option without specifying the path to KADM5, PHP will use the built-in KADM5 client libraries. Users who run other applications that use KADM5 (for example, running PHP 4 and PHP 5 as concurrent apache modules, or auth-kadm5) should always specify the path to KADM5: --with-kadm5=/path/to/kadm5. This will force PHP to use the client libraries installed by KADM5, avoiding any conflicts.



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

This extension defines a KADM5 handle returned by kadm5_init_with_password().




Vordefinierte Konstanten

Inhaltsverzeichnis

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.


Constants for Attribute Flags

The functions kadm5_create_principal(), kadm5_modify_principal(), and kadm5_modify_principal() allow to specify special attributes using a bitfield. The symbols are defined below:

Attributes for use by the KDC
constant
KRB5_KDB_DISALLOW_POSTDATED
KRB5_KDB_DISALLOW_FORWARDABLE
KRB5_KDB_DISALLOW_TGT_BASED
KRB5_KDB_DISALLOW_RENEWABLE
KRB5_KDB_DISALLOW_PROXIABLE
KRB5_KDB_DISALLOW_DUP_SKEY
KRB5_KDB_DISALLOW_ALL_TIX
KRB5_KDB_REQUIRES_PRE_AUTH
KRB5_KDB_REQUIRES_HW_AUTH
KRB5_KDB_REQUIRES_PWCHANGE
KRB5_KDB_DISALLOW_SVR
KRB5_KDB_PWCHANGE_SERVER
KRB5_KDB_SUPPORT_DESMD5
KRB5_KDB_NEW_PRINC



Constants for Options

The functions kadm5_create_principal(), kadm5_modify_principal(), and kadm5_get_principal() allow to specify or return principal's options as an associative array. The keys for the associative array are defined as string constants below:

Options for creating/modifying/retrieving principals
constant funcdef description
KADM5_PRINCIPAL long The expire time of the princial as a Kerberos timestamp.
KADM5_PRINC_EXPIRE_TIME long The expire time of the princial as a Kerberos timestamp.
KADM5_LAST_PW_CHANGE long The time this principal's password was last changed.
KADM5_PW_EXPIRATION long The expire time of the principal's current password, as a Kerberos timestamp.
KADM5_MAX_LIFE long The maximum lifetime of any Kerberos ticket issued to this principal.
KADM5_MAX_RLIFE long The maximum renewable lifetime of any Kerberos ticket issued to or for this principal.
KADM5_MOD_NAME string The name of the Kerberos principal that most recently modified this principal.
KADM5_MOD_TIME long The time this principal was last modified, as a Kerberos timestamp.
KADM5_KVNO long The version of the principal's current key.
KADM5_POLICY string The name of the policy controlling this principal.
KADM5_CLEARPOLICY long Standard procedure is to assign the 'default' policy to new principals. KADM5_CLEARPOLICY suppresses this behaviour.
KADM5_LAST_SUCCESS long The KDC time of the last successfull AS_REQ.
KADM5_LAST_FAILED long The KDC time of the last failed AS_REQ.
KADM5_FAIL_AUTH_COUNT long The number of consecutive failed AS_REQs.
KADM5_RANDKEY long Generates a random password for the principal. The parameter password will be ignored.
KADM5_ATTRIBUTES long A bitfield of attributes for use by the KDC.




Beispiele

Inhaltsverzeichnis


This simple example shows how to connect, query, print resulting principals and disconnect from a KADM5 database.

Beispiel #1 KADM5 extension overview example

<?php

  $handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

  print 
"<h1>get_principals</h1>\n";
  
$principals kadm5_get_principals($handle);
  for( 
$i=0$i<count($principals); $i++)
      print 
"$principals[$i]<br>\n";

  print 
"<h1>get_policies</h1>\n";
  
$policies kadm5_get_policies($handle);
  for( 
$i=0$i<count($policies); $i++)
      print 
"$policies[$i]<br>\n";

  print 
"<h1>get_principal burbach@GONICUS.LOCAL</h1>\n";

  
$options kadm5_get_principal($handle"burbach@GONICUS.LOCAL" );
  
$keys array_keys($options);
  for( 
$i=0$i<count($keys); $i++) {
    
$value $options[$keys[$i]];
    print 
"$keys[$i]$value<br>\n";
  }

  
$options = array(KADM5_PRINC_EXPIRE_TIME => 0);
  
kadm5_modify_principal($handle"burbach@GONICUS.LOCAL"$options);

  
kadm5_destroy($handle);
?>




KADM5 Funktionen


kadm5_chpass_principal

(PECL kadm5 >= 0.2.3)

kadm5_chpass_principalChanges the principal's password

Beschreibung

bool kadm5_chpass_principal ( resource $handle , string $principal , string $password )

kadm5_chpass_principal() sets the new password password for the principal .

Parameter-Liste

handle

A KADM5 handle.

principal

The principal.

password

The new password.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 Example of changing principal's password

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

kadm5_chpass_principal($handle"burbach@GONICUS.LOCAL""newpassword");

kadm5_destroy($handle);
?>



kadm5_create_principal

(PECL kadm5 >= 0.2.3)

kadm5_create_principalCreates a kerberos principal with the given parameters

Beschreibung

bool kadm5_create_principal ( resource $handle , string $principal [, string $password [, array $options ]] )

Creates a principal with the given password .

Parameter-Liste

handle

A KADM5 handle.

principal

The principal.

password

If password is omitted or is NULL, a random key will be generated.

options

It is possible to specify several optional parameters within the array options . Allowed are the following options: KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_KVNO, KADM5_POLICY, KADM5_CLEARPOLICY, KADM5_MAX_RLIFE.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 Example of principal's creation

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH KRB5_KDB_DISALLOW_PROXIABLE;
$options = array(KADM5_PRINC_EXPIRE_TIME => 0,
                 
KADM5_POLICY => "default",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_create_principal($handle"burbach@GONICUS.LOCAL""password"$options);

kadm5_destroy($handle);
?>

Siehe auch



kadm5_delete_principal

(PECL kadm5 >= 0.2.3)

kadm5_delete_principalDeletes a kerberos principal

Beschreibung

bool kadm5_delete_principal ( resource $handle , string $principal )

Removes the principal from the Kerberos database.

Parameter-Liste

handle

A KADM5 handle.

principal

The removed principal.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 kadm5_delete_principal() example

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

kadm5_delete_principal($handle"burbach@GONICUS.LOCAL");

kadm5_destroy($handle);
?>

Siehe auch



kadm5_destroy

(PECL kadm5 >= 0.2.3)

kadm5_destroyCloses the connection to the admin server and releases all related resources

Beschreibung

bool kadm5_destroy ( resource $handle )

Closes the connection to the admin server and releases all related resources.

Parameter-Liste

handle

A KADM5 handle.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



kadm5_flush

(PECL kadm5 >= 0.2.3)

kadm5_flushFlush all changes to the Kerberos database

Beschreibung

bool kadm5_flush ( resource $handle )

Flush all changes to the Kerberos database, leaving the connection to the Kerberos admin server open.

Parameter-Liste

handle

A KADM5 handle.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.



kadm5_get_policies

(PECL kadm5 >= 0.2.3)

kadm5_get_policiesGets all policies from the Kerberos database

Beschreibung

array kadm5_get_policies ( resource $handle )

Gets an array containing the policies's names.

Parameter-Liste

handle

A KADM5 handle.

Rückgabewerte

Returns array of policies on success, or FALSE on failure.

Beispiele

Beispiel #1 kadm5_get_policies() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_policies</h1>\n";
foreach (
kadm5_get_policies($handle) as $policy) {
    echo 
"$policy<br />\n";
}

kadm5_destroy($handle);
?>



kadm5_get_principal

(PECL kadm5 >= 0.2.3)

kadm5_get_principalGets the principal's entries from the Kerberos database

Beschreibung

array kadm5_get_principal ( resource $handle , string $principal )

Gets the principal's entries from the Kerberos database.

Parameter-Liste

handle

A KADM5 handle.

principal

The principal.

Rückgabewerte

Returns array of options containing the following keys: KADM5_PRINCIPAL, KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_MOD_NAME, KADM5_MOD_TIME, KADM5_KVNO, KADM5_POLICY, KADM5_MAX_RLIFE, KADM5_LAST_SUCCESS, KADM5_LAST_FAILED, KADM5_FAIL_AUTH_COUNT on success, or FALSE on failure.

Beispiele

Beispiel #1 kadm5_get_principal() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_principal burbach@GONICUS.LOCAL</h1>\n";

$options kadm5_get_principal($handle"burbach@GONICUS.LOCAL" );

foreach (
$options as $key => $value) {
    echo 
"$key$value<br />\n";
}

kadm5_destroy($handle);
?>

Siehe auch



kadm5_get_principals

(PECL kadm5 >= 0.2.3)

kadm5_get_principalsGets all principals from the Kerberos database

Beschreibung

array kadm5_get_principals ( resource $handle )

kadm5_get_principals() returns an array containing the principals's names.

Parameter-Liste

handle

A KADM5 handle.

Rückgabewerte

Returns array of principals on success, or FALSE on failure.

Beispiele

Beispiel #1 kadm5_get_principals() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_principals</h1>\n";
foreach (
kadm5_get_principals($handle) as $principal) {
    echo 
"$principal<br />\n";
}

kadm5_destroy($handle);
?>

Siehe auch



kadm5_init_with_password

(PECL kadm5 >= 0.2.3)

kadm5_init_with_passwordOpens a connection to the KADM5 library

Beschreibung

resource kadm5_init_with_password ( string $admin_server , string $realm , string $principal , string $password )

Opens a connection with the KADM5 library using the principal and the given password to obtain initial credentials from the admin_server .

Parameter-Liste

admin_server

The server.

realm

Defines the authentication domain for the connection.

principal

The principal.

password

If password is omitted or is NULL, a random key will be generated.

Rückgabewerte

Returns a KADM5 handle on success, or FALSE on failure.

Beispiele

Beispiel #1 KADM5 initialization example

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH KRB5_KDB_DISALLOW_PROXIABLE;
$options = array(KADM5_PRINC_EXPIRE_TIME => 0,
                 
KADM5_POLICY => "default",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_create_principal($handle"burbach@GONICUS.LOCAL""password"$options);

kadm5_destroy($handle);
?>

Anmerkungen

Hinweis: Connection should be closed after use with kadm5_destroy().

Siehe auch

  • kadm5_destroy() - Closes the connection to the admin server and releases all related resources



kadm5_modify_principal

(PECL kadm5 >= 0.2.3)

kadm5_modify_principalModifies a kerberos principal with the given parameters

Beschreibung

bool kadm5_modify_principal ( resource $handle , string $principal , array $options )

Modifies a principal according to the given options .

Parameter-Liste

handle

A KADM5 handle.

principal

The principal.

options

It is possible to specify several optional parameters within the array options . Allowed are the following options: KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_KVNO, KADM5_POLICY, KADM5_CLEARPOLICY, KADM5_MAX_RLIFE. KADM5_FAIL_AUTH_COUNT.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 Example of modifying principal

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH;
$options = array(KADM5_PRINC_EXPIRE_TIME => 3451234,
                 
KADM5_POLICY => "gonicus",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_modify_principal($handle"burbach@GONICUS.LOCAL"$options);

kadm5_destroy($handle);
?>

Siehe auch


Inhaltsverzeichnis




Radius


Einführung

This package is based on the libradius (Remote Authentication Dial In User Service) of FreeBSD. It allows clients to perform authentication and accounting by means of network requests to remote servers.

This PECL extension adds full support for Radius Authentication (» RFC 2865) and Radius Accounting (» RFC 2866). This package is available for Unix (tested on FreeBSD and Linux) and for Windows.

Hinweis: An exact description for libradius can be found » here. A detailed description of the configuration file can be found » here.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Howto install the package?

  • untar the package (usually into php4/ext)
  • rename radius-x.x to radius
  • run ./buildconf in php4
  • run ./configure --enable-radius
  • make; make install

or if you would like to have it as .so:

  • untar the package
  • run phpize in the radius-x.x directory
  • run ./configure in the radius-x.x directory
  • make; make install

For Windows I recommend to use the php_radius.dll from » http://snaps.php.net/. Einzelne PECL-Extensions können von den PECL-Schnappschussseiten heruntergeladen werden (wählen Sie das geeignete Repository für » http://pecl4win.php.net/



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

RADIUS_ACCESS_REQUEST ()
Authentication Request
RADIUS_ACCESS_ACCEPT ()
Access accepted
RADIUS_ACCESS_REJECT ()
Access rejected
RADIUS_ACCOUNTING_REQUEST ()
Accounting request
RADIUS_ACCOUNTING_RESPONSE ()
Accounting response
RADIUS_ACCESS_CHALLENGE ()
Accsess challenge
RADIUS_USER_NAME (string)
Username
RADIUS_USER_PASSWORD (string)
Password
RADIUS_CHAP_PASSWORD (string)
Chap Password: chappass = md5(ident + plaintextpass + challenge)
RADIUS_NAS_IP_ADDRESS (string)
NAS IP-Adress
RADIUS_NAS_PORT (int)
NAS Port
RADIUS_SERVICE_TYPE (int)

Type of Service, one of:

  • RADIUS_LOGIN
  • RADIUS_FRAMED
  • RADIUS_CALLBACK_LOGIN
  • RADIUS_CALLBACK_FRAMED
  • RADIUS_OUTBOUND
  • RADIUS_ADMINISTRATIVE
  • RADIUS_NAS_PROMPT
  • RADIUS_AUTHENTICATE_ONLY
  • RADIUS_CALLBACK_NAS_PROMPT

RADIUS_FRAMED_PROTOCOL (int)

Framed Protocol, one of:

  • RADIUS_PPP
  • RADIUS_SLIP
  • RADIUS_ARAP
  • RADIUS_GANDALF
  • RADIUS_XYLOGICS

RADIUS_FRAMED_IP_ADDRESS (string)
IP-Address
RADIUS_FRAMED_IP_NETMASK (string)
Netmask
RADIUS_FRAMED_ROUTING (int)
Routing
RADIUS_FILTER_ID (string)
Filter ID
RADIUS_FRAMED_MTU (int)
MTU
RADIUS_FRAMED_COMPRESSION (int)

Compression, one of:

  • RADIUS_COMP_NONE
  • RADIUS_COMP_VJ
  • RADIUS_COMP_IPXHDR

RADIUS_LOGIN_IP_HOST (string)
Login IP Host
RADIUS_LOGIN_SERVICE (int)
Login Service
RADIUS_LOGIN_TCP_PORT (int)
Login TCP Port
RADIUS_REPLY_MESSAGE (string)
Reply Message
RADIUS_CALLBACK_NUMBER (string)
Callback Number
RADIUS_CALLBACK_ID (string)
Callback ID
RADIUS_FRAMED_ROUTE (string)
Framed Route
RADIUS_FRAMED_IPX_NETWORK (string)
Framed IPX Network
RADIUS_STATE (string)
State
RADIUS_CLASS (int)
Class
RADIUS_VENDOR_SPECIFIC (int)
Vendor specific attribute
RADIUS_SESSION_TIMEOUT (int)
Session timeout
RADIUS_IDLE_TIMEOUT (int)
Idle timeout
RADIUS_TERMINATION_ACTION (int)
Termination action
RADIUS_CALLED_STATION_ID (int)
Called Station Id
RADIUS_CALLING_STATION_ID (string)
Calling Station Id
RADIUS_NAS_IDENTIFIER (int)
NAS ID
RADIUS_PROXY_STATE (int)
Proxy State
RADIUS_LOGIN_LAT_SERVICE (int)
Login LAT Service
RADIUS_LOGIN_LAT_NODE (int)
Login LAT Node
RADIUS_LOGIN_LAT_GROUP (int)
Login LAT Group
RADIUS_FRAMED_APPLETALK_LINK (int)
Framed Appletalk Link
RADIUS_FRAMED_APPLETALK_NETWORK (int)
Framed Appletalk Network
RADIUS_FRAMED_APPLETALK_ZONE (int)
Framed Appletalk Zone
RADIUS_CHAP_CHALLENGE (string)
Challenge
RADIUS_NAS_PORT_TYPE (int)

NAS port type, one of:

  • RADIUS_ASYNC
  • RADIUS_SYNC
  • RADIUS_ISDN_SYNC
  • RADIUS_ISDN_ASYNC_V120
  • RADIUS_ISDN_ASYNC_V110
  • RADIUS_VIRTUAL
  • RADIUS_PIAFS
  • RADIUS_HDLC_CLEAR_CHANNEL
  • RADIUS_X_25
  • RADIUS_X_75
  • RADIUS_G_3_FAX
  • RADIUS_SDSL
  • RADIUS_ADSL_CAP
  • RADIUS_ADSL_DMT
  • RADIUS_IDSL
  • RADIUS_ETHERNET
  • RADIUS_XDSL
  • RADIUS_CABLE
  • RADIUS_WIRELESS_OTHER
  • RADIUS_WIRELESS_IEEE_802_11

RADIUS_PORT_LIMIT (int)
Port Limit
RADIUS_LOGIN_LAT_PORT (int)
Login LAT Port
RADIUS_CONNECT_INFO (string)
Connect info
RADIUS_ACCT_STATUS_TYPE (int)

Accounting status type, one of:

  • RADIUS_START
  • RADIUS_STOP
  • RADIUS_ACCOUNTING_ON
  • RADIUS_ACCOUNTING_OFF

RADIUS_ACCT_DELAY_TIME (int)
Accounting delay time
RADIUS_ACCT_INPUT_OCTETS (int)
Accounting input bytes
RADIUS_ACCT_OUTPUT_OCTETS (int)
Accounting output bytes
RADIUS_ACCT_SESSION_ID (int)
Accounting session ID
RADIUS_ACCT_AUTHENTIC (int)

Accounting authentic, one of:

  • RADIUS_AUTH_RADIUS
  • RADIUS_AUTH_LOCAL
  • RADIUS_AUTH_REMOTE

RADIUS_ACCT_SESSION_TIME (int)
Accounting session time
RADIUS_ACCT_INPUT_PACKETS (int)
Accounting input packets
RADIUS_ACCT_OUTPUT_PACKETS (int)
Accounting output packets
RADIUS_ACCT_TERMINATE_CAUSE (int)

Accounting terminate cause, one of:

  • RADIUS_TERM_USER_REQUEST
  • RADIUS_TERM_LOST_CARRIER
  • RADIUS_TERM_LOST_SERVICE
  • RADIUS_TERM_IDLE_TIMEOUT
  • RADIUS_TERM_SESSION_TIMEOUT
  • RADIUS_TERM_ADMIN_RESET
  • RADIUS_TERM_ADMIN_REBOOT
  • RADIUS_TERM_PORT_ERROR
  • RADIUS_TERM_NAS_ERROR
  • RADIUS_TERM_NAS_REQUEST
  • RADIUS_TERM_NAS_REBOOT
  • RADIUS_TERM_PORT_UNNEEDED
  • RADIUS_TERM_PORT_PREEMPTED
  • RADIUS_TERM_PORT_SUSPENDED
  • RADIUS_TERM_SERVICE_UNAVAILABLE
  • RADIUS_TERM_CALLBACK
  • RADIUS_TERM_USER_ERROR
  • RADIUS_TERM_HOST_REQUEST

RADIUS_ACCT_MULTI_SESSION_ID (string)
Accounting multi session ID
RADIUS_ACCT_LINK_COUNT (int)
Accounting link count
RADIUS_VENDOR_MICROSOFT (int)

Microsoft specific vendor attributes (» RFC 2548), one of:

  • RADIUS_MICROSOFT_MS_CHAP_RESPONSE
  • RADIUS_MICROSOFT_MS_CHAP_ERROR
  • RADIUS_MICROSOFT_MS_CHAP_PW_1
  • RADIUS_MICROSOFT_MS_CHAP_PW_2
  • RADIUS_MICROSOFT_MS_CHAP_LM_ENC_PW
  • RADIUS_MICROSOFT_MS_CHAP_NT_ENC_PW
  • RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY
  • RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES
  • RADIUS_MICROSOFT_MS_RAS_VENDOR
  • RADIUS_MICROSOFT_MS_CHAP_DOMAIN
  • RADIUS_MICROSOFT_MS_CHAP_CHALLENGE
  • RADIUS_MICROSOFT_MS_CHAP_MPPE_KEYS
  • RADIUS_MICROSOFT_MS_BAP_USAGE
  • RADIUS_MICROSOFT_MS_LINK_UTILIZATION_THRESHOLD
  • RADIUS_MICROSOFT_MS_LINK_DROP_TIME_LIMIT
  • RADIUS_MICROSOFT_MS_MPPE_SEND_KEY
  • RADIUS_MICROSOFT_MS_MPPE_RECV_KEY
  • RADIUS_MICROSOFT_MS_RAS_VERSION
  • RADIUS_MICROSOFT_MS_OLD_ARAP_PASSWORD
  • RADIUS_MICROSOFT_MS_NEW_ARAP_PASSWORD
  • RADIUS_MICROSOFT_MS_ARAP_PASSWORD_CHANGE_REASON
  • RADIUS_MICROSOFT_MS_FILTER
  • RADIUS_MICROSOFT_MS_ACCT_AUTH_TYPE
  • RADIUS_MICROSOFT_MS_ACCT_EAP_TYPE
  • RADIUS_MICROSOFT_MS_CHAP2_RESPONSE
  • RADIUS_MICROSOFT_MS_CHAP2_SUCCESS
  • RADIUS_MICROSOFT_MS_CHAP2_PW
  • RADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVER
  • RADIUS_MICROSOFT_MS_SECONDARY_DNS_SERVER
  • RADIUS_MICROSOFT_MS_PRIMARY_NBNS_SERVER
  • RADIUS_MICROSOFT_MS_SECONDARY_NBNS_SERVER
  • RADIUS_MICROSOFT_MS_ARAP_CHALLENGE



Beispiele

Howto start?

  • get a radius resource
  • configure the library
  • create the request
  • put attributes
  • send the request
  • receive attributes
  • close the radius resource (optional)

Take also a look at the examples in this package.

The package contains an example php script. This script demonstrates howto authenticate with radius using PAP or CHAP (md5). If you authenticate with Microsoft Radius servers then its not possible to use CHAP (md5). If you would like to authenticate with Microsoft Servers you have to use MS-CHAPv1 or MS-CHAPv2, but its more complicated, because you need md4, sha1 and des to generate the right data. The enclosed examples demonstrate all authentication-methods, including MS-CHAPv1 and MS-CHAPv2. To get the MS-CHAP to work you need the mcrypt and the mhash extension, starting with version 1.2 of the package, the mcrypt extension is no longer needed.



Radius Funktionen

Contact Information

If you have comments, bugfixes, enhancements or want to help to develop this you can send me a mail at » mbretter@php.net.


radius_acct_open

(PECL radius >= 1.1.0)

radius_acct_openCreates a Radius handle for accounting

Beschreibung

resource radius_acct_open ( void )

Rückgabewerte

Returns a handle on success, FALSE on error. This function only fails if insufficient memory is available.

Beispiele

Beispiel #1 radius_acct_open() example

<?php
$res 
radius_acct_open ()
    or die (
"Could not create handle");
print(
"Handle successfully created");
?>



radius_add_server

(PECL radius >= 1.1.0)

radius_add_serverAdds a server

Beschreibung

bool radius_add_server ( resource $radius_handle , string $hostname , int $port , string $secret , int $timeout , int $max_tries )

radius_add_server() may be called multiple times, and it may be used together with radius_config(). At most 10 servers may be specified. When multiple servers are given, they are tried in round-robin fashion until a valid response is received, or until each server's max_tries limit has been reached.

Parameter-Liste

radius_handle

hostname

The hostname parameter specifies the server host, either as a fully qualified domain name or as a dotted-quad IP address in text form.

port

The port specifies the UDP port to contact on the server. If port is given as 0, the library looks up the radius/udp or radacct/udp service in the network services database, and uses the port found there. If no entry is found, the library uses the standard Radius ports, 1812 for authentication and 1813 for accounting.

secret

The shared secret for the server host is passed to the secret parameter. The Radius protocol ignores all but the leading 128 bytes of the shared secret.

timeout

The timeout for receiving replies from the server is passed to the timeout parameter, in units of seconds.

max_tries

The maximum number of repeated requests to make before giving up is passed into the max_tries .

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 radius_add_server() example

<?php
if (!radius_add_server($res'radius.example.com'1812'testing123'33)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br>";
    exit;
}
?>

Siehe auch

  • radius_config() - Causes the library to read the given configuration file



radius_auth_open

(PECL radius >= 1.1.0)

radius_auth_openCreates a Radius handle for authentication

Beschreibung

resource radius_auth_open ( void )

Rückgabewerte

Returns a handle on success, FALSE on error. This function only fails if insufficient memory is available.

Beispiele

Beispiel #1 radius_auth_open() example

<?php
$radh 
radius_auth_open()
    or die (
"Could not create handle");
echo 
"Handle successfully created";
?>



radius_close

(PECL radius >= 1.1.0)

radius_closeFrees all ressources

Beschreibung

bool radius_close ( resource $radius_handle )

It is not needed to call this function because php frees all resources at the end of each request.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.



radius_config

(PECL radius >= 1.1.0)

radius_configCauses the library to read the given configuration file

Beschreibung

bool radius_config ( resource $radius_handle , string $file )

Before issuing any Radius requests, the library must be made aware of the servers it can contact. The easiest way to configure the library is to call radius_config(). radius_config() causes the library to read a configuration file whose format is described in » radius.conf.

Parameter-Liste

radius_handle

file

The pathname of the configuration file is passed as the file argument to radius_config(). The library can also be configured programmatically by calls to radius_add_server().

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



radius_create_request

(PECL radius >= 1.1.0)

radius_create_requestCreate accounting or authentication request

Beschreibung

bool radius_create_request ( resource $radius_handle , int $type )

A Radius request consists of a code specifying the kind of request, and zero or more attributes which provide additional information. To begin constructing a new request, call radius_create_request().

Hinweis: Attention: You must call this function, before you can put any attribute!

Parameter-Liste

radius_handle

type

Type is RADIUS_ACCESS_REQUEST or RADIUS_ACCOUNTING_REQUEST.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 radius_create_request() example

<?php
if (!radius_create_request($resRADIUS_ACCESS_REQUEST)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Siehe auch



radius_cvt_addr

(PECL radius >= 1.1.0)

radius_cvt_addrConverts raw data to IP-Address

Beschreibung

string radius_cvt_addr ( string $data )

Beispiele

Beispiel #1 radius_cvt_addr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FRAMED_IP_ADDRESS:
        
$ip radius_cvt_addr($data);
        echo 
"IP: $ip<br>\n";
        break;

    case 
RADIUS_FRAMED_IP_NETMASK:
        
$mask radius_cvt_addr($data);
        echo 
"MASK: $mask<br>\n";
        break;
    }
}
?>

Siehe auch



radius_cvt_int

(PECL radius >= 1.1.0)

radius_cvt_intConverts raw data to integer

Beschreibung

int radius_cvt_int ( string $data )

Beispiele

Beispiel #1 radius_cvt_int() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FRAMED_MTU:
        
$mtu radius_cvt_int($data);
        echo 
"MTU: $mtu<br>\n";
        break;
    }
}
?>

Siehe auch



radius_cvt_string

(PECL radius >= 1.1.0)

radius_cvt_stringConverts raw data to string

Beschreibung

string radius_cvt_string ( string $data )

Beispiele

Beispiel #1 radius_cvt_string() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FILTER_ID:
        
$id radius_cvt_string($data);
        echo 
"Filter ID: $id<br>\n";
        break;
    }
}
?>

Siehe auch



radius_demangle_mppe_key

(PECL radius >= 1.2.0)

radius_demangle_mppe_keyDerives mppe-keys from mangled data

Beschreibung

string radius_demangle_mppe_key ( resource $radius_handle , string $mangled )

When using MPPE with MS-CHAPv2, the send- and recv-keys are mangled (see » RFC 2548), however this function is useless, because I don't think that there is or will be a PPTP-MPPE implementation in PHP.

Rückgabewerte

Returns the demangled string, or FALSE on error.



radius_demangle

(PECL radius >= 1.2.0)

radius_demangleDemangles data

Beschreibung

string radius_demangle ( resource $radius_handle , string $mangled )

Some data (Passwords, MS-CHAPv1 MPPE-Keys) is mangled for security reasons, and must be demangled before you can use them.

Rückgabewerte

Returns the demangled string, or FALSE on error.



radius_get_attr

(PECL radius >= 1.1.0)

radius_get_attrExtracts an attribute

Beschreibung

mixed radius_get_attr ( resource $radius_handle )

Like Radius requests, each response may contain zero or more attributes. After a response has been received successfully by radius_send_request(), its attributes can be extracted one by one using radius_get_attr(). Each time radius_get_attr() is called, it gets the next attribute from the current response.

Rückgabewerte

Returns an associative array containing the attribute-type and the data, or error number <= 0.

Beispiele

Beispiel #1 radius_get_attr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
printf("Got Attr:%d %d Bytes %s\n"$attrstrlen($data), bin2hex($data));
}
?>

Siehe auch



radius_get_vendor_attr

(PECL radius >= 1.1.0)

radius_get_vendor_attrExtracts a vendor specific attribute

Beschreibung

array radius_get_vendor_attr ( string $data )

If radius_get_attr() returns RADIUS_VENDOR_SPECIFIC, radius_get_vendor_attr() may be called to determine the vendor.

Rückgabewerte

Returns an associative array containing the attribute-type, vendor and the data, or FALSE on error.

Beispiele

Beispiel #1 radius_get_vendor_attr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
printf("Got Attr:%d %d Bytes %s\n"$attrstrlen($data), bin2hex($data));
    if (
$attr == RADIUS_VENDOR_SPECIFIC) {

        
$resv radius_get_vendor_attr($data);
        if (
is_array($resv)) {
            
$vendor $resv['vendor'];
            
$attrv $resv['attr'];
            
$datav $resv['data'];    
            
printf("Got Vendor Attr:%d %d Bytes %s\n"$attrvstrlen($datav), bin2hex($datav));
        }
        
    }
}
?>

Siehe auch



radius_put_addr

(PECL radius >= 1.1.0)

radius_put_addrAttaches an IP-Address attribute

Beschreibung

bool radius_put_addr ( resource $radius_handle , int $type , string $addr )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.



radius_put_attr

(PECL radius >= 1.1.0)

radius_put_attrAttaches a binary attribute

Beschreibung

bool radius_put_attr ( resource $radius_handle , int $type , string $value )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 radius_put_attr() example

<?php
mt_srand
(time());
$chall mt_rand();
$chapval md5(pack('Ca*','sepp' $chall));
$pass pack('CH*'1$chapval);
if (!
radius_put_attr($resRADIUS_CHAP_PASSWORD$pass)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Siehe auch



radius_put_int

(PECL radius >= 1.1.0)

radius_put_intAttaches an integer attribute

Beschreibung

bool radius_put_int ( resource $radius_handle , int $type , int $value )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 radius_put_int() example

<?php
if (!radius_put_int($resRAD_FRAMED_PROTOCOLRAD_PPP)) {
   echo 
'RadiusError:' radius_strerror($res). "\n<br />";
   exit;
}
?>

Siehe auch



radius_put_string

(PECL radius >= 1.1.0)

radius_put_stringAttaches a string attribute

Beschreibung

bool radius_put_string ( resource $radius_handle , int $type , string $value )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 radius_put_string() example

<?php
if (!radius_put_string($resRADIUS_USER_NAME'billy')) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Siehe auch



radius_put_vendor_addr

(PECL radius >= 1.1.0)

radius_put_vendor_addrAttaches a vendor specific IP-Address attribute

Beschreibung

bool radius_put_vendor_addr ( resource $radius_handle , int $vendor , int $type , string $addr )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.



radius_put_vendor_attr

(PECL radius >= 1.1.0)

radius_put_vendor_attrAttaches a vendor specific binary attribute

Beschreibung

bool radius_put_vendor_attr ( resource $radius_handle , int $vendor , int $type , string $value )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Beispiele

Beispiel #1 radius_put_vendor_attr() example

<?php
if (!radius_put_vendor_attr($resRADIUS_VENDOR_MICROSOFTRAD_MICROSOFT_MS_CHAP_CHALLENGE$challenge)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Siehe auch



radius_put_vendor_int

(PECL radius >= 1.1.0)

radius_put_vendor_intAttaches a vendor specific integer attribute

Beschreibung

bool radius_put_vendor_int ( resource $radius_handle , int $vendor , int $type , int $value )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



radius_put_vendor_string

(PECL radius >= 1.1.0)

radius_put_vendor_stringAttaches a vendor specific string attribute

Beschreibung

bool radius_put_vendor_string ( resource $radius_handle , int $vendor , int $type , string $value )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



radius_request_authenticator

(PECL radius >= 1.1.0)

radius_request_authenticatorReturns the request authenticator

Beschreibung

string radius_request_authenticator ( resource $radius_handle )

The request authenticator is needed for demangling mangled data like passwords and encryption-keys.

Rückgabewerte

Returns the request authenticator as string, or FALSE on error.

Siehe auch



radius_send_request

(PECL radius >= 1.1.0)

radius_send_requestSends the request and waites for a reply

Beschreibung

int radius_send_request ( resource $radius_handle )

After the Radius request has been constructed, it is sent by radius_send_request().

The radius_send_request() function sends the request and waits for a valid reply, retrying the defined servers in round-robin fashion as necessary.

Rückgabewerte

If a valid response is received, radius_send_request() returns the Radius code which specifies the type of the response. This will typically be RADIUS_ACCESS_ACCEPT, RADIUS_ACCESS_REJECT, or RADIUS_ACCESS_CHALLENGE. If no valid response is received, radius_send_request() returns FALSE.

Siehe auch



radius_server_secret

(PECL radius >= 1.1.0)

radius_server_secretReturns the shared secret

Beschreibung

string radius_server_secret ( resource $radius_handle )

The shared secret is needed as salt for demangling mangled data like passwords and encryption-keys.

Rückgabewerte

Returns the server's shared secret as string, or FALSE on error.



radius_strerror

(PECL radius >= 1.1.0)

radius_strerrorReturns an error message

Beschreibung

string radius_strerror ( resource $radius_handle )

If Radius-functions fail then they record an error message. This error message can be retrieved with this function.

Rückgabewerte

Returns error messages as string from failed radius functions.


Inhaltsverzeichnis





Kalender- und ereignisrelevante Erweiterungen


Kalender


Einführung

Die Kalender-Extension enthält eine Reihe von Funktionen, mit denen die Umwandlung zwischen verschiedenen Kalenderformaten vereinfacht wird. Die Umwandlung basiert dabei auf einer zwischengeschalteten Umrechnung in das Julianische Datum (J.D.). Das Julianische Datum zählt die seit dem ersten Januar 4713 vor Christus vergangenen Tage. Um ein Datum von einem Kalender in einen anderen umzurechnen, müssen Sie es zunächst in das entsprechende Julianische Datum konvertieren und von da aus weiter in den gewünschten Kalender. Beachten Sie das das Julianische Datum und der Julianische Kalender zwei komplett unterschiedliche Dinge sind. Nähere Informationen zum Julianischen Datum finden Sie unter » http://www.hermetic.ch/cal_stud/jdn.htm. Weitere Informationen zu verschiedenen Kalendersystemen finden Sie unter » http://www.fourmilab.ch/documents/calendar/. Auszüge aus dieser Seite sind in die folgende Dokumentation eingearbeitet und als Zitat markiert.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Um diese Funktionen nutzen zu können müssen sie PHP mit --enable-calendar kompilieren.

Die Windowsversion von PHP enthält diese Erweiterung. Um diese Funktionen zu verwenden, müssen Sie keine zusätzlichen Erweiterungen aktivieren.



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

CAL_GREGORIAN (integer)
CAL_JULIAN (integer)
CAL_JEWISH (integer)
CAL_FRENCH (integer)
CAL_NUM_CALS (integer)
CAL_DOW_DAYNO (integer)
CAL_DOW_SHORT (integer)
CAL_DOW_LONG (integer)
CAL_MONTH_GREGORIAN_SHORT (integer)
CAL_MONTH_GREGORIAN_LONG (integer)
CAL_MONTH_JULIAN_SHORT (integer)
CAL_MONTH_JULIAN_LONG (integer)
CAL_MONTH_JEWISH (integer)
CAL_MONTH_FRENCH (integer)

Die folgenden Konstanten gibt es seit PHP 4.3.0:

CAL_EASTER_DEFAULT (integer)
CAL_EASTER_ROMAN (integer)
CAL_EASTER_ALWAYS_GREGORIAN (integer)
CAL_EASTER_ALWAYS_JULIAN (integer)

Die folgenden Konstanten gibt es seit PHP 5.0.0:

CAL_JEWISH_ADD_ALAFIM_GERESH (integer)
CAL_JEWISH_ADD_ALAFIM (integer)
CAL_JEWISH_ADD_GERESHAYIM (integer)


Calendar Funktionen


cal_days_in_month

(PHP 4 >= 4.1.0, PHP 5)

cal_days_in_monthGibt die Anzahl der Tage eines bestimmten Monats in einem bestimmten Jahr in einem bestimmten Kalender zurück

Beschreibung

int cal_days_in_month ( int $calendar , int $month , int $year )

Diese Funktion gibt die Anzahl der Tage in einem Monat eines Jahres für den angegebenen Kalender zurück.

Parameter-Liste

calendar

Der zu benutzende Kalender

month

Der Monat im gewünschten Kalender

year

Das Jahr im gewünschten Kalender

Rückgabewerte

Die Länge des Monats im gewünschten Kalender in Tagen

Beispiele

Beispiel #1 cal_days_in_month() Beispiel

<?php
$num 
cal_days_in_month(CAL_GREGORIAN82003); // 31
echo "August 2003 hatte $num Tage";
?>



cal_from_jd

(PHP 4 >= 4.1.0, PHP 5)

cal_from_jdConverts from Julian Day Count to a supported calendar

Beschreibung

array cal_from_jd ( int $jd , int $calendar )

cal_from_jd() converts the Julian day given in jd into a date of the specified calendar . Supported calendar values are CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH and CAL_FRENCH.

Parameter-Liste

jd

Julian day as integer

calendar

Calendar to convert to

Rückgabewerte

Returns an array containing calendar information like month, day, year, day of week, abbreviated and full names of weekday and month and the date in string form "month/day/year".

Beispiele

Beispiel #1 cal_from_jd() example

<?php
$today 
unixtojd(mktime(0008162003));
print_r(cal_from_jd($todayCAL_GREGORIAN));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [date] => 8/16/2003
    [month] => 8
    [day] => 16
    [year] => 2003
    [dow] => 6
    [abbrevdayname] => Sat
    [dayname] => Saturday
    [abbrevmonth] => Aug
    [monthname] => August
)

Siehe auch

  • cal_to_jd() - Converts from a supported calendar to Julian Day Count
  • jdtofrench() - Konvertiert ein Julianisches Datum zum Kalender der Französischen Revolution
  • jdtogregorian() - Konvertierung vom Julianischen Datum zum Gregorianischen Kalender
  • jdtojewish() - Konvertierung vom Julianischen Datum zum Jüdischen Kalender
  • jdtojulian() - Konvertierung vom Julianischen Datum zum Julianischen Kalender
  • jdtounix() - Konvertiert Julianisches Datum in Unix-Timestamp



cal_info

(PHP 4 >= 4.1.0, PHP 5)

cal_infoGibt Informationen zu einem bestimmten Kalender zurück

Beschreibung

array cal_info ([ int $calendar = -1 ] )

cal_info() liefert Informationen zum angegebenen Kalender calendar .

Kalenderinformationen werden als ein Array mit den Elementen calname, calsymbol, month, abbrevmonth und maxdaysinmonth zurückgegeben. Als Parameter calendar können folgende Konstanten benutzt werden:

  • 0 oder CAL_GREGORIAN - Gregorianischer Kalender
  • 1 oder CAL_JULIAN - Julianischer Kalender
  • 2 oder CAL_JEWISH - Jüdischer Kalender
  • 3 oder CAL_FRENCH - Kalender der französischen Revolution

Wird kein calendar spezifiziert so werden Informationen über alle unterstützten Kalender als Array zurückgegeben. Diese Funktionalität existiert seit PHP 5.

Parameter-Liste

calendar

Der Kalender für den Informationen zurückgegeben werden sollen. Wird kein Kalender angegeben so werden Informationen für alle Kalender zurckgegeben.

Rückgabewerte

Changelog

Version Beschreibung
Since 5.0 Der Parameter calendar ist nun optionl und es werden Informationen zu allen Kalendern zurückgegeben wenn kein Wert übergeben wird.

Beispiele

Beispiel #1 cal_info() Beispiel

<?php
$info 
cal_info(0);
print_r($info);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [months] => Array
        (
            [1] => January
            [2] => February
            [3] => March
            [4] => April
            [5] => May
            [6] => June
            [7] => July
            [8] => August
            [9] => September
            [10] => October
            [11] => November
            [12] => December
        )

    [abbrevmonths] => Array
        (
            [1] => Jan
            [2] => Feb
            [3] => Mar
            [4] => Apr
            [5] => May
            [6] => Jun
            [7] => Jul
            [8] => Aug
            [9] => Sep
            [10] => Oct
            [11] => Nov
            [12] => Dec
        )

    [maxdaysinmonth] => 31
    [calname] => Gregorian
    [calsymbol] => CAL_GREGORIAN
)



cal_to_jd

(PHP 4 >= 4.1.0, PHP 5)

cal_to_jdConverts from a supported calendar to Julian Day Count

Beschreibung

int cal_to_jd ( int $calendar , int $month , int $day , int $year )

cal_to_jd() calculates the Julian day count for a date in the specified calendar . Supported calendar s are CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH and CAL_FRENCH.

Parameter-Liste

calendar

Calendar to convert from, one of CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH or CAL_FRENCH.

month

The month as a number, the valid range depends on the calendar

day

The day as a number, the valid range depends on the calendar

year

The year as a number, the valid range depends on the calendar

Rückgabewerte

A Julian Day number.

Siehe auch

  • cal_from_jd() - Converts from Julian Day Count to a supported calendar
  • frenchtojd() - Konvertiert ein Datum der Französischen Revolution zu einem Julianischen Datum
  • gregoriantojd() - Konvertierung vom Gregorianischen Kalender zum Julianischen Datum
  • jewishtojd() - Konvertiert vom Jüdischen Kalender zum Julianischen Datum
  • juliantojd() - Konvertierung vom Julianischen Kalender zum Julianischen Datum
  • unixtojd() - Konvertiert Unix-Timestamp in Julianisches Datum



easter_date

(PHP 4, PHP 5)

easter_date Zeitpunkt des Osterfestes (0 Uhr) als Unix-Timestamp

Beschreibung

int easter_date ([ int $year ] )

Diese Funktion liefert den Unix-Timestamp (in Sekunden seit 1970) zurück, der dem Begin des Ostersonntag im durch year spezifizierten Jahr entspricht.

Warnung

Liegt das angegebene Jahr vor 1970 oder nach 2037 (auf 32 bit-Systemen), so wird eine Warnung ausgegeben und das Ergebnis ist nicht gültig.

Das Datum des Osterfestes wurde im Jahre 325 auf dem Konzil von Nicaea auf den ersten Sonntag nach Frühlingsvollmond, also dem Vollmond während oder direkt nach der Tagundnachtgleiche am 21. März, festgelegt. Der hier genutzte Algorithmus wurde um das Jahr 532 von Dionysius Exiguus eingeführt. Bis zum Jahr 1752 wird nach dem Julianischen Kalender ein einfacher 19jähriger Zyklus für die Bestimmung der Mondphasen benutzt. Im September 1752 übernahmen dann auch Britannien und seine Kolonien den von Clavius und Lilius vorgeschlagenen und im Oktober 1582 von Papst Gregor dem XIII. eingeführten Gregorianischen Kalender. Hierdurch wurden zwei Korrekturfaktoren eingeführt, um den Zyklus genauer abzubilden.

(Der Code basiert auf einen C-Programm von Simon Kershaw, <webmaster at ely.anglican.org>)

Parameter-Liste

year

Das Jahr als Zahl zwischen 1970 und 2037

Rückgabewerte

Das Osterdatum als Unix Timestamp.

Changelog

Version Beschreibung
Seit 4.3.0 Der Parameter year ist nun optional und wird mit dem aktuellen Jahr entsprechend der lokalen Zeit vorbelegt wenn nicht angegeben.

Beispiele

Beispiel #1 easter_date() Beispiel

<?php

echo date("M-d-Y"easter_date(1999));        // Apr-04-1999
echo date("M-d-Y"easter_date(2000));        // Apr-23-2000
echo date("M-d-Y"easter_date(2001));        // Apr-15-2001

?>

Siehe auch

  • easter_days() - Anzahl der Tage zwischen dem 21. März und Ostersonntag zur Berechnung des Osterdatums vor 1970 oder nach 2037



easter_days

(PHP 4, PHP 5)

easter_days Anzahl der Tage zwischen dem 21. März und Ostersonntag

Beschreibung

int easter_days ([ int $year [, int $method = CAL_EASTER_DEFAULT ]] )

Berechnet die Anzahl der Tage zwischen dem 21. März und Ostersonntag für das Jahr year .

Die Funktion kann an Stelle von easter_date() genutzt werden um auch für Jahre außerhalb des Wertebereichs von Unix Timestamps (also vor 1970 bzw. nach 2037) das Osterdatum zu bestimmen.

Das Osterdatum wurde von dem Konzil von Nicea im Jahr 325 auf den ersten Sonntag nach dem ersten Frühlingsvollmond nach der Tag- und Nachtgleiche festgelegt. Es wird dabei angenommen das die Tag- und Nachtgleiche immer auf den 21. März fällt so daß sich die Berechnung auf die Bestimmung des nächsten Vollmonds und des darauf folgenden Sonntags reduziert. Die dazu benutzten Algorithmen wurden um das Jahr 532 von Dionysius Exiguus eingeführt. Innerhalb des Julianischen Kalenders (für Jahre vor 1753) wird der Bestimmung der Mondphasen ein einfacher Zyklus von 19 Jahren zugrunde gelegt. Im Gregorianischen Kalender (für Jahre nach 1753 - erdacht von Clavius und Lilius, zuerst eingeführt von Papst Gregor XIII im Oktober 1582 und im September 1752 auch von Britanien und seinen Kolonien übernommen) wurden zwei zusätzliche Korekturfaktoren eingeführt um die Genauigkeit der Berechnungen zu erhöhen.

(Die Implementation beruht auf einem C Programm von Simon Kershaw, <webmaster at ely.anglican dot org>)

Parameter-Liste

year

Das Jahr als eine Zahl größer 0

method

Ermöglicht die Berechnung auf Basis des Gregorianischen Kalenders für den Zeitraum von 1582 bis 1752 wenn CAL_EASTER_ROMAN übergeben wird. Eine vollständige Liste der Kalenderkonstanten finden Sie unter calendar constants.

Rückgabewerte

Die Anzahl der Tage die der Ostersonntag im gegebenen Jahr hinter dem 21ten März liegt.

Changelog

Version Beschreibung
Seit 4.3.0 Der Parameter year ist nun Optional und wird mit dem aktuellen Jahr gemäß der lokalen Zeit vorbelegt falls nicht vorhanden.
Seit 4.3.0 Der Parameter method wurde hinzugefügt.

Beispiele

Beispiel #1 easter_days() Beispiel

<?php

echo easter_days(1999);        // 14, also April 4
echo easter_days(1492);        // 32, also April 22
echo easter_days(1913);        //  2, also March 23

?>

Siehe auch

  • easter_date() - Zeitpunkt des Osterfestes (0 Uhr) als Unix-Timestamp



frenchtojd

(PHP 4, PHP 5)

frenchtojd Konvertiert ein Datum der Französischen Revolution zu einem Julianischen Datum

Beschreibung

int frenchtojd ( int $month , int $day , int $year )

Diese Funktion konvertiert ein Datum vom Kalender der Französischen Revolution in einen Julianischen Tag.

Diese Funktion verarbeitet nur Daten der Jahre 1 bis 14 (22. September 1792 bis 22. September 1806 im Gregorianischen Kalender), dieser Zeitraum geht aber immer noch über die Lebensdauer des Revolutionskalenders hinaus.

Parameter-Liste

month

Der Monat als Zahl von 1 (für Vendémiaire) bis 13 (für den Zeitraum von 5-6 Tagen am Ende jeden Jahres)

day

Der Tag als Zahl von 1 bis 30

year

Das Jahr als Zahl von 1 bis 14

Rückgabewerte

Der Julianische Tag für das übergebene Französische Revolutionsdatum als Integer.

Siehe auch

  • jdtofrench() - Konvertiert ein Julianisches Datum zum Kalender der Französischen Revolution
  • cal_to_jd() - Converts from a supported calendar to Julian Day Count



gregoriantojd

(PHP 4, PHP 5)

gregoriantojd Konvertierung vom Gregorianischen Kalender zum Julianischen Datum

Beschreibung

int gregoriantojd ( int $month , int $day , int $year )

Diese Funktion konvertiert das in month , day und year übergebene Datum im Gregorianischen Kalender in einen Tag im Julianischen Datum.

Gültige Daten liegen im Bereich von 4714 v. Chr. bis 9999 n. Chr. Der Gregorianische Kalender wurde allerdings erst am 15. Oktober 1582 (bzw. am 5. Oktober nach dem bis dahin gültigen Julianischen Kalender) von Papst Gregor XIII. eingeführt, in einigen Ländern erst sehr viel später. So übernahmen die Briten den Gregorianischen Kalender 1752, die UDSSR 1918 und Griechenland erst im Jahre 1923. In den meisten europäischen Ländern wurde vor dem Gregorianischen der Julianische Kalender benutzt.

Parameter-Liste

month

Der Monat als Zahl zwischen 1 (für Januar) und 12 (für Dezember)

day

Der Tag als Zahl zwischen 1 und 31

year

Das Jahr als Zahl zwischen -4714 und 9999

Rückgabewerte

Der Julianische Tag für das gegebene Gregorianische Datum als Integer.

Beispiele

Beispiel #1 Caledar Funktionen

<?php
$jd 
GregorianToJD(10111970);
echo 
"$jd\n";
$gregorian JDToGregorian($jd);
echo 
"$gregorian\n";
?>

Siehe auch

  • jdtogregorian() - Konvertierung vom Julianischen Datum zum Gregorianischen Kalender
  • cal_to_jd() - Converts from a supported calendar to Julian Day Count



jddayofweek

(PHP 4, PHP 5)

jddayofweek Bestimmt den Wochentag aus einem Julianischen Datum

Beschreibung

mixed jddayofweek ( int $julianday [, int $mode = CAL_DOW_DAYNO ] )

Diese Funktion bestimmt den Wochentag für den in julianday übergebenen Tag im Julianischen Datum. Die Ausgabe erfolgt in Abhängigkeit von mode als integer oder string.

Parameter-Liste

julianday

Ein Julianischer Tag als Integer

mode
Calendar Wochenmodi
Modus Bedeutung
0 (Default) Rückgabe des Wochentages als Zahl (0=Sonntag, 1=Montag, etc.)
1 Rückgabe des Wochentages als String (in Englisch) (English-Gregorian)
2 Rückgabe des Wochentages als abgekürzter String (in Englisch)

Rückgabewerte

Der Gregorianische Wochentag als Integer oder String.



jdmonthname

(PHP 4, PHP 5)

jdmonthname Bestimmt den Monat aus dem Julianischen Datum

Beschreibung

string jdmonthname ( int $julianday , int $mode )

Diese Funktion bestimmt den Monatsnamen für den in julianday übergebenen Tag im Julianischen Datum. Die Ausgabe erfolgt als String in Abhängigkeit von mode .

Mögliche mode -Werte
Modus Bedeutung
0 Gregorianisch (Abk.) Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
1 Gregorianisch January, February, March, April, May, June, July, August, September, October, November, December
2 Julianisch - (Abk.) Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
3 Julianisch January, February, March, April, May, June, July, August, September, October, November, December
4 Jüdisch Tishri, Heshvan, Kislev, Tevet, Shevat, AdarI, AdarII, Nisan, Iyyar, Sivan, Tammuz, Av, Elul
5 Französisch revolutionär Vendemiaire, Brumaire, Frimaire, Nivose, Pluviose, Ventose, Germinal, Floreal, Prairial, Messidor, Thermidor, Fructidor, Extra

Parameter-Liste

jday

Ein Julianischer Tag als Integer

calendar

Der zu verwendende Kalender

Rückgabewerte

Der Monatsname für den gegebenen Julianischen Tag im gewünschten calendar



jdtofrench

(PHP 4, PHP 5)

jdtofrench Konvertiert ein Julianisches Datum zum Kalender der Französischen Revolution

Beschreibung

string jdtofrench ( int $juliandaycount )

Konvertiert ein Julianisches Datum zum Kalender der Französischen Revolution

Parameter-Liste

julianday

Ein Julianischer Tag als Integer

Rückgabewerte

Ein Französisches Revolutionsdatum als String in der Form "Monat/Tag/Yahr"

Siehe auch

  • frenchtojd() - Konvertiert ein Datum der Französischen Revolution zu einem Julianischen Datum
  • cal_from_jd() - Converts from Julian Day Count to a supported calendar



jdtogregorian

(PHP 4, PHP 5)

jdtogregorian Konvertierung vom Julianischen Datum zum Gregorianischen Kalender

Beschreibung

string jdtogregorian ( int $julianday )

Diese Funktion konvertiert den in julianday angegebenen Tag im Julianischen Datum in einen String, der das Datum nach dem Gregorianischen Kalender in der Form "MM/DD/YYYY" enthält.

Parameter-Liste

julianday

Ein Julianischer Tag als Integer

Rückgabewerte

Ein Gregorianisches Datum als String der Form "Monat/Tag/Jahr"

Siehe auch

  • gregoriantojd() - Konvertierung vom Gregorianischen Kalender zum Julianischen Datum
  • cal_from_jd() - Converts from Julian Day Count to a supported calendar



jdtojewish

(PHP 4, PHP 5)

jdtojewish Konvertierung vom Julianischen Datum zum Jüdischen Kalender

Beschreibung

string jdtojewish ( int $juliandaycount [, bool $hebrew = false [, int $fl = 0 ]] )

Diese Funktion konvertiert den in julianday angegebenen Tag im Julianischen Datum in den Jüdischen Kalender.

Parameter-Liste

julianday

Ein Julianischer Tag als Integer

hebrew

Wird dieser Parameter auf TRUE gesetzt, so wird das Jüdische Datum als Hebräischer String gemäß dem im Parameter fl festgelegten Format zurückgegeben.

fl

Die verfügbaren Ausgabeformate sind: CAL_JEWISH_ADD_ALAFIM_GERESH, CAL_JEWISH_ADD_ALAFIM, CAL_JEWISH_ADD_GERESHAYIM.

Rückgabewerte

Das Jüdische Datum als String in der Form "Monat/Tag/Jahr"

Changelog

Version Beschreibung
5.0.0 Der Parameter fl wurde hinzugefügt.
5.0.0 Der Parameter hebrew wurde hinzugefügt.

Beispiele

Beispiel #1 jdtojewish()-Beispiel

<?php
echo jdtojewish(gregoriantojd(1082002), true,
       
CAL_JEWISH_ADD_GERESHAYIM CAL_JEWISH_ADD_ALAFIM CAL_JEWISH_ADD_ALAFIM_GERESH);
?>

Siehe auch

  • jewishtojd() - Konvertiert vom Jüdischen Kalender zum Julianischen Datum
  • cal_from_jd() - Converts from Julian Day Count to a supported calendar



jdtojulian

(PHP 4, PHP 5)

jdtojulian Konvertierung vom Julianischen Datum zum Julianischen Kalender

Beschreibung

string jdtojulian ( int $julianday )

Diese Funktion konvertiert den in julianday angegebenen Tag im Julianischen Datum in einen String, der das entsprechnde Datum im Julianischen Kalender in der Form "MM/DD/YYYY" enthält.

Parameter-Liste

julianday

Ein Julianischer Tag als Integer

Rückgabewerte

Ein Julianisches Datum als String in der Form Monat/Tag/Jahr

Siehe auch

  • juliantojd() - Konvertierung vom Julianischen Kalender zum Julianischen Datum
  • cal_from_jd() - Converts from Julian Day Count to a supported calendar



jdtounix

(PHP 4, PHP 5)

jdtounix Konvertiert Julianisches Datum in Unix-Timestamp

Beschreibung

int jdtounix ( int $jday )

Diese Funktion liefert einen Unix-Timestamp (in Sekunden seit dem 1.1.1970) zurück, der dem in jday übergebenen Julianischen Datum entspricht. Liegt jday außerhalb des darstellbaren Zeitbereichs (Gregorianische Jahre von 1970 bis 2037 bzw. 2440588 <= jday <= 2465342 ), so wird FALSE zurückgegeben.

Parameter-Liste

jday

Ein Julianischer Tag zwischen 2440588 and 2465342.

Rückgabewerte

Der Unix-Timestamp für den Anfang des gegebenen Julianischen Tages.

Siehe auch

  • unixtojd() - Konvertiert Unix-Timestamp in Julianisches Datum



jewishtojd

(PHP 4, PHP 5)

jewishtojd Konvertiert vom Jüdischen Kalender zum Julianischen Datum

Beschreibung

int jewishtojd ( int $month , int $day , int $year )

Obwohl diese Funktion mit Werten bis zurück zum Jahr 1 (3761 v.Chr.) arbeiten kann, wird eine solche Nutzen nicht empfohlen. Drer Jüdische Kalender wurde mehrere tausend Jahre lang benutzt, aber in den frühen Tagen existierte keine Formel, um den Monatsanfang zu bestimmen. Ein neuer Monat begann, wenn der Neumound beobachtet wurde.

Parameter-Liste

month

Der Monat als Zahl zwischen 1 und 13

day

Der Tag als Zahl zwischen 1 und 30

year

Das Jahr als Zahl zwischen 1 und 9999

Rückgabewerte

Der Julianische Tag für das gegebene Jüdische Datum als Integer.

Siehe auch

  • jdtojewish() - Konvertierung vom Julianischen Datum zum Jüdischen Kalender
  • cal_to_jd() - Converts from a supported calendar to Julian Day Count



juliantojd

(PHP 4, PHP 5)

juliantojd Konvertierung vom Julianischen Kalender zum Julianischen Datum

Beschreibung

int juliantojd ( int $month , int $day , int $year )

Diese Funktion konvertiert das in month , day und year übergebene Datum im Gregorianischen Kalender in einen Tag im Julianischen Datum.

Gültige Daten liegen im Bereich von 4714 v.Chr. bis 9999 n.Chr. Der Julianische Kalender wurde allerdings erst 46 v.Chr. eingeführt, und die Details der Anwendung stabilisierten sich frühestens im Jahre 8 n. Chr., z. T. vielleicht sogar erst im vierten Jahrhundert nach Christus. Weiterhin betrachteten nicht alle Kulturen, die sich nach diesem Kalender richteten, den Januar als den ersten Monat des Jahres.

Bitte beachten Sie das der weltweit genzutzte Kalender der Gregorianische und nicht der Julianische Kalender ist. Für diesen Kalender kann die Funktion gregoriantojd() genutzt werden.

Parameter-Liste

month

Der Monat als Zahl von 1 (für Januar) bis 12 (für Dezember)

day

Der Tag als Zahl von 1 bis 31

year

Das Jahr als Zahl zwischen -4713 und 9999

Rückgabewerte

Der Julianische Tag für das angegebene Julianische Datum als Integer.

Siehe auch

  • jdtojulian() - Konvertierung vom Julianischen Datum zum Julianischen Kalender
  • cal_to_jd() - Converts from a supported calendar to Julian Day Count



unixtojd

(PHP 4, PHP 5)

unixtojd Konvertiert Unix-Timestamp in Julianisches Datum

Beschreibung

int unixtojd ([ int $timestamp = time() ] )

Diese Funktion konvertiert den in timestamp übergebenen Wert (in Sekunden seit dem 1.1.1970) in das entsprechende Julianische Datum. Wird kein timestamp übergeben, so wird das Julianische Datum des aktuellen Tages zurückgegeben.

Parameter-Liste

timestamp

Ein zu konvertierender Unix Timestamp.

Rückgabewerte

Ein Julianischer Tag als Integer.

Siehe auch

  • jdtounix() - Konvertiert Julianisches Datum in Unix-Timestamp


Inhaltsverzeichnis

  • cal_days_in_month — Gibt die Anzahl der Tage eines bestimmten Monats in einem bestimmten Jahr in einem bestimmten Kalender zurück
  • cal_from_jd — Converts from Julian Day Count to a supported calendar
  • cal_info — Gibt Informationen zu einem bestimmten Kalender zurück
  • cal_to_jd — Converts from a supported calendar to Julian Day Count
  • easter_date — Zeitpunkt des Osterfestes (0 Uhr) als Unix-Timestamp
  • easter_days — Anzahl der Tage zwischen dem 21. März und Ostersonntag
  • frenchtojd — Konvertiert ein Datum der Französischen Revolution zu einem Julianischen Datum
  • gregoriantojd — Konvertierung vom Gregorianischen Kalender zum Julianischen Datum
  • jddayofweek — Bestimmt den Wochentag aus einem Julianischen Datum
  • jdmonthname — Bestimmt den Monat aus dem Julianischen Datum
  • jdtofrench — Konvertiert ein Julianisches Datum zum Kalender der Französischen Revolution
  • jdtogregorian — Konvertierung vom Julianischen Datum zum Gregorianischen Kalender
  • jdtojewish — Konvertierung vom Julianischen Datum zum Jüdischen Kalender
  • jdtojulian — Konvertierung vom Julianischen Datum zum Julianischen Kalender
  • jdtounix — Konvertiert Julianisches Datum in Unix-Timestamp
  • jewishtojd — Konvertiert vom Jüdischen Kalender zum Julianischen Datum
  • juliantojd — Konvertierung vom Julianischen Kalender zum Julianischen Datum
  • unixtojd — Konvertiert Unix-Timestamp in Julianisches Datum



Datum und Uhrzeit


Einführung

Diese Funktionen ermöglichen es Ihnen, Datums- und Zeitangaben vom Server, auf dem PHP läuft, abzufragen. Die Ausgabe von Datums- und Zeitangaben kann mit Hilfe dieser Funktionen in unterschiedlichster Weise formatiert werden.

Hinweis: Beachten Sie bitte, dass diese Funktionen von den lokalen Systemeinstellungen Ihres Servers abhängen. Ein besonderes Augenmerk sollten Sie auf Sommer- und Winterzeit (nutzen Sie z.B. $date = strtotime('+7 days', $date) und nicht $date += 7*24*60*60) und Schaltjahre haben.

Hinweis: Die in diesem Abschnitt referenzierten Zeitzonen können in Liste unterstützter Zeitzonen gefunden werden.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.



Installation

Für diese Funktionen ist keine Installation erforderlich, diese gehören zum Grundbestand von PHP.

Hinweis: Aktualisieren der Zeitzonen-Datenbank
Die jeweils aktuellste Version der Zeitzonen-Datenbank kann über das PECL-Paket » timezonedb installiert werden. Für Windows-Benutzer steht eine vorkompilierte DLL auf der PECL4Win-Website bereit: » php_timezonedb.dll.

Hinweis: Experimentelle DateTime-Unterstützung in PHP 5.1.x
Obwohl die Klasse DateTime (und damit zusammenhängende Funktionen) erst seit PHP 5.2.0 standardmäßig aktiviert sind, ist es möglich experimentellen Support hierfür bereits in PHP 5.1.x mit Hilfe des folgenden Flags vor configure/compile zu aktivieren: CFLAGS=-DEXPERIMENTAL_DATE_SUPPORT=1



Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Date/Time Configuration Options
Name Default Changeable Changelog
date.default_latitude "31.7667" PHP_INI_ALL Verfügbar seit PHP 5.0.0.
date.default_longitude "35.2333" PHP_INI_ALL Verfügbar seit PHP 5.0.0.
date.sunrise_zenith "90.583333" PHP_INI_ALL Verfügbar seit PHP 5.0.0.
date.sunset_zenith "90.583333" PHP_INI_ALL Verfügbar seit PHP 5.0.0.
date.timezone "" PHP_INI_ALL Verfügbar seit PHP 5.1.0.

Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

date.default_latitude float

Vorgabe-Breitengrad.

date.default_longitude float

Vorgabe-Längengrad.

date.sunrise_zenith float

Vorgabe-Sonnenaufgangszenit.

date.sunset_zenith float

Vorgabe-Sonnenuntergangszenit.

date.timezone string

Diese Zeitzone wird von allen Datums- und Zeitfunktionen als Vorgabewert genutzt wenn die Umgebungsvariable TZ nicht gesetzt ist. Die Vorrangreihenfolge ist auf der Handbuchseite zu date_default_timezone_get() beschrieben. Siehe Liste unterstützter Zeitzonen für eine Liste der unterstützten Zeitzonen.

Hinweis: Die ersten vier Konfigurationsoptionen werden zur Zeit nur von den Funktionen date_sunrise() und date_sunset() genutzt.



Ressource-Typen

Diese Erweiterung definiert keine Ressource-Typen.




Vordefinierte Konstanten

Die DATE_-Konstanten sind ab PHP 5.1.1 definiert und bieten vorbereitetet Standard-Datenformate, diese können zusammen mit den Datumsfunktionen (wie date()) eingesetzt werden.

Die folgenden Konstanten existieren seit PHP 5.1.2, sie spezifizieren Rückgabeformate für die Funktionen date_sunrise() und date_sunset().

SUNFUNCS_RET_TIMESTAMP (integer)
Timestamp
SUNFUNCS_RET_STRING (integer)
Stunde:Minute (z.B. 08:02)
SUNFUNCS_RET_DOUBLE (integer)
Sunden als Fließkommawert (z.B. 8.75)


Liste unterstützter Zeitzonen

Inhaltsverzeichnis

Hier finden Sie die vollständige Liste aller von PHP unterstützen Zeitzonen, wie sie z.b mit date_default_timezone_set() genutzt werden können.

Hinweis: Die jeweils aktuellste Version der Zeitzonendatenbank kann über das » timezonedb-Paket in PECL installiert werden. Für Windows existiert eine vorkompilierte DLL auf der PECL4Win-Seite: » php_timezonedb.dll.

Hinweis: This list is based upon the timezone database version 2009.16.


Africa

Africa
Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara
Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau
Africa/Blantyre Africa/Brazzaville Africa/Bujumbura Africa/Cairo Africa/Casablanca
Africa/Ceuta Africa/Conakry Africa/Dakar Africa/Dar_es_Salaam Africa/Djibouti
Africa/Douala Africa/El_Aaiun Africa/Freetown Africa/Gaborone Africa/Harare
Africa/Johannesburg Africa/Kampala Africa/Khartoum Africa/Kigali Africa/Kinshasa
Africa/Lagos Africa/Libreville Africa/Lome Africa/Luanda Africa/Lubumbashi
Africa/Lusaka Africa/Malabo Africa/Maputo Africa/Maseru Africa/Mbabane
Africa/Mogadishu Africa/Monrovia Africa/Nairobi Africa/Ndjamena Africa/Niamey
Africa/Nouakchott Africa/Ouagadougou Africa/Porto-Novo Africa/Sao_Tome Africa/Timbuktu
Africa/Tripoli Africa/Tunis Africa/Windhoek    


America

America
America/Adak America/Anchorage America/Anguilla America/Antigua America/Araguaina
America/Argentina/Buenos_Aires America/Argentina/Catamarca America/Argentina/ComodRivadavia America/Argentina/Cordoba America/Argentina/Jujuy
America/Argentina/La_Rioja America/Argentina/Mendoza America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan
America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Aruba America/Asuncion
America/Atikokan America/Atka America/Bahia America/Barbados America/Belem
America/Belize America/Blanc-Sablon America/Boa_Vista America/Bogota America/Boise
America/Buenos_Aires America/Cambridge_Bay America/Campo_Grande America/Cancun America/Caracas
America/Catamarca America/Cayenne America/Cayman America/Chicago America/Chihuahua
America/Coral_Harbour America/Cordoba America/Costa_Rica America/Cuiaba America/Curacao
America/Danmarkshavn America/Dawson America/Dawson_Creek America/Denver America/Detroit
America/Dominica America/Edmonton America/Eirunepe America/El_Salvador America/Ensenada
America/Fort_Wayne America/Fortaleza America/Glace_Bay America/Godthab America/Goose_Bay
America/Grand_Turk America/Grenada America/Guadeloupe America/Guatemala America/Guayaquil
America/Guyana America/Halifax America/Havana America/Hermosillo America/Indiana/Indianapolis
America/Indiana/Knox America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Tell_City America/Indiana/Vevay
America/Indiana/Vincennes America/Indiana/Winamac America/Indianapolis America/Inuvik America/Iqaluit
America/Jamaica America/Jujuy America/Juneau America/Kentucky/Louisville America/Kentucky/Monticello
America/Knox_IN America/La_Paz America/Lima America/Los_Angeles America/Louisville
America/Maceio America/Managua America/Manaus America/Marigot America/Martinique
America/Mazatlan America/Mendoza America/Menominee America/Merida America/Mexico_City
America/Miquelon America/Moncton America/Monterrey America/Montevideo America/Montreal
America/Montserrat America/Nassau America/New_York America/Nipigon America/Nome
America/Noronha America/North_Dakota/Center America/North_Dakota/New_Salem America/Panama America/Pangnirtung
America/Paramaribo America/Phoenix America/Port-au-Prince America/Port_of_Spain America/Porto_Acre
America/Porto_Velho America/Puerto_Rico America/Rainy_River America/Rankin_Inlet America/Recife
America/Regina America/Resolute America/Rio_Branco America/Rosario America/Santarem
America/Santiago America/Santo_Domingo America/Sao_Paulo America/Scoresbysund America/Shiprock
America/St_Barthelemy America/St_Johns America/St_Kitts America/St_Lucia America/St_Thomas
America/St_Vincent America/Swift_Current America/Tegucigalpa America/Thule America/Thunder_Bay
America/Tijuana America/Toronto America/Tortola America/Vancouver America/Virgin
America/Whitehorse America/Winnipeg America/Yakutat America/Yellowknife  


Antarctica

Antarctica
Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/McMurdo
Antarctica/Palmer Antarctica/Rothera Antarctica/South_Pole Antarctica/Syowa Antarctica/Vostok


Arctic

Arctic
Arctic/Longyearbyen


Asia

Asia
Asia/Aden Asia/Almaty Asia/Amman Asia/Anadyr Asia/Aqtau
Asia/Aqtobe Asia/Ashgabat Asia/Ashkhabad Asia/Baghdad Asia/Bahrain
Asia/Baku Asia/Bangkok Asia/Beirut Asia/Bishkek Asia/Brunei
Asia/Calcutta Asia/Choibalsan Asia/Chongqing Asia/Chungking Asia/Colombo
Asia/Dacca Asia/Damascus Asia/Dhaka Asia/Dili Asia/Dubai
Asia/Dushanbe Asia/Gaza Asia/Harbin Asia/Ho_Chi_Minh Asia/Hong_Kong
Asia/Hovd Asia/Irkutsk Asia/Istanbul Asia/Jakarta Asia/Jayapura
Asia/Jerusalem Asia/Kabul Asia/Kamchatka Asia/Karachi Asia/Kashgar
Asia/Kathmandu Asia/Katmandu Asia/Kolkata Asia/Krasnoyarsk Asia/Kuala_Lumpur
Asia/Kuching Asia/Kuwait Asia/Macao Asia/Macau Asia/Magadan
Asia/Makassar Asia/Manila Asia/Muscat Asia/Nicosia Asia/Novosibirsk
Asia/Omsk Asia/Oral Asia/Phnom_Penh Asia/Pontianak Asia/Pyongyang
Asia/Qatar Asia/Qyzylorda Asia/Rangoon Asia/Riyadh Asia/Saigon
Asia/Sakhalin Asia/Samarkand Asia/Seoul Asia/Shanghai Asia/Singapore
Asia/Taipei Asia/Tashkent Asia/Tbilisi Asia/Tehran Asia/Tel_Aviv
Asia/Thimbu Asia/Thimphu Asia/Tokyo Asia/Ujung_Pandang Asia/Ulaanbaatar
Asia/Ulan_Bator Asia/Urumqi Asia/Vientiane Asia/Vladivostok Asia/Yakutsk
Asia/Yekaterinburg Asia/Yerevan      


Atlantic

Atlantic
Atlantic/Azores Atlantic/Bermuda Atlantic/Canary Atlantic/Cape_Verde Atlantic/Faeroe
Atlantic/Faroe Atlantic/Jan_Mayen Atlantic/Madeira Atlantic/Reykjavik Atlantic/South_Georgia
Atlantic/St_Helena Atlantic/Stanley      


Australia

Australia
Australia/ACT Australia/Adelaide Australia/Brisbane Australia/Broken_Hill Australia/Canberra
Australia/Currie Australia/Darwin Australia/Eucla Australia/Hobart Australia/LHI
Australia/Lindeman Australia/Lord_Howe Australia/Melbourne Australia/North Australia/NSW
Australia/Perth Australia/Queensland Australia/South Australia/Sydney Australia/Tasmania
Australia/Victoria Australia/West Australia/Yancowinna    


Europe

Europe
Europe/Amsterdam Europe/Andorra Europe/Athens Europe/Belfast Europe/Belgrade
Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Bucharest Europe/Budapest
Europe/Chisinau Europe/Copenhagen Europe/Dublin Europe/Gibraltar Europe/Guernsey
Europe/Helsinki Europe/Isle_of_Man Europe/Istanbul Europe/Jersey Europe/Kaliningrad
Europe/Kiev Europe/Lisbon Europe/Ljubljana Europe/London Europe/Luxembourg
Europe/Madrid Europe/Malta Europe/Mariehamn Europe/Minsk Europe/Monaco
Europe/Moscow Europe/Nicosia Europe/Oslo Europe/Paris Europe/Podgorica
Europe/Prague Europe/Riga Europe/Rome Europe/Samara Europe/San_Marino
Europe/Sarajevo Europe/Simferopol Europe/Skopje Europe/Sofia Europe/Stockholm
Europe/Tallinn Europe/Tirane Europe/Tiraspol Europe/Uzhgorod Europe/Vaduz
Europe/Vatican Europe/Vienna Europe/Vilnius Europe/Volgograd Europe/Warsaw
Europe/Zagreb Europe/Zaporozhye Europe/Zurich    


Indian

Indian
Indian/Antananarivo Indian/Chagos Indian/Christmas Indian/Cocos Indian/Comoro
Indian/Kerguelen Indian/Mahe Indian/Maldives Indian/Mauritius Indian/Mayotte
Indian/Reunion        


Pacific

Pacific
Pacific/Apia Pacific/Auckland Pacific/Chatham Pacific/Easter Pacific/Efate
Pacific/Enderbury Pacific/Fakaofo Pacific/Fiji Pacific/Funafuti Pacific/Galapagos
Pacific/Gambier Pacific/Guadalcanal Pacific/Guam Pacific/Honolulu Pacific/Johnston
Pacific/Kiritimati Pacific/Kosrae Pacific/Kwajalein Pacific/Majuro Pacific/Marquesas
Pacific/Midway Pacific/Nauru Pacific/Niue Pacific/Norfolk Pacific/Noumea
Pacific/Pago_Pago Pacific/Palau Pacific/Pitcairn Pacific/Ponape Pacific/Port_Moresby
Pacific/Rarotonga Pacific/Saipan Pacific/Samoa Pacific/Tahiti Pacific/Tarawa
Pacific/Tongatapu Pacific/Truk Pacific/Wake Pacific/Wallis Pacific/Yap


Others

Others
Brazil/Acre Brazil/DeNoronha Brazil/East Brazil/West Canada/Atlantic
Canada/Central Canada/East-Saskatchewan Canada/Eastern Canada/Mountain Canada/Newfoundland
Canada/Pacific Canada/Saskatchewan Canada/Yukon CET Chile/Continental
Chile/EasterIsland CST6CDT Cuba EET Egypt
Eire EST EST5EDT Etc/GMT Etc/GMT+0
Etc/GMT+1 Etc/GMT+10 Etc/GMT+11 Etc/GMT+12 Etc/GMT+2
Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6 Etc/GMT+7
Etc/GMT+8 Etc/GMT+9 Etc/GMT-0 Etc/GMT-1 Etc/GMT-10
Etc/GMT-11 Etc/GMT-12 Etc/GMT-13 Etc/GMT-14 Etc/GMT-2
Etc/GMT-3 Etc/GMT-4 Etc/GMT-5 Etc/GMT-6 Etc/GMT-7
Etc/GMT-8 Etc/GMT-9 Etc/GMT0 Etc/Greenwich Etc/UCT
Etc/Universal Etc/UTC Etc/Zulu Factory GB
GB-Eire GMT GMT+0 GMT-0 GMT0
Greenwich Hongkong HST Iceland Iran
Israel Jamaica Japan Kwajalein Libya
MET Mexico/BajaNorte Mexico/BajaSur Mexico/General MST
MST7MDT Navajo NZ NZ-CHAT Poland
Portugal PRC PST8PDT ROC ROK
Singapore Turkey UCT Universal US/Alaska
US/Aleutian US/Arizona US/Central US/East-Indiana US/Eastern
US/Hawaii US/Indiana-Starke US/Michigan US/Mountain US/Pacific
US/Pacific-New US/Samoa UTC W-SU WET
Zulu        
Warnung

Die folgenden Zeitzonen (mit Ausnahme von UTC) existieren nur aus Gründen der Rückwärtskompatibilität und sollten nicht mehr benutzt werden.




The DateTime class

Einführung

Representation of date and time.

Klassenbeschreibung

DateTime
DateTime {
/* Constants */
const string DateTime::ATOM = Y-m-d\TH:i:sP ;
const string DateTime::COOKIE = l, d-M-y H:i:s T ;
const string DateTime::ISO8601 = Y-m-d\TH:i:sO ;
const string DateTime::RFC822 = D, d M y H:i:s O ;
const string DateTime::RFC850 = l, d-M-y H:i:s T ;
const string DateTime::RFC1036 = D, d M y H:i:s O ;
const string DateTime::RFC1123 = D, d M Y H:i:s O ;
const string DateTime::RFC2822 = D, d M Y H:i:s O ;
const string DateTime::RFC3339 = Y-m-d\TH:i:sP ;
const string DateTime::RSS = D, d M Y H:i:s O ;
const string DateTime::W3C = Y-m-d\TH:i:sP ;
/* Methods */
public DateTime add ( DateInterval $interval )
__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
public static DateTime createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )
public DateInterval diff ( DateTime $datetime [, bool $absolute ] )
public string format ( string $format )
public static array getLastErrors ( void )
public int getOffset ( void )
public int getTimestamp ( void )
public DateTimeZone getTimezone ( void )
public DateTime modify ( string $modify )
public static DateTime __set_state ( array $array )
public DateTime setDate ( int $year , int $month , int $day )
public DateTime setISODate ( int $year , int $week [, int $day ] )
public DateTime setTime ( int $hour , int $minute [, int $second ] )
public DateTime setTimestamp ( int $unixtimestamp )
public DateTime setTimezone ( DateTimeZone $timezone )
public DateTime sub ( DateInterval $interval )
public DateTime __wakeup ( void )
}

Vordefinierte Konstanten

DateTime Node Types

DateTime::ATOM
DATE_ATOM
Atom (example: 2005-08-15T15:52:01+00:00)
DateTime::COOKIE
DATE_COOKIE
HTTP Cookies (example: Monday, 15-Aug-05 15:52:01 UTC)
DateTime::ISO8601
DATE_ISO8601
ISO-8601 (example: 2005-08-15T15:52:01+0000)
DateTime::RFC822
DATE_RFC822
RFC 822 (example: Mon, 15 Aug 05 15:52:01 +0000)
DateTime::RFC850
DATE_RFC850
RFC 850 (example: Monday, 15-Aug-05 15:52:01 UTC)
DateTime::RFC1036
DATE_RFC1036
RFC 1036 (example: Mon, 15 Aug 05 15:52:01 +0000)
DateTime::RFC1123
DATE_RFC1123
RFC 1123 (example: Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::RFC2822
DATE_RFC2822
RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::RFC3339
DATE_RFC3339
Same as DATE_ATOM (since PHP 5.1.3)
DateTime::RSS
DATE_RSS
RSS (Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::W3C
DATE_W3C
World Wide Web Consortium (example: 2005-08-15T15:52:01+00:00)

DateTime::add

(PHP 5 >= 5.3.0)

DateTime::add Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object

Beschreibung

public DateTime DateTime::add ( DateInterval $interval )
DateTime date_add ( DateTime $object , DateInterval $interval )

Adds the specified DateInterval object to the specified DateTime object.

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

interval

A DateInterval object

Rückgabewerte

Returns the modified DateTime.

Beispiele

Beispiel #1 date_add() example

<?php

$date 
= new DateTime("18-July-2008 16:30:30");
echo 
$date->format("d-m-Y H:i:s").'<br />';

date_add($date, new DateInterval("P5D"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Days';

date_add($date, new DateInterval("P5M"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Months';

date_add($date, new DateInterval("P5Y"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Years';

date_add($date, new DateInterval("P5Y5M5D"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Days, 5 Months, 5 Years';

date_add($date, new DateInterval("P5YT5H"));
echo 
'<br />'.$date->format("d-m-Y H:i:s").' : 5 Years, 5 Hours';

?>

Siehe auch

  • DateTime::sub() - Subtracts an amount of days, months, years, hours, minutes and seconds from a DateTime object
  • DateTime::diff() - Returns the difference between two DateTime objects



DateTime::__construct

(PHP 5 >= 5.2.0)

DateTime::__constructReturns new DateTime object

Beschreibung

DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Returns new DateTime object.

Parameter-Liste

time

String in a format accepted by strtotime(), defaults to "now".

timezone

Time zone of the time.

Fehler/Exceptions

Emits Exception in case of an error.

Beispiele

Beispiel #1 DateTime::__construct() example

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 14:52:10');
echo 
$datetime->format(DATE_ATOM);
?>



DateTime::createFromFormat

(PHP 5 >= 5.3.0)

DateTime::createFromFormatReturns new DateTime object formatted according to the specified format

Beschreibung

public static DateTime DateTime::createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )

Returns new DateTime object formatted according to the specified format.

Parameter-Liste

format

Format accepted by date().

If format does not contain the character ! then portions of the date/time value specified in format but not specified in time will be set to the current system time.

If format contains the character !, then portions of the generated time specified to the left-hand side of the ! in format will be set to corresponding values from the Unix epoch.

If the first character of format is !, then all portions of the date/time value generated which are not specified in time will be initialized to corresponding values from the Unix epoch.

The Unix epoch is 1970-01-01 00:00:00.

time

String representing the time.

timezone

Time zone.

Rückgabewerte

Returns new DateTime instance.

Beispiele

Beispiel #1 Using ! to reset default date/time values

<?php
echo "Current system date and time: " date('Y-m-d H:i:s') . "\n";

$format 'Y-m-d';
$dt DateTime::createFromFormat($format'2009-02-03');
echo 
"Format: $format; " $dt->date "\n";

$format 'Y-m-d H:i:s';
$dt DateTime::createFromFormat($format'2009-02-03 15:16:17');
echo 
"Format: $format; " $dt->date "\n";

$format 'Y-m-!d H:i:s';
$dt DateTime::createFromFormat($format'2009-02-03 15:16:17');
echo 
"Format: $format; " $dt->date "\n";

$format '!Y-m-d';
$dt DateTime::createFromFormat($format'2009-02-03');
echo 
"Format: $format; " $dt->date "\n";
?>

The above example will output something like the following (taking into account the current system time):

Current system date and time: 2009-09-13 01:04:03
Format: Y-m-d; 2009-02-03 01:04:03
Format: Y-m-d H:i:s; 2009-02-03 15:16:17
Format: Y-m-!d H:i:s; 1970-01-03 15:16:17
Format: !Y-m-d; 2009-02-03 00:00:00



DateTime::diff

(PHP 5 >= 5.3.0)

DateTime::diffReturns the difference between two DateTime objects

Beschreibung

public DateInterval DateTime::diff ( DateTime $datetime [, bool $absolute ] )

Returns the difference between two DateTime objects.

Parameter-Liste

datetime

The date to compare to.

absolute

Whether to return absolute difference. Defaults to FALSE.

Rückgabewerte

The difference between two dates.



DateTime::format

(PHP 5 >= 5.2.0)

DateTime::formatReturns date formatted according to given format

Beschreibung

public string DateTime::format ( string $format )
string date_format ( DateTime $object , string $format )

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

format

Format accepted by date().

Rückgabewerte

Returns formatted date on success or FALSE on failure.

Beispiele

Beispiel #1 Displaying the date and time using the procedural form

<?php
date_default_timezone_set
('Europe/London');

$datetime date_create('2008-08-03 14:52:10');
echo 
date_format($datetime'jS, F Y') . "\n";
echo 
date_format($datetimeDATE_ATOM);
?>

Beispiel #2 Displaying the date and time using the object oriented form

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 14:52:10');
echo 
$datetime->format('jS, F Y') . "\n";
echo 
$datetime->format(DATE_ATOM);
?>
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

3rd, August 2008
2008-08-03T14:52:10+01:00

Siehe auch

  • date() - Formatiert ein(e) angegebene(s) Zeit/Datum



DateTime::getLastErrors

(PHP 5 >= 5.3.0)

DateTime::getLastErrorsReturns the warnings and errors

Beschreibung

public static array DateTime::getLastErrors ( void )

Returns the warnings and errors found while parsing a date/time string.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Returns array containing info about warnings and errors.

Beispiele

Beispiel #1 DateTime::getLastErrors() example

<?php
$date 
date_create('asdfasdf');
print_r(DateTime::getLastErrors());
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [warning_count] => 1
    [warnings] => Array
        (
            [6] => Double timezone specification
        )

    [error_count] => 1
    [errors] => Array
        (
            [0] => The timezone could not be found in the database
        )

)



DateTime::getOffset

(PHP 5 >= 5.2.0)

DateTime::getOffsetReturns the daylight saving time offset

Beschreibung

public int DateTime::getOffset ( void )
int date_offset_get ( DateTime $object )

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

Rückgabewerte

Returns DST offset in seconds on success or FALSE on failure.

Beispiele

Beispiel #1 Comparing offsets between Summer and Winter

<?php
date_default_timezone_set
('Europe/London');

$winter = new DateTime('2008-12-25 14:25:41');
$summer = new DateTime('2008-07-14 14:25:41');

echo 
$winter->getOffset(); // Winter offset: 0
echo $summer->getOffset(); // Summer offset: 3600 = 1 hour
?>



DateTime::getTimestamp

(PHP 5 >= 5.3.0)

DateTime::getTimestampGets the Unix timestamp

Beschreibung

public int DateTime::getTimestamp ( void )

Gets the Unix timestamp.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Returns Unix timestamp representing the date.

Siehe auch



DateTime::getTimezone

(PHP 5 >= 5.2.0)

DateTime::getTimezoneReturn time zone relative to given DateTime

Beschreibung

public DateTimeZone DateTime::getTimezone ( void )

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

Rückgabewerte

Returns DateTimeZone object on success or FALSE on failure.

Beispiele

Beispiel #1 Setting and getting DateTimeZone objects

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo 
$datetime->getTimezone()->getName() . "\n";

$datetime = new DateTime('2008-08-03 12:35:23');
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo 
$datetime->getTimezone()->getName();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Europe/London
America/Los_Angeles

Siehe auch



DateTime::modify

(PHP 5 >= 5.2.0)

DateTime::modifyAlters the timestamp

Beschreibung

public DateTime DateTime::modify ( string $modify )
DateTime date_modify ( DateTime $object , string $modify )

Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime().

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

modify

String in a relative format accepted by strtotime().

Rückgabewerte

Returns the modified DateTime.

Changelog

Version Beschreibung
5.3.0Der Rückgabewert wurde von NULL auf DateTime geändert.

Beispiele

Beispiel #1 A date_modify() example

<?php
$date 
= new DateTime("2006-12-12");
$date->modify("+1 day");
echo 
$date->format("Y-m-d");
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2006-12-13

Siehe auch

  • strtotime() - Wandelt ein beliebiges in englischer Textform angegebenes Datum in einen UNIX-Zeitstempel (Timestamp) um



DateTime::__set_state

(PHP 5 >= 5.2.0)

DateTime::__set_stateThe __set_state handler

Beschreibung

public static DateTime DateTime::__set_state ( array $array )

The __set_state handler.

Parameter-Liste

array

Initialization array.

Rückgabewerte

Returns a new instance of a DateTime object.



DateTime::setDate

(PHP 5 >= 5.2.0)

DateTime::setDateSets the date

Beschreibung

public DateTime DateTime::setDate ( int $year , int $month , int $day )
DateTime date_date_set ( DateTime $object , int $year , int $month , int $day )

Resets the current date of the DateTime object to a different date.

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

year

Year of the date.

month

Month of the date.

day

Day of the date.

Rückgabewerte

Returns the modified DateTime.

Changelog

Version Beschreibung
5.3.0Der Rückgabewert wurde von NULL auf DateTime geändert.

Beispiele

Beispiel #1 Object oriented example usage

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 14:52:10');
$datetime->setDate(20081012);

echo 
$datetime->format(DATE_RFC2822);
?>

Beispiel #2 Procedural example usage

<?php
date_default_timezone_set
('Europe/London');

$datetime date_create('2008-08-03 14:52:10');
date_date_set($datetime20081012);

echo 
date_format($datetimeDATE_RFC2822);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Sun, 12 Oct 2008 14:52:10 +0100

Siehe auch



DateTime::setISODate

(PHP 5 >= 5.2.0)

DateTime::setISODateSets the ISO date

Beschreibung

public DateTime DateTime::setISODate ( int $year , int $week [, int $day ] )
DateTime date_isodate_set ( DateTime $object , int $year , int $week [, int $day ] )

Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates.

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

year

Year of the date.

week

Week of the date.

day

Offset from the first day of the week.

Rückgabewerte

Returns the modified DateTime.

Changelog

Version Beschreibung
5.3.0Der Rückgabewert wurde von NULL auf DateTime geändert.

Beispiele

Beispiel #1 Finding the date from a week number and day offset

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime();

// Offset from start of week 2 (7) = 5
$datetime->setISODate(200825); // Day 5 of week 2 of 2008 is the 11th of January. 

// Offset from start of week 2 (7) = 10
$datetime->setISODate(2008210); // Day 10 of week 2 of 2008 is the 16th of January.
?>

Beispiel #2 Finding the month a week is in

<?php
date_default_timezone_set
('Europe/London');

$datetime date_create();
date_isodate_set($datetime20086); // Week 6 of 2008 is in February.
?>

Siehe auch



DateTime::setTime

(PHP 5 >= 5.2.0)

DateTime::setTimeSets the time

Beschreibung

public DateTime DateTime::setTime ( int $hour , int $minute [, int $second ] )
DateTime date_time_set ( DateTime $object , int $hour , int $minute [, int $second ] )

Resets the current time of the DateTime object to a different time.

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

hour

Hour of the time.

minute

Minute of the time.

second

Second of the time.

Rückgabewerte

Returns the modified DateTime.

Changelog

Version Beschreibung
5.3.0Der Rückgabewert wurde von NULL auf DateTime geändert.

Beispiele

Beispiel #1 Changing the time of a DateTime object

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo 
$datetime->format('Y-m-d H:i:s') . "\n";

$datetime->setTime(145524);
echo 
$datetime->format('Y-m-d H:i:s') . "\n";

// Warning: Does not increment the hour!
// This is because the hour has been set (14) - see date_modify()
$datetime->setTime($datetime->format('H'), $datetime->format('n') + 6);
echo 
$datetime->format('Y-m-d H:i:s') . "\n";

// *Does* increment the day, because the day has not been set
$datetime->setTime($datetime->format('H') + 12$datetime->format('n'));
echo 
$datetime->format('Y-m-d H:i:s') . "\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2008-08-03 12:35:23
2008-08-03 14:55:24
2008-08-03 14:14:00
2008-08-04 02:08:00

Siehe auch



DateTime::setTimestamp

(PHP 5 >= 5.3.0)

DateTime::setTimestampSets the date and time based on an Unix timestamp

Beschreibung

public DateTime DateTime::setTimestamp ( int $unixtimestamp )

Sets the date and time based on an Unix timestamp.

Parameter-Liste

unixtimestamp

Unix timestamp representing the date.

Rückgabewerte

Returns the modified DateTime.

Siehe auch



DateTime::setTimezone

(PHP 5 >= 5.2.0)

DateTime::setTimezoneSets the time zone for the DateTime object

Beschreibung

public DateTime DateTime::setTimezone ( DateTimeZone $timezone )

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

timezone

Desired time zone.

Rückgabewerte

Returns the modified DateTime.

Changelog

Version Beschreibung
5.3.0 Changed the return value from NULL to DateTime.

Beispiele

Beispiel #1 Setting and getting DateTimeZone objects

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo 
$datetime->getTimezone()->getName() . "\n";

$datetime = new DateTime('2008-08-03 12:35:23');
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo 
$datetime->getTimezone()->getName();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Europe/London
America/Los_Angeles

Siehe auch



DateTime::sub

(PHP 5 >= 5.3.0)

DateTime::sub Subtracts an amount of days, months, years, hours, minutes and seconds from a DateTime object

Beschreibung

public DateTime DateTime::sub ( DateInterval $interval )
DateTime date_sub ( DateTime $object , DateInterval $interval )

Subtracts the specified DateInterval object from the specified DateTime object.

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.

interval

A DateInterval object

Rückgabewerte

Returns the modified DateTime.

Beispiele

Beispiel #1 date_sub() example

<?php

$date 
= new DateTime("18-July-2008 16:30:30");
echo 
$date->format("d-m-Y H:i:s").'<br />';

date_sub($date, new DateInterval("P5D"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Days';

date_sub($date, new DateInterval("P5M"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Months';

date_sub($date, new DateInterval("P5Y"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Years';

date_sub($date, new DateInterval("P5Y5M5D"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Days, 5 Months, 5 Years';

date_sub($date, new DateInterval("P5YT5H"));
echo 
'<br />'.$date->format("d-m-Y H:i:s").' : 5 Years, 5 Hours';

?>

Siehe auch

  • DateTime::add() - Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object
  • DateTime::diff() - Returns the difference between two DateTime objects



DateTime::__wakeup

(PHP 5 >= 5.2.0)

DateTime::__wakeupThe __wakeup handler

Beschreibung

public DateTime DateTime::__wakeup ( void )

The __wakeup handler.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Initializes a DateTime object.


Inhaltsverzeichnis



The DateTimeZone class

Einführung

Representation of time zone.

Klassenbeschreibung

DateTimeZone
DateTimeZone {
/* Constants */
const integer DateTimeZone::AFRICA = 1 ;
const integer DateTimeZone::AMERICA = 2 ;
const integer DateTimeZone::ANTARCTICA = 4 ;
const integer DateTimeZone::ARCTIC = 8 ;
const integer DateTimeZone::ASIA = 16 ;
const integer DateTimeZone::ATLANTIC = 32 ;
const integer DateTimeZone::AUSTRALIA = 64 ;
const integer DateTimeZone::EUROPE = 128 ;
const integer DateTimeZone::INDIAN = 256 ;
const integer DateTimeZone::PACIFIC = 512 ;
const integer DateTimeZone::UTC = 1024 ;
const integer DateTimeZone::ALL = 2047 ;
const integer DateTimeZone::ALL_WITH_BC = 4095 ;
const integer DateTimeZone::PER_COUNTRY = 4096 ;
/* Methods */
__construct ( string $timezone )
public array getLocation ( void )
public string getName ( void )
int getOffset ( DateTime $datetime )
array getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )
staticarray listAbbreviations ( void )
staticarray listIdentifiers ([ int $what = DateTime::ALL [, string $country = NULL ]] )
}

Vordefinierte Konstanten

DateTimeZone Node Types

DateTimeZone::AFRICA

Africa time zones.

DateTimeZone::AMERICA

America time zones.

DateTimeZone::ANTARCTICA

Antarctica time zones.

DateTimeZone::ARCTIC

Artic time zones.

DateTimeZone::ASIA

Asia time zones.

DateTimeZone::ATLANTIC

Atlantic time zones.

DateTimeZone::AUSTRALIA

Australia time zones.

DateTimeZone::EUROPE

Europe time zones.

DateTimeZone::INDIAN

Indian time zones.

DateTimeZone::PACIFIC

Pacific time zones.

DateTimeZone::UTC

UTC time zones.

DateTimeZone::ALL

All time zones.

DateTimeZone::ALL_WITH_BC

All time zones including backwards compatible.

DateTimeZone::PER_COUNTRY

Time zones per country.


DateTimeZone::__construct

(PHP 5 >= 5.2.0)

DateTimeZone::__constructCreates new DateTimeZone object

Beschreibung

DateTimeZone::__construct ( string $timezone )

Creates new DateTimeZone object.

Parameter-Liste

timezone

One of timezones.

Rückgabewerte

Returns DateTimeZone on success.

Fehler/Exceptions

This method throws Exception if the timezone supplied is not recognised as a valid timezone.

Beispiele

Beispiel #1 Catching errors when instantiating DateTimeZone

<?php
// Error handling by catching exceptions
$timezones = array('Europe/London''Mars/Phobos''Jupiter/Europa');

foreach (
$timezones as $tz) {
    try {
        
$mars = new DateTimeZone($tz);
    } catch(
Exception $e) {
        echo 
$e->getMessage() . '<br />';
    }
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Mars/Phobos)
DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Jupiter/Europa)



DateTimeZone::getLocation

(PHP 5 >= 5.3.0)

DateTimeZone::getLocationReturns location information for a timezone

Beschreibung

public array DateTimeZone::getLocation ( void )

Returns location information for a timezone, including country code, latitude/longitude and comments.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Array containing location information about timezone.

Beispiele

Beispiel #1 DateTimeZone::getLocation() example

<?php
$tz 
= new DateTimeZone("Europe/Prague");
print_r($tz->getLocation());
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [country_code] => CZ
    [latitude] => 50.08333
    [longitude] => 14.43333
    [comments] => 
)



DateTimeZone::getName

(PHP 5 >= 5.2.0)

DateTimeZone::getNameReturns the name of the timezone

Beschreibung

public string DateTimeZone::getName ( void )

Returns the name of the timezone.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

One of timezones.



DateTimeZone::getOffset

(PHP 5 >= 5.2.0)

DateTimeZone::getOffsetReturns the timezone offset from GMT

Beschreibung

int DateTimeZone::getOffset ( DateTime $datetime )
int timezone_offset_get ( DateTimeZone $object , DateTime $datetime )

This function returns the offset to GMT for the date/time specified in the datetime parameter. The GMT offset is calculated with the timezone information contained in the DateTimeZone object being used.

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTimeZone Objekt.

datetime

DateTime that contains the date/time to compute the offset from.

Rückgabewerte

Returns time zone offset in seconds on success or FALSE on failure.

Beispiele

Beispiel #1 DateTimeZone::getOffset() examples

<?php
// Create two timezone objects, one for Taipei (Taiwan) and one for
// Tokyo (Japan)
$dateTimeZoneTaipei = new DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new DateTimeZone("Asia/Tokyo");

// Create two DateTime objects that will contain the same Unix timestamp, but
// have different timezones attached to them.
$dateTimeTaipei = new DateTime("now"$dateTimeZoneTaipei);
$dateTimeJapan = new DateTime("now"$dateTimeZoneJapan);

// Calculate the GMT offset for the date/time contained in the $dateTimeTaipei
// object, but using the timezone rules as defined for Tokyo
// ($dateTimeZoneJapan).
$timeOffset $dateTimeZoneJapan->getOffset($dateTimeTaipei);

// Should show int(32400) (for dates after Sat Sep 8 01:00:00 1951 JST).
var_dump($timeOffset);
?>



DateTimeZone::getTransitions

(PHP 5 >= 5.2.0)

DateTimeZone::getTransitionsReturns all transitions for the timezone

Beschreibung

array DateTimeZone::getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )
array timezone_transitions_get ( DateTimeZone $object [, int $timestamp_begin [, int $timestamp_end ]] )

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTimeZone Objekt.

timestamp_begin

Begin timestamp.

timestamp_end

End timestamp.

Rückgabewerte

Returns numerically indexed array containing associative array with all transitions on success or FALSE on failure.

Changelog

Version Beschreibung
5.3.0 The optional timestamp_begin and timestamp_end were added.

Beispiele

Beispiel #1 A timezone_transitions_get() example

<?php
$timezone 
= new DateTimeZone("CET");
print_r(reset($timezone->getTransitions()));
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [ts] => -1693706400
    [time] => 1916-04-30T22:00:00+0000
    [offset] => 7200
    [isdst] => 1
    [abbr] => CEST
)



DateTimeZone::listAbbreviations

(PHP 5 >= 5.2.0)

DateTimeZone::listAbbreviationsReturns associative array containing dst, offset and the timezone name

Beschreibung

staticarray DateTimeZone::listAbbreviations ( void )

Rückgabewerte

Returns array on success or FALSE on failure.

Beispiele

Beispiel #1 A timezone_abbreviations_list() example

<?php
$timezone_abbreviations 
DateTimeZone::listAbbreviations();
print_r($timezone_abbreviations["acst"]);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [0] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Porto_Acre
        )

    [1] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Eirunepe
        )

    [2] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Rio_Branco
        )

    [3] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => Brazil/Acre
        )

)

Siehe auch



DateTimeZone::listIdentifiers

(PHP 5 >= 5.2.0)

DateTimeZone::listIdentifiersReturns numerically index array with all timezone identifiers

Beschreibung

staticarray DateTimeZone::listIdentifiers ([ int $what = DateTime::ALL [, string $country = NULL ]] )
array timezone_identifiers_list ([ int $what = DateTime::ALL [, string $country = NULL ]] )

Parameter-Liste

what

One of DateTimeZone class constants, defaults to DateTimeZone::ALL.

country

A two-letter ISO 3166-1 compatible country code.

Hinweis: This option is only used when what is set to DateTimeZone::PER_COUNTRY.

Rückgabewerte

Returns array on success or FALSE on failure.

Changelog

Version Beschreibung
5.3.0 Added the optional what and country parameters.

Beispiele

Beispiel #1 A timezone_identifiers_list() example

<?php
$timezone_identifiers 
DateTimeZone::listIdentifiers();
for (
$i=0$i 5$i++) {
    echo 
"$timezone_identifiers[$i]\n";
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmera

Siehe auch


Inhaltsverzeichnis



The DateInterval class

Einführung

Representation of date interval.

Klassenbeschreibung

DateInterval
DateInterval {
/* Methods */
__construct ( string $interval_spec )
public static DateInterval createFromDateString ( string $time )
public string format ( string $format )
}

DateInterval::__construct

(PHP 5 >= 5.3.0)

DateInterval::__constructCreates new DateInterval object

Beschreibung

DateInterval::__construct ( string $interval_spec )

Creates new DateInterval object.

Parameter-Liste

interval_spec

Interval specification.

The format starts with the letter P, for "period." Each duration period is represented by an integer value followed by a period designator. If the duration contains time elements, that portion of the specification is preceded by the letter T.

interval_spec Period Designators
Period Designator Description
Y years
M months
D days
W weeks. These get converted into days, so can not be combined with D.
H hours
M minutes
S seconds

Here are some simple examples. Two days is P2D. Two seconds is PT2S. Six years and five minutes is P6YT5M.

Hinweis: The unit types must be entered from the largest scale unit on the left to the smallest scale unit on the right. So years before months, months before days, days before minutes, etc. Thus one year and four days must be represented as P1Y4D, not P4D1Y.

The specification can also be represented as a date time. A sample of one year and four days would be P0001-00-04T00:00:00. But the values in this format can not exceed a given period's roll-over-point (e.g. 25 hours is invalid).

These formats are based on the » ISO 8601 duration specification.

Beispiele

Beispiel #1 DateInterval example

<?php

$interval 
= new DateInterval('P2Y4DT6H8M');
print_r($interval);

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

DateInterval Object
(
    [y] => 2
    [m] => 0
    [d] => 4
    [h] => 6
    [i] => 8
    [s] => 0
    [invert] => 0
    [days] => 0
)

Siehe auch



DateInterval::createFromDateString

(PHP 5 >= 5.3.0)

DateInterval::createFromDateStringSets up a DateInterval from the relative parts of the string

Beschreibung

public static DateInterval DateInterval::createFromDateString ( string $time )

Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string.

Parameter-Liste

time

Date with relative parts.

Rückgabewerte

Returns new DateInterval instance if success.



DateInterval::format

(PHP 5 >= 5.3.0)

DateInterval::formatFormats the interval

Beschreibung

public string DateInterval::format ( string $format )

Formats the interval.

Parameter-Liste

format

The following characters are recognized in the format parameter string.
format character Description Example values
Y Years, numeric, at least 2 digits with leading 0 01, 03
y Years, numeric 1, 3
M Months, numeric, at least 2 digits with leading 0 01, 03, 12
m Months, numeric 01, 03, 12
D Days, numeric, at least 2 digits with leading 0 01, 03, 31
d Days, numeric 1, 3, 31
a Total amount of days 4, 18, 8123
H Hours, numeric, at least 2 digits with leading 0 01, 03, 23
h Hours, numeric 1, 3, 23
I Minutes, numeric, at least 2 digits with leading 0 01, 03, 59
i Minutes, numeric 1, 3, 59
S Seconds, numeric, at least 2 digits with leading 0 01, 03, 57
s Seconds, numeric 1, 3, 57
R Sign "-" when negative, "+" when positive -, +
r Sign "-" when negative, empty when positive -,
% Literal % %

Hinweis: The prefix % is required in order for the format specifiers to work correctly.

Rückgabewerte

Returns the formatted interval.


Inhaltsverzeichnis



The DatePeriod class

Einführung

Representation of date period.

Klassenbeschreibung

DatePeriod
DatePeriod implements Traversable {
/* Constants */
const integer DatePeriod::EXCLUDE_START_DATE = 1 ;
/* Methods */
__construct ( DateTime $start , DateInterval $interval , int $recurrences [, int $options ] )
}

Vordefinierte Konstanten

DatePeriod Node Types

DatePeriod::EXCLUDE_START_DATE

Exclude start date, used in DatePeriod::__construct().


DatePeriod::__construct

(PHP 5 >= 5.3.0)

DatePeriod::__constructCreates new DatePeriod object

Beschreibung

DatePeriod::__construct ( DateTime $start , DateInterval $interval , int $recurrences [, int $options ] )
DatePeriod::__construct ( DateTime $start , DateInterval $interval , DateTime $end [, int $options ] )
DatePeriod::__construct ( string $isostr [, int $options ] )

Creates new DatePeriod object.

Parameter-Liste

start

Start date.

interval

Interval.

recurrences

Number of recurrences.

end

End date.

isostr

String containing the ISO interval.

options

Can be set to DatePeriod::EXCLUDE_START_DATE.


Inhaltsverzeichnis



Datum/Uhrzeit Funktionen


checkdate

(PHP 4, PHP 5)

checkdatePrüft ein Gregorianisches Datum auf Gültigkeit

Beschreibung

bool checkdate ( int $month , int $day , int $year )

Prüft die Gültigkeit des durch die Funktionsargumente beschriebenen Datums. Ein Datum wird als gültig betrachtet, wenn jeder Parameter korrekt definiert wurde.

Parameter-Liste

month

Die Monatsangabe umfasst Werte von 1 bis 12 (inklusive).

day

Der Tag ist in der erlaubten Anzahl von Tagen für den angegebenen Monat month . Schaltjahre werden entsprechend berücksichtigt.

year

Die Jahresangabe ist eine Zahl zwischen 1 und 32767 (inklusive).

Rückgabewerte

Gibt TRUE zurück, wenn das übergebene Datum gültig ist, andernfalls FALSE.

Beispiele

Beispiel #1 checkdate()-Beispiel

<?php
var_dump
(checkdate(12312000));
var_dump(checkdate(2292001));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

bool(true)
bool(false)

Siehe auch

  • mktime() - Gibt den Unix-Timestamp/Zeitstempel für ein Datum zurück
  • strtotime() - Wandelt ein beliebiges in englischer Textform angegebenes Datum in einen UNIX-Zeitstempel (Timestamp) um



date_add

(PHP 5 >= 5.3.0)

date_addAlias von DateTime::add

Beschreibung

Diese Funktion ist ein Alias für: DateTime::add



date_create_from_format

(PHP 5 >= 5.3.0)

date_create_from_formatAlias von DateTime::createFromFormat

Beschreibung

Diese Funktion ist ein Alias für: DateTime::createFromFormat



date_create

(PHP 5 >= 5.2.0)

date_createReturns new DateTime object

Beschreibung

DateTime date_create ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Parameter-Liste

time

String in a format accepted by strtotime(), defaults to "now".

timezone

Time zone of the time.

Rückgabewerte

Returns DateTime object on success or FALSE on failure.

Beispiele

Beispiel #1 date_create() example

<?php
date_default_timezone_set
('Europe/London');

$datetime date_create('2008-08-03 14:52:10');
echo 
date_format($datetimeDATE_ATOM);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2008-08-03T14:52:10+01:00



date_date_set

(PHP 5 >= 5.2.0)

date_date_setAlias von DateTime::setDate

Beschreibung

Diese Funktion ist ein Alias für: DateTime::setDate



date_default_timezone_get

(PHP 5 >= 5.1.0)

date_default_timezone_get Gets the default timezone used by all date/time functions in a script

Beschreibung

string date_default_timezone_get ( void )

In order of preference, this function returns the default timezone by:

  • Reading the timezone set using the date_default_timezone_set() function (if any)

  • Reading the TZ environment variable (if non empty)

  • Reading the value of the date.timezone ini option (if set)

  • Querying the host operating system (if supported and allowed by the OS)

If none of the above succeed, date_default_timezone_get will return a default timezone of UTC.

Rückgabewerte

Returns a string.

Beispiele

Beispiel #1 Getting the default timezone

<?php
date_default_timezone_set
('Europe/London');

if (
date_default_timezone_get()) {
    echo 
'date_default_timezone_set: ' date_default_timezone_get() . '<br />';
}

if (
ini_get('date.timezone')) {
    echo 
'date.timezone: ' ini_get('date.timezone');
}

?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

date_default_timezone_set: Europe/London
date.timezone: Europe/London

Beispiel #2 Getting the abbreviation of a timezone

<?php
date_default_timezone_set
('America/Los_Angeles');
echo 
date_default_timezone_get() . ' => ' date('e') . ' => ' date('T');
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

America/Los_Angeles => America/Los_Angeles => PST

Siehe auch



date_default_timezone_set

(PHP 5 >= 5.1.0)

date_default_timezone_set Sets the default timezone used by all date/time functions in a script

Beschreibung

bool date_default_timezone_set ( string $timezone_identifier )

date_default_timezone_set() sets the default timezone used by all date/time functions.

Hinweis: Since PHP 5.1.0 (when the date/time functions were rewritten), every call to a date/time function will generate a E_NOTICE if the timezone isn't valid, and/or a E_WARNING message if using the system settings or the TZ environment variable.

Instead of using this function to set the default timezone in your script, you can also use the INI setting date.timezone to set the default timezone.

Parameter-Liste

timezone_identifier

The timezone identifier, like UTC or Europe/Lisbon. The list of valid identifiers is available in the Liste unterstützter Zeitzonen.

Rückgabewerte

This function returns FALSE if the timezone_identifier isn't valid, or TRUE otherwise.

Beispiele

Beispiel #1 Getting the default timezone

<?php
date_default_timezone_set
('America/Los_Angeles');

$script_tz date_default_timezone_get();

if (
strcmp($script_tzini_get('date.timezone'))){
    echo 
'Script timezone differs from ini-set timezone.';
} else {
    echo 
'Script timezone and ini-set timezone match.';
}
?>

Changelog

Version Beschreibung
5.3.0 Now throws E_WARNING rather then E_STRICT.
5.1.2 The function started to validate the timezone_identifier parameter.

Siehe auch



date_diff

(PHP 5 >= 5.3.0)

date_diffAlias von DateTime::diff

Beschreibung

Diese Funktion ist ein Alias für: DateTime::diff



date_format

(PHP 5 >= 5.2.0)

date_formatAlias von DateTime::format

Beschreibung

Diese Funktion ist ein Alias für: DateTime::format



date_get_last_errors

(PHP 5 >= 5.3.0)

date_get_last_errorsAlias von DateTime::getLastErrors

Beschreibung

Diese Funktion ist ein Alias für: DateTime::getLastErrors



date_interval_create_from_date_string

(PHP 5 >= 5.3.0)

date_interval_create_from_date_stringAlias von DateInterval::createFromDateString

Beschreibung

Diese Funktion ist ein Alias für: DateInterval::createFromDateString



date_interval_format

(PHP 5 >= 5.3.0)

date_interval_formatAlias von DateInterval::format

Beschreibung

Diese Funktion ist ein Alias für: DateInterval::format



date_isodate_set

(PHP 5 >= 5.2.0)

date_isodate_setAlias von DateTime::setISODate

Beschreibung

Diese Funktion ist ein Alias für: DateTime::setISODate



date_modify

(PHP 5 >= 5.2.0)

date_modifyAlias von DateTime::modify

Beschreibung

Diese Funktion ist ein Alias für: DateTime::modify



date_offset_get

(PHP 5 >= 5.2.0)

date_offset_getAlias von DateTime::getOffset

Beschreibung

Diese Funktion ist ein Alias für: DateTime::getOffset



date_parse_from_format

(PHP 5 >= 5.3.0)

date_parse_from_formatGet info about given date

Beschreibung

array date_parse_from_format ( string $format , string $date )

Returns associative array with detailed info about given date.

Parameter-Liste

format

Format accepted by date() with some extras.

date

String representing the date.

Rückgabewerte

Returns associative array with detailed info about given date.

Beispiele

Beispiel #1 date_parse_from_format() example

<?php
$date 
"6.1.2009 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP"$date));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [year] => 2009
    [month] => 1
    [day] => 6
    [hour] => 13
    [minute] => 0
    [second] => 0
    [fraction] => 
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 0
    [errors] => Array
        (
        )

    [is_localtime] => 1
    [zone_type] => 1
    [zone] => -60
    [is_dst] => 
)



date_parse

(PHP 5 >= 5.2.0)

date_parseReturns associative array with detailed info about given date

Beschreibung

array date_parse ( string $date )

Parameter-Liste

date

Date in format accepted by strtotime().

Rückgabewerte

Returns array with information about the parsed date on success, or FALSE on failure.

Fehler/Exceptions

In case the date format has an error, the element 'errors' will contains the error messages.

Beispiele

Beispiel #1 A date_parse() example

<?php
print_r
(date_parse("2006-12-12 10:00:00.5"));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)

Siehe auch

  • getdate() - Gibt Datums- und Zeitinformationen zurück



date_sub

(PHP 5 >= 5.3.0)

date_subAlias von DateTime::sub

Beschreibung

Diese Funktion ist ein Alias für: DateTime::sub



date_sun_info

(PHP 5 >= 5.1.2)

date_sun_infoReturns an array with information about sunset/sunrise and twilight begin/end

Beschreibung

array date_sun_info ( int $time , float $latitude , float $longitude )

Parameter-Liste

time

Timestamp.

latitude

Latitude in degrees.

longitude

Longitude in degrees.

Rückgabewerte

Returns array on success or FALSE on failure.

Beispiele

Beispiel #1 A date_sun_info() example

<?php
$sun_info 
date_sun_info(strtotime("2006-12-12"), 31.766735.2333);
foreach (
$sun_info as $key => $val) {
    echo 
"$key: " date("H:i:s"$val) . "\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

sunrise: 05:52:11
sunset: 15:41:21
transit: 10:46:46
civil_twilight_begin: 05:24:08
civil_twilight_end: 16:09:24
nautical_twilight_begin: 04:52:25
nautical_twilight_end: 16:41:06
astronomical_twilight_begin: 04:21:32
astronomical_twilight_end: 17:12:00

Siehe auch

  • date_sunrise() - Returns time of sunrise for a given day and location
  • date_sunset() - Returns time of sunset for a given day and location



date_sunrise

(PHP 5)

date_sunriseReturns time of sunrise for a given day and location

Beschreibung

mixed date_sunrise ( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunrise_zenith") [, float $gmt_offset = 0 ]]]]] )

date_sunrise() returns the sunrise time for a given day (specified as a timestamp ) and location.

Parameter-Liste

timestamp

The timestamp of the day from which the sunrise time is taken.

format

format constants
constant description example
SUNFUNCS_RET_STRING returns the result as string 16:46
SUNFUNCS_RET_DOUBLE returns the result as float 16.78243132
SUNFUNCS_RET_TIMESTAMP returns the result as integer (timestamp) 1095034606

latitude

Defaults to North, pass in a negative value for South. See also: date.default_latitude

longitude

Defaults to East, pass in a negative value for West. See also: date.default_longitude

zenith

Default: date.sunrise_zenith

gmtoffset

Specified in hours.

Rückgabewerte

Returns the sunrise time in a specified format on success, or FALSE on failure.

Fehler/Exceptions

Jeder Aufruf der Datums- und Zeitfunktionen generiert eine E_NOTICE-Warnung, wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht, wenn die Systemeinstellung oder die TZ-Umgebungsvariable genutzt wird. Siehe auch date_default_timezone_set()

Changelog

Version Beschreibung
5.1.0

Erzeugt nun E_STRICT- und E_NOTICE-Zeitzonenfehler.

Beispiele

Beispiel #1 date_sunrise() example

<?php

/* calculate the sunrise time for Lisbon, Portugal
Latitude: 38.4 North
Longitude: 9 West
Zenith ~= 90
offset: +1 GMT
*/

echo date("D M d Y"). ', sunrise time : ' .date_sunrise(time(), SUNFUNCS_RET_STRING38.4, -9901);

?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Mon Dec 20 2004, sunrise time : 08:54

Siehe auch

  • date_sunset() - Returns time of sunset for a given day and location



date_sunset

(PHP 5)

date_sunset Returns time of sunset for a given day and location

Beschreibung

mixed date_sunset ( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunset_zenith") [, float $gmt_offset = 0 ]]]]] )

date_sunset() returns the sunset time for a given day (specified as a timestamp ) and location.

Parameter-Liste

timestamp

The timestamp of the day from which the sunset time is taken.

format

format constants
constant description example
SUNFUNCS_RET_STRING returns the result as string 16:46
SUNFUNCS_RET_DOUBLE returns the result as float 16.78243132
SUNFUNCS_RET_TIMESTAMP returns the result as integer (timestamp) 1095034606

latitude

Defaults to North, pass in a negative value for South. See also: date.default_latitude

longitude

Defaults to East, pass in a negative value for West. See also: date.default_longitude

zenith

Default: date.sunset_zenith

gmtoffset

Specified in hours.

Fehler/Exceptions

Jeder Aufruf der Datums- und Zeitfunktionen generiert eine E_NOTICE-Warnung, wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht, wenn die Systemeinstellung oder die TZ-Umgebungsvariable genutzt wird. Siehe auch date_default_timezone_set()

Changelog

Version Beschreibung
5.1.0

Erzeugt nun E_STRICT- und E_NOTICE-Zeitzonenfehler.

Rückgabewerte

Returns the sunset time in a specified format on success, or FALSE on failure.

Beispiele

Beispiel #1 date_sunset() example

<?php

/* calculate the sunset time for Lisbon, Portugal
Latitude: 38.4 North
Longitude: 9 West
Zenith ~= 90
offset: +1 GMT
*/

echo date("D M d Y"). ', sunset time : ' .date_sunset(time(), SUNFUNCS_RET_STRING38.4, -9901);

?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Mon Dec 20 2004, sunset time : 18:13

Siehe auch

  • date_sunrise() - Returns time of sunrise for a given day and location



date_time_set

(PHP 5 >= 5.2.0)

date_time_setAlias von DateTime::setTime

Beschreibung

Diese Funktion ist ein Alias für: DateTime::setTime



date_timestamp_get

(PHP 5 >= 5.3.0)

date_timestamp_getAlias von DateTime::getTimestamp

Beschreibung

Diese Funktion ist ein Alias für: DateTime::getTimestamp



date_timestamp_set

(PHP 5 >= 5.3.0)

date_timestamp_setAlias von DateTime::setTimestamp

Beschreibung

Diese Funktion ist ein Alias für: DateTime::setTimestamp



date_timezone_get

(PHP 5 >= 5.2.0)

date_timezone_getAlias von DateTime::getTimezone

Beschreibung

Diese Funktion ist ein Alias für: DateTime::getTimezone



date_timezone_set

(PHP 5 >= 5.2.0)

date_timezone_setAlias von DateTime::setTimezone

Beschreibung

Diese Funktion ist ein Alias für: DateTime::setTimezone



date

(PHP 4, PHP 5)

dateFormatiert ein(e) angegebene(s) Zeit/Datum

Beschreibung:

string date ( string $Format [, int $Timestamp ] )

Gibt einen formatierten String anhand eines vorzugebenden Musters zurück. Dabei wird entweder der angegebene Timestamp oder die gegenwärtige lokale Zeit berücksichtigt, wenn kein Timestamp angegegeben wird. Mit anderen Worten ausgedrückt: der Parameter Timestamp ist optional und falls dieser nicht angegeben wird, wird der Wert der Funktion time() angenommen.

Hinweis: Der gültige Bereich eines Timestamp liegt typischerweise zwischen Fri, 13 Dec 1901 20:45:54 GMT und Tue, 19 Jan 2038 03:14:07 GMT. (Das entspricht den minimalen und maximalen Werten für einen vorzeichenbehafteten 32-Bit Integer). Unter Windows-Betriebssytemen ist dieser Bereich auf 01-01-1970 bis 19-01-2038 beschränkt.

Hinweis: Um einen Timestamp aus aus einem Datums-String zu erzeugen, können Sie die Funktion strtotime() benutzen. Zusätzlich bieten einige Datenbanken Funktionen, um Ihre Datumsfromate in Timestamps umzuwandeln (wie zum Beispiel MySQL's » UNIX_TIMESTAMP Funktion.

Die folgenden Zeichen werden im Parameter Format erkannt
Format Zeichen Beschreibung Beispiel für Rückgabewerte
a Kleingeschrieben: Ante meridiem und Post meridiem am oder pm
A Großgeschrieben: Ante meridiem und Post meridiem AM oder PM
B Swatch-Internet-Zeit 000 bis 999
c ISO 8601 Datum (hinzugefügt in PHP 5) 2004-02-12T15:19:21+00:00
d Tag des Monats, 2-stellig mit führender Null 01 bis 31
D Tag der Woche gekürzt auf drei Buchstaben Mon bis Sun
F Monat als ganzes Wort, wie January oder March January bis December
g 12-Stunden-Format, ohne führende Nullen 1 bis 12
G 24-Stunden-Format, ohne führende Nullen 0 bis 23
h 12-Stunden-Format, mit führenden Nullen 01 bis 12
H 24-Stunden-Format, mit führenden Nullen 00 bis 23
i Minuten mit führenden Nullen 00 bis 59
I (großes i) Fällt ein Datum in die Sommerzeit 1 bei Sommerzeit, ansonsten 0.
j Tag des Monats ohne führende Nullen 1 bis 31
l (kleines 'L') Ausgeschriebener Tag der Woche Sunday bis Saturday
L Schaltjahr oder nicht 1 für ein Schaltjahr, ansonsten 0.
m Monat als Zahl, mit führenden Nullen 01 bis 12
M Monatsname mit drei Buchstaben Jan bis Dec
n Monatszahl, ohne führende Nullen 1 bis 12
O Zeitunterschied zur Greenwich time (GMT) in Stunden Beispiel: +0200
r » RFC 2822 formatiertes Datum Beispiel: Thu, 21 Dec 2000 16:01:07 +0200
s Sekunden, mit führenden Nullen 00 bis 59
S Anhang der englischen Aufzählung für einen Monatstag, zwei Zeichen st, nd, rd oder th. Zur Verwendung mit j empfohlen.
t Anzahl der Tage des angegebenen Monats 28 bis 31
T Zeitzoneneinstellung des Rechners Beispiele: EST, MDT ...
U Sekunden seit Beginn der UNIX-Epoche (January 1 1970 00:00:00 GMT) Siehe auch time()
w Numerischer Tag einer Woche 0 (für Sonntag) bis 6 (für Samstag)
W ISO-8601 Wochennummer des Jahres, die Woche beginnt am Montag (hinzugefügt in PHP 4.1.0) Beispiel: 42 (die 42 Woche im Jahr)
Y Vierstellige Jahreszahl Beispiel: 1999 oder 2003
y Jahreszahl, zweistellig Beispiele: 99 oder 03
z Der Tag eines Jahres 0 bis 365
Z Offset der Zeitzone in Sekunden. Der Offset für Zeitzone West nach UTC ist immer negativ und für Zeitzone Ost nach UTC immer positiv. -43200 bis 43200

Nicht erkannte Zeichen werden unverändert ausgegeben. Das Z Format gibt beim Gebrauch von gmdate() immer 0 zurück.

Beispiel #1 date() Beispiel

<?php
// Gibt etwas ähnliches zu Wednesday aus
echo date("l");

// Gibt etwas ähnliches aus wie: Wednesday 15th of January 2003 05:51:38 AM
echo date("l dS of F Y h:i:s A");

// Ausgabe: July 1, 2000 ist ein Saturday
echo "July 1, 2000 ist ein " date("l"mktime(000712000));
?>

Möchten Sie verhindern, dass ein erkanntes Zeichen im Formatstring ersetzt wird, sollten Sie dieses Zeichen mit einem vorangestellten Backslash escapen. Ist das Zeichen mit dem Backslash bereits eine spezielle Zeichenfolge, müssen Sie diesen Backslash ebenso escapen.

Beispiel #2 Escaping von Zeichen in date()

// gibt etwas ähnliches aus wie 'Wednesday the 15th'
echo date("l \\t\h\e jS");

Es ist möglich, date() und mktime() gleichzeitig zu verwenden, um Datumsangaben in der Zukunft/Vergangenheit zu bestimmen.

Beispiel #3 date() und mktime() Beispiele

<?php
$morgen        
mktime(000date("m")  , date("d")+1date("Y"));
$letztermonat  mktime(000date("m")-1date("d"),   date("Y"));
$naechstesjahr mktime(000date("m"),   date("d"),   date("Y")+1);
?>

Hinweis: Dieses Vorgehen kann zu verlässlicheren Ergebnissen führen, als simples addieren oder subtrahieren der Anzahl von Sekunden in Tagen oder Monaten zu einem Timestamp, da Sommer- und Winterzeit berücksichtigt werden.

Es folgen einige Beispiele zur date() Formatierung. Beachten Sie, dass Sie alle anderen Zeichen escapen sollten, da alle Zeichen, die im Augenblick eine spezielle Bedeutung haben, unerwünschte Resultate liefern. Bei allen weiteren Zeichen kann es durchaus möglich sein, dass diesen in zukünftigen PHP-Versionen eine Bedeutung zukommt. Beim escapen sollten Sie darauf achten einfache Anführungszeichen zu benutzen, damit Zeichenfolgen wie zum Beispiel \n zu keinem Zeilenumbruch führen.

Beispiel #4 date() Formatierungen

<?php
// Angenommen heute ist March 10th, 2001, 5:16:18 pm

$today date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today date("m.d.y");                         // 03.10.01
$today date("j, n, Y");                       // 10, 3, 2001
$today date("Ymd");                           // 20010310
$today date('h-i-s, j-m-y, it is w Day z ');  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today date('\i\t \i\s \t\h\e jS \d\a\y.');   // It is the 10th day.
$today date("D M j G:i:s T Y");               // Sat Mar 10 15:16:08 MST 2001
$today date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:17 m is month
$today date("H:i:s");                         // 17:16:17
?>

Um Datumsangaben in anderen Sprach-/Zeitzonen-Formaten auszugeben, sollten Sie die Funktionen setlocale() und strftime() benutzen.

Siehe auch getlastmod(), gmdate(), mktime(), strftime() und time().



getdate

(PHP 4, PHP 5)

getdateGibt Datums- und Zeitinformationen zurück

Beschreibung

array getdate ([ int $timestamp = time() ] )

Gibt ein assoziatives array mit Datums- und Zeitangaben des angegebenen timestamp zurück. Ist kein Timestamp angegeben, wird die lokal gültige Zeit verwendet.

Parameter-Liste

timestamp

Der optionale Parameter timestamp ist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn kein timestamp übergeben wurde. Er entspricht dann also dem Ergebnis der Funktion time().

Rückgabewerte

Gibt ein assoziatives Array mit Informationen zum timestamp zurück. Die Elemente des zurückgegebenen assoziativen Arrays sind folgende:

Schlüsselelemente des zurückgegebenen assoziativen Arrays
Key Beschreibung Beispiel für Rückgabewerte
"seconds" Numerische Repräsentation der Sekunden zwischen 0 und 59
"minutes" Numerische Repräsentation der Minuten zwischen 0 und 59
"hours" Numerische Repräsentation der Stunden zwischen 0 und 23
"mday" Numerische Repräsentation des Monatstags zwischen 1 und 31
"wday" Numerische Repräsentation des Wochentags zwischen 0 (für Sonntag) und 6 (für Sonnabend)
"mon" Numerische Repräsentation des Monats zwischen 1 und 12
"year" Eine vollständige numerische Repräsentation der Jahreszahl (vierstellig) Beispiele: 1999 oder 2003
"yday" Numerische Repräsentation des Tages des Jahres zwischen 0 und 365
"weekday" Eine vollständige textuelle Repräsentation des Wochentags zwischen Sonntag und Sonnabend
"month" Eine vollständige textuelle Repräsentation des Monatsnamens, wie Januar oder März zwischenJanuar und Dezember
0 Sekunden seit der Unix Epoche, ähnlich den Werten, die von der Funktion time() zurückgegeben und von der Funktion date() verwendet werden. Abhängig vom System, typischerweise ein Wert zwischen -2147483648 und 2147483647.

Beispiele

Beispiel #1 getdate()-Beispiel

<?php
$heute 
getdate();
print_r($heute);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [seconds] => 40
    [minutes] => 58
    [hours]   => 21
    [mday]    => 17
    [wday]    => 2
    [mon]     => 6
    [year]    => 2003
    [yday]    => 167
    [weekday] => Tuesday
    [month]   => June
    [0]       => 1055901520
)

Siehe auch

  • date() - Formatiert ein(e) angegebene(s) Zeit/Datum
  • time() - Gibt den aktuellen Unix-Timestamp/Zeitstempel zurück
  • setlocale() - Setzt Locale Informationen



gettimeofday

(PHP 4, PHP 5)

gettimeofdayErmittelt die aktuelle Zeit

Beschreibung

mixed gettimeofday ([ bool $return_float ] )

Es handelt sich um eine Schnittstelle zum Systemaufruf von gettimeofday(2). Die Funktion gibt ein assoziatives Array zurück, das die Daten enthält, die der Systemaufruf produziert hat.

Parameter-Liste

return_float

Sofern auf TRUE gesetzt, wird eine Fließkommazahl anstelle des Arrays zurückgegeben.

Rückgabewerte

Standardmäßig wird ein Array zurückgegeben. Wenn der Parameter return_float angegeben wurde, ist der Rückgabewert vom Typ float.

Array-Schlüssel:

  • "sec" - Sekunden seit der Unix-Epoche
  • "usec" - Microsekunden
  • "minuteswest" - Minuten westlich von Greenwich
  • "dsttime" - Art der Korrektur der Sommerzeit

Changelog

Version Beschreibung
5.1.0 Der Parameter return_float wurde hinzugefügt.

Beispiele

Beispiel #1 gettimeofday()-Beispiel

<?php
print_r
(gettimeofday());

echo 
gettimeofday(true);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [sec] => 1073504408
    [usec] => 238215
    [minuteswest] => 0
    [dsttime] => 1
)

1073504408.23910



gmdate

(PHP 4, PHP 5)

gmdateFormatiert eine GMT/UTC Zeit-/Datumsangabe

Beschreibung

string gmdate ( string $format [, int $timestamp ] )

Identisch zur Funktion date(), ausgenommen dass die zurückgegebene Zeitangabe Greenwich Mean Time (GMT) entspricht.

Parameter-Liste

format

Das Format des ausgegebenen Datumsstrings. Siehe auch die Formatierungsoptionen der date()-Funktion.

timestamp

Der optionale Parameter timestamp ist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn kein timestamp übergeben wurde. Er entspricht dann also dem Ergebnis der Funktion time().

Rückgabewerte

Gibt einen formatierten Datumsstring zurück. Wenn ein nichtnumerischer Wert für timestamp verwendet wird, wird FALSE zurückgegeben und eine Fehlermeldung vom Typ E_WARNING erzeugt.

Changelog

Version Beschreibung
5.1.0 Der valide Bereich eines Timestamps ist typischerweise von Freitag, den 13. Dezember 1901 20:45:54 GMT bis Dienstag, den 19. Januar 2038 03:14:07 GMT. (Dies sind die Daten, die zum kleinsten und größten mögichen Wert für einen vorzeichenbehafteten 32-Bit Integer korrespondieren.) Vor PHP 5.1.0 war dieser Bereich auf einigen Systemen (z.B. Windows) limitiert auf den Zeitraum 01-01-1970 bis 19-01-2038.
5.1.1 Es gibt nützliche Konstanten für Standard-Datums-/-Zeitformate, die verwendet werden können, um den format -Parameter zu spezifizieren.

Beispiele

Beispiel #1 gmdate()-Beispiel

Wenn das Skript in Finnland (GMT +0200) ausgeführt wird, gibt die erste Zeile "Jan 01 1998 00:00:00" aus, während die zweite Zeile "Dec 31 1997 22:00:00" zurückgibt.

<?php
echo date("M d Y H:i:s"mktime(000111998));
echo 
gmdate("M d Y H:i:s"mktime(000111998));
?>

Siehe auch

  • date() - Formatiert ein(e) angegebene(s) Zeit/Datum
  • mktime() - Gibt den Unix-Timestamp/Zeitstempel für ein Datum zurück
  • gmmktime() - Gibt einen Unix-Timestamp (Zeitstempel) für ein GMT Datum zurück
  • strftime() - Formatiert eine Zeit-/Datumsangabe nach den lokalen Einstellungen



gmmktime

(PHP 4, PHP 5)

gmmktimeGibt einen Unix-Timestamp (Zeitstempel) für ein GMT Datum zurück

Beschreibung

int gmmktime ([ int $hour = gmdate("H") [, int $minute = gmdate("i") [, int $second = gmdate("s") [, int $month = gmdate("n") [, int $day = gmdate("j") [, int $year = gmdate("Y") [, int $is_dst = -1 ]]]]]]] )

Identisch zu mktime() mit der Ausnahme, dass die übergebenen Parameter ein GMT-Datum repräsentieren. gmmktime() greift intern auf mktime() zurück, so dass nur Zeitangaben valide sind, die in der ausgewählten lokalen Zeitzone genutzt werden können.

Wie bei mktime() können Argumente von rechts nach links weggelassen werden, wobei jedes fehlende Argument auf den gegenwärtigen entsprechenden GMT-Wert gesetzt wird.

Parameter-Liste

hour

Die Stunde

minute

Die Minute

second

Die Sekunde

month

Der Monat

day

Der Tag

year

Das Jahr

is_dst

Parameter repräsentieren immer ein GMT-Datum, so dass is_dst keinen Einfluss auf das Ergebnis nimmt.

Rückgabewerte

Gibt einen Unix Timestamp im integer-Format zurück.

Changelog

Version Beschreibung
5.1.0 Mit der Einführung von PHP 5.1.0 wird der Parameter is_dst als veraltet betrachtet. In der Folge sollten stattdessen die neuen Zeitzonenhandling-Features verwendet werden.

Beispiele

Beispiel #1 gmmktime() unter den Beschränkungen von Windows

<?php
gmmktime
(000111970); // gültig in GMT und west, ungültig in east
?>

Siehe auch

  • mktime() - Gibt den Unix-Timestamp/Zeitstempel für ein Datum zurück
  • date() - Formatiert ein(e) angegebene(s) Zeit/Datum
  • time() - Gibt den aktuellen Unix-Timestamp/Zeitstempel zurück



gmstrftime

(PHP 4, PHP 5)

gmstrftimeFormatiert eine Datum-/Zeitangabe in GMT/UTC-Format entsprechend den lokalen Einstellungen

Beschreibung

string gmstrftime ( string $format [, int $timestamp = time() ] )

Bewirkt das gleiche wie strftime() mit dem Unterschied, dass die Zeit nach Greenwich Mean Time (GMT) zurückgegeben wird. Wenn das Skript beispielsweise unter Eastern Standard Time (GMT -0500) läuft, gibt die erste Zeile unten "Dec 31 1998 20:00:00" aus, während die zweite "Jan 01 1999 01:00:00" ausgibt.

Parameter-Liste

format

Siehe die Beschreibung bei strftime().

timestamp

Der optionale Parameter timestamp ist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn kein timestamp übergeben wurde. Er entspricht dann also dem Ergebnis der Funktion time().

Rückgabewerte

Gibt eine entsprechend dem übergebenen Formatstring formatierte Zeichenkette zurück. Die verwendete Zeitangabe wird durch den übergebenen timestamp oder die aktuelle lokale Zeit festgelegt, wenn kein Timestamp angegeben wurde. Monats- und Wochentagsnamen sowie andere sprachabhängige Zeichenketten beziehen sich auf die via setlocale() festgelegte aktuelle Locale-Angabe.

Beispiele

Beispiel #1 gmstrftime()-Beispiel

<?php
setlocale
(LC_TIME'en_US');
echo 
strftime("%b %d %Y %H:%M:%S"mktime(2000123198)) . "\n";
echo 
gmstrftime("%b %d %Y %H:%M:%S"mktime(2000123198)) . "\n";
?>

Siehe auch

  • strftime() - Formatiert eine Zeit-/Datumsangabe nach den lokalen Einstellungen



idate

(PHP 5)

idateFormat a local time/date as integer

Beschreibung

int idate ( string $format [, int $timestamp = time() ] )

Returns a number formatted according to the given format string using the given integer timestamp or the current local time if no timestamp is given. In other words, timestamp is optional and defaults to the value of time().

Unlike the function date(), idate() accepts just one char in the format parameter.

Parameter-Liste

format

The following characters are recognized in the format parameter string
format character Description
B Swatch Beat/Internet Time
d Day of the month
h Hour (12 hour format)
H Hour (24 hour format)
i Minutes
I (uppercase i) returns 1 if DST is activated, 0 otherwise
L (uppercase l) returns 1 for leap year, 0 otherwise
m Month number
s Seconds
t Days in current month
U Seconds since the Unix Epoch - January 1 1970 00:00:00 UTC - this is the same as time()
w Day of the week (0 on Sunday)
W ISO-8601 week number of year, weeks starting on Monday
y Year (1 or 2 digits - check note below)
Y Year (4 digits)
z Day of the year
Z Timezone offset in seconds

timestamp

Der optionale Parameter timestamp ist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn kein timestamp übergeben wurde. Er entspricht dann also dem Ergebnis der Funktion time().

Rückgabewerte

Returns an integer.

As idate() always returns an integer and as they can't start with a "0", idate() may return fewer digits than you would expect. See the example below.

Fehler/Exceptions

Jeder Aufruf der Datums- und Zeitfunktionen generiert eine E_NOTICE-Warnung, wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht, wenn die Systemeinstellung oder die TZ-Umgebungsvariable genutzt wird. Siehe auch date_default_timezone_set()

Changelog

Version Beschreibung
5.1.0

Erzeugt nun E_STRICT- und E_NOTICE-Zeitzonenfehler.

Beispiele

Beispiel #1 idate() example

<?php
$timestamp 
strtotime('1st January 2004'); //1072915200

// this prints the year in a two digit format
// however, as this would start with a "0", it
// only prints "4"
echo idate('y'$timestamp);
?>

Siehe auch

  • date() - Formatiert ein(e) angegebene(s) Zeit/Datum
  • time() - Gibt den aktuellen Unix-Timestamp/Zeitstempel zurück



localtime

(PHP 4, PHP 5)

localtimeErmittelt die lokale Zeit

Beschreibung

array localtime ([ int $timestamp = time() [, bool $is_associative = false ]] )

Die localtime()-Funktion gibt ein Array zurück, welches hinsichtlich seiner Struktur identisch ist mit der des Funktionsaufrufs in C.

Parameter-Liste

timestamp

Der optionale Parameter timestamp ist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn kein timestamp übergeben wurde. Er entspricht dann also dem Ergebnis der Funktion time().

is_associative

Ist der Wert nicht angegeben oder FALSE, ist das zurückgegebene Array ein normales numerisch indiziertes Array. Hat das Argument den Wert TRUE, gibt localtime() ein assoziatives Array zurück, das alle unterschiedlichen Strukturelemente enthält, die vom Aufruf der C-Funktion localtime zurückgegeben werden. Die Namen der unterschiedlichen Schlüssel des assoziativen Arrays lauten:

  • "tm_sec" - Sekunden
  • "tm_min" - Minuten
  • "tm_hour" - Stunde
  • "tm_mday" - Tag des Monats Monate gehen von 0 (Jan) bis 11 (Dez) und Wochentage von 0 (So) bis 6 (Sa).
  • "tm_mon" - Monat des Jahres, beginnt bei 0 für Januar
  • "tm_year" - Jahre seit 1900
  • "tm_wday" - Tag der Woche
  • "tm_yday" - Tag des Jahres
  • "tm_isdst" - für das Datum ist die Sommerzeit zu berücksichtigen

Fehler/Exceptions

Jeder Aufruf der Datums- und Zeitfunktionen generiert eine E_NOTICE-Warnung, wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht, wenn die Systemeinstellung oder die TZ-Umgebungsvariable genutzt wird. Siehe auch date_default_timezone_set()

Changelog

Version Beschreibung
5.1.0

Erzeugt nun E_STRICT- und E_NOTICE-Zeitzonenfehler.

Beispiele

Beispiel #1 localtime()-Beispiel

<?php
$localtime 
localtime();
$localtime_assoc localtime(time(), true);
print_r($localtime);
print_r($localtime_assoc);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [0] => 24
    [1] => 3
    [2] => 19
    [3] => 3
    [4] => 3
    [5] => 105
    [6] => 0
    [7] => 92
    [8] => 1
)

Array
(
    [tm_sec] => 24
    [tm_min] => 3
    [tm_hour] => 19
    [tm_mday] => 3
    [tm_mon] => 3
    [tm_year] => 105
    [tm_wday] => 0
    [tm_yday] => 92
    [tm_isdst] => 1
)



microtime

(PHP 4, PHP 5)

microtimeGibt den aktuellen Unix-Timestamp/Zeitstempel mit Mikrosekunden zurück

Beschreibung

mixed microtime ([ bool $get_as_float ] )

microtime() gibt den aktuellen Unix-Timestamp mit Mikrosekunden zurück. Diese Funktion steht nur auf Systemen zur Verfügung, die den Systemaufruf gettimeofday() unterstützen.

Parameter-Liste

get_as_float

Wird diese Funktion ohne den optionalen Parameter aufgerufen, gibt sie die Zeichenkette "msec sec" zurück. Dabei entspricht sec der aktuellen Zeit, ausgedrückt als Anzahl der Sekunden seit Beginn der UNIX-Epoche (0:00:00 January 1, 1970 GMT), msec stellt den Mikrosekunden-Teil dar. Beide Teile des Strings werden in Sekundeneinheiten zurückgegeben.

Wenn der optionale Parameter get_as_float auf TRUE gesetzt wurde, wird eine Fließkommazahl (float) mit Wertangabe in Sekunden zurückgegeben.

Changelog

Version Beschreibung
5.0.0 Der Parameter get_as_float wurde hinzugefügt.

Beispiele

Beispiel #1 Zeitmessung einer Skriptausführung mit microtime()

<?php
/**
 * Einfache Funktion zum Replizieren des PHP 5-Verhaltens
 */
function microtime_float()
{
    list(
$usec$sec) = explode(" "microtime());
    return ((float)
$usec + (float)$sec);
}

$time_start microtime_float();

// Die Skriptverarbeitung fuer einen bestimmten Zeitraum unterbrechen
usleep(100);

$time_end microtime_float();
$time $time_end $time_start;

echo 
"In $time Sekunden nichts getan\n";
?>

Beispiel #2 Zeitmessung einer Skriptausführung in PHP 5

<?php
$time_start 
microtime(true);

// Die Skriptverarbeitung fuer einen bestimmten Zeitraum unterbrechen
usleep(100);

$time_end microtime(true);
$time $time_end $time_start;

echo 
"In $time Sekunden nichts getan\n";
?>

Siehe auch

  • time() - Gibt den aktuellen Unix-Timestamp/Zeitstempel zurück



mktime

(PHP 4, PHP 5)

mktimeGibt den Unix-Timestamp/Zeitstempel für ein Datum zurück

Beschreibung

int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

Gibt den Unix-Timestamp entsprechend der gegebenen Argumente zurück. Dieser Timestamp ist ein Long Integer, der die Anzahl der Sekunden zwischen der Unix-Epoche (01. Januar 1970 00:00:00 GMT) und dem angegebenen Zeitpunkt enthält.

Einzelne Argumente können von rechts nach links weggelassen werden. Sie werden dann mit den Werten der lokalen Systemzeit bzw. des lokalen Systemdatums ersetzt.

Parameter-Liste

hour

Die Stunde.

minute

Die Minute.

second

Die Anzahl der Sekunden nach der Minute.

month

Der Monat.

day

Der Tag.

year

Die Jahreszahl, die zwei- oder vierstellig angegeben werden kann. Werte von 0 bis 69 werden auf 2000-2069 gemappt, Werte von 70 bis 100 auf 1970-2000. Auf Systemen, auf denen time_t ein 32-Bit Signed Integer ist (das sind die meisten der heutigen Systeme), beginnt der gültige Wertebereich für year bei 1901 und endet bei 2038. Allerdings begrenzen PHP-Versionen vor 5.1.0 den Bereich auf einigen Systemen (z.B. Windows) auf 1970-2038.

is_dst

is_dst kann bei Sommerzeit (DST) auf 1 gesetzt werden, der Wert 0 steht für Winter-/Normalzeit und -1 (Standardwert) heißt, dass unbekannt ist, ob gerade Sommer- oder Winterzeit herrscht. Sofern unbekannt, versucht PHP, dies selbst herauszufinden. Das kann zu unerwarteten (aber dennoch korrekten) Ergebnissen führen. Einige Zeitangaben sind ungültig, wenn die automatische Zeitumstellung auf dem System aktiviert ist, auf dem PHP läuft, oder auf dem der Parameter is_dst den Wert 1 hat. Wenn die Sommerzeit (DST) z.B. um 02:00 Uhr aktiviert wird, sind alle Zeitangaben zwischen 02:00 Uhr und 03:00 Uhr ungültig und mktime() gibt einen undefinierten (meist negativen) Wert zurück. Einige Betriebssyteme (z.B. Solaris 8) nehmen die Zeitumstellung um Mitternacht vor, so dass die Zeitangabe 0:30 als 23:30 des vorherigen Tages interpretiert wird.

Hinweis: Seit PHP 5.1.0 gilt dieses Parameter als veraltet und wird nicht mehr zur Verwendung empfohlen. Verwenden Sie daher die neuen Features zum Handling von Zeitzonen.

Rückgabewerte

mktime() gibt den zu den übergebenen Argumenten passenden Unix-Timestamp zurück. Wenn die Argumente ungültig sind, gibt die Funktion FALSE zurück (vor PHP 5.1 wurde dann -1 zurückgegeben).

Fehler/Exceptions

Jeder Aufruf der Datums- und Zeitfunktionen generiert eine E_NOTICE-Warnung, wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht, wenn die Systemeinstellung oder die TZ-Umgebungsvariable genutzt wird. Siehe auch date_default_timezone_set()

Changelog

Version Beschreibung
5.3.0 mktime() wirft nun eine E_DEPRECATED-Notice, wenn der is_dst verwendet wird.
5.1.0 Der Parameter is_dst wurde als veraltet markiert. Die Funktion gibt nun im Fehlerfall statt -1 FALSE zurück. Die Funktion wurde dahingehend gefixt, dass sie für Jahr, Monat und Tag auch den Wert 0 entgegennimmt.
5.1.0

Erzeugt nun E_STRICT- und E_NOTICE-Zeitzonenfehler.

Beispiele

Beispiel #1 Einfaches mktime()-Beispiel

<?php
// Setzt die zu verwendende Standardzeitzone. Verfügbar seit PHP 5.1
date_default_timezone_set('UTC');

// Gibt aus: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " date("l"mktime(000712000));

// Gibt etwas aus wie: 2006-04-05T01:02:03+00:00
echo date('c'mktime(123452006));
?>

Beispiel #2 mktime()-Beispiel

mktime() ist hilfreich bei Datumsberechnungen und -prüfungen, da automatisch das korrekte Datum für Werte außerhalb der gültigen Bereiche berechnet wird. So wird in den folgenden Beispielen immer die Zeichenkette "Jan-01-1998" ausgegeben.

<?php
echo date("M-d-Y"mktime(00012321997));
echo 
date("M-d-Y"mktime(0001311997));
echo 
date("M-d-Y"mktime(000111998));
echo 
date("M-d-Y"mktime(0001198));
?>

Beispiel #3 Letzter Tag des nächsten Monats

Der letzte Tag eines gegebenen Monats kann als Tag "0" des folgenden Monats ausgedrückt werden, nicht jedoch als Tag "-1". Beide folgenden Beispiele ergeben die Zeichenkette "Letzter Tag im Februar 200 ist der 29."

<?php
$letzterTag 
mktime(000302000);
echo 
strftime("Letzter Tag im Februar 2000 ist der %d."$letzterTag);
$letzterTag mktime(0004, -312000);
echo 
strftime("Letzter Tag im Februar 2000 ist der %d."$letzterTag);
?>

Anmerkungen

Achtung

Vor PHP 5.1.0 wurden negative Timestamps von keiner bekannten Windowsversion oder anderen Betriebssystemen unterstützt. Daher war der Bereich gültiger Jahresangaben auf Werte zwischen 1970 und 2038 beschränkt.

Siehe auch

  • gmmktime() - Gibt einen Unix-Timestamp (Zeitstempel) für ein GMT Datum zurück
  • date() - Formatiert ein(e) angegebene(s) Zeit/Datum
  • time() - Gibt den aktuellen Unix-Timestamp/Zeitstempel zurück



strftime

(PHP 4, PHP 5)

strftime Formatiert eine Zeit-/Datumsangabe nach den lokalen Einstellungen

Beschreibung:

string strftime ( string $format [, int $ Timestamp ] )

Gibt einen String zurück, der den angegebenen Formatierungs-Merkmalen entspricht. Dabei wird der gegebene Timestamp / Zeitstempel oder - falls dieser fehlt - die momentane lokale Zeit benutzt. Der Monats- und Wochentagsname wird entsprechend des per setlocale() eingestellten Wertes gesetzt.

Nachfolgend die im Formatierungsstring gültigen / bekannten Platzhalter:

  • %a - abgekürzter Name des Wochentages, abhängig von der gesetzten Umgebung
  • %A - ausgeschriebener Name des Wochentages, abhängig von der gesetzten Umgebung
  • %b - abgekürzter Name des Monats, abhängig von der gesetzten Umgebung
  • %B - ausgeschriebener Name des Monats, abhängig von der gesetzten Umgebung
  • %c - Wiedergabewerte für Datum und Zeit, abhängig von der gesetzten Umgebung
  • %C - Jahrhundert (Jahr geteilt durch 100, gekürzt auf Integer, Wertebereich 00 bis 99)
  • %d - Tag des Monats als Zahl (Bereich 01 bis 31)
  • %D - so wie %m/%d/%y
  • %e - Tag des Monats als Dezimal-Wert, einstelligen Werten wird ein Leerzeichen voran gestellt (Wertebereich ´ 1´ bis ´31´)
  • %g - wie %G, aber ohne Jahrhundert.
  • %G - Das vierstellige Jahr entsprechend der ISO Wochennummer (siehe %V). Das gleiche Format und der gleiche Wert wie bei %Y. Besonderheit: entspricht die ISO Wochennummer dem vorhergehenden oder folgenden Jahr, wird dieses Jahr verwendet.
  • %h - so wie %b
  • %H - Stunde als Zahl im 24-Stunden-Format (Bereich 00 bis 23)
  • %I - Stunde als Zahl im 12-Stunden-Format (Bereich 01 bis 12)
  • %j - Tag des Jahres als Zahl (Bereich 001 bis 366)
  • %m - Monat als Zahl (Bereich 01 bis 12)
  • %M - Minute als Dezimal-Wert
  • %n - neue Zeile
  • %p - entweder `am' oder `pm' (abhängig von der gesetzten Umgebung) oder die entsprechenden Zeichenketten der gesetzten Umgebung
  • %r - Zeit im Format a.m. oder p.m.
  • %R - Zeit in der 24-Stunden-Formatierung
  • %S - Sekunden als Dezimal-Wert
  • %t - Tabulator
  • %T - aktuelle Zeit, genau wie %H:%M:%S
  • %u - Tag der Woche als Dezimal-Wert [1,7], dabei ist 1 der Montag.
    Warnung

    Sun Solaris scheint mit dem Sonntag als 1 zu starten, obwohl ISO 9889:1999 (der aktuelle C Standard) klar festlegt, dass es der Montag sein sollte.

  • %U - Nummer der Woche des aktuellen Jahres als Dezimal-Wert, beginnend mit dem ersten Sonntag als erstem Tag der ersten Woche.
  • %V - Kalenderwoche (nach ISO 8601:1988) des aktuellen Jahres. Als Dezimal-Zahl mit dem Wertebereich 01 bis 53, wobei die Woche 01 die erste Woche mit mindestens 4 Tagen im aktuellen Jahr ist. Die Woche beginnt montags (nicht sonntags). (Benutzen Sie %G or %g für die Jahreskomponente, die der Wochennummer für den gegebenen Timestamp entspricht.)
  • %w - Wochentag als Dezimal-Wert, Sonntag ist 0
  • %W - Nummer der Woche des aktuellen Jahres, beginnend mit dem ersten Montag als erstem Tag der ersten Woche.
  • %x - bevorzugte Datumswiedergabe (ohne Zeit), abhängig von der gesetzten Umgebung.
  • %X - bevorzugte Zeitwiedergabe (ohne Datum), abhängig von der gesetzten Umgebung.
  • %y - Jahr als 2-stellige-Zahl (Bereich 00 bis 99)
  • %Y - Jahr als 4-stellige-Zahl inklusive des Jahrhunderts
  • %Z - Zeitzone, Name oder eine Abkürzung
  • %% - ein %-Zeichen

Hinweis: Es ist durchaus möglich, dass Ihre C-Bibliothek nicht alle angegebenen Formatierungszeichen erkennt. In diesem Fall werden diese Zeichen von der PHP-Funktion strftime() nicht unterstützt. Zusätzlich unterstützen nicht alle Plattformen negative Werte eines Timestamps, deshalb könnte der Wertebereich eines Datums durch den Beginn der Unix Epoche begrenzt sein. Das bedeutet, dass z.B. %e, %T, %R und %D (und vielleicht noch weitere) und Zeitangaben vor dem Jan 1, 1970 auf Windowssystemen, einigen Linuxdisrtibutionen und einigen anderen Betriebssytemen nicht funktionieren. Für Windowsbetriebssysteme finden Sie eine komplette Übersicht der gültigen / bekannten Platzhalter im Formatierungsstring auf dieser » MSDN Webseite.

Beispiel #1 strftime() locale Beispiel

<?php
setlocale
(LC_TIME"C");
echo 
strftime("%A");
setlocale(LC_TIME"fi_FI");
echo 
strftime(" in Finnish is %A,");
setlocale(LC_TIME"fr_FR");
echo 
strftime(" in French %A and");
setlocale(LC_TIME"de_DE");
echo 
strftime(" in German %A.\n");
?>

Dieses Beispiel funktioniert nur, wenn auf Ihrem System die entsprechenden Locale-Codes installiert sind.

Hinweis: %G und %V basieren auf ISO 8601:1988 Wochennummern und können unerwartete (obwohl korrekte) Ergebnisse liefern, wenn Sie das Nummernsystem nicht gründlich verstehen. Sehen Sie weiter oben bei %V nach und beachten Sie die folgenden Beispiele.

Beispiel #2 ISO 8601:1988 Wochennummer Beispiel

<?php
/*     December 2002 / January 2003
ISOWk  M   Tu  W   Thu F   Sa  Su
----- ----------------------------
51     16  17  18  19  20  21  22
52     23  24  25  26  27  28  29
1      30  31   1   2   3   4   5
2       6   7   8   9  10  11  12
3      13  14  15  16  17  18  19   */

// Ausgabe: 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/28/2002")) . "\n";

// Ausgabe: 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/30/2002")) . "\n";

// Ausgabe: 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";

// Ausgabe: 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";



/*     December 2004 / January 2005
ISOWk  M   Tu  W   Thu F   Sa  Su
----- ----------------------------
51     13  14  15  16  17  18  19
52     20  21  22  23  24  25  26
53     27  28  29  30  31   1   2
1       3   4   5   6   7   8   9
2      10  11  12  13  14  15  16   */

// Ausgabe: 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";

// Ausgabe: 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";

// Ausgabe: 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";

// Ausgabe: 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";

?>

Siehe auch setlocale(), mktime() und die » Open Group Spezifikation von strftime().



strptime

(PHP 5 >= 5.1.0)

strptime Parse a time/date generated with strftime()

Beschreibung

array strptime ( string $date , string $format )

strptime() returns an array with the date parsed, or FALSE on error.

Month and weekday names and other language dependent strings respect the current locale set with setlocale() (LC_TIME).

Parameter-Liste

date (string)

The string to parse (e.g. returned from strftime())

format (string)

The format used in date (e.g. the same as used in strftime()).

For more information about the format options, read the strftime() page.

Rückgabewerte

Returns an array, or FALSE on failure.

The following parameters are returned in the array
parameters Description
"tm_sec" Seconds after the minute (0-61)
"tm_min" Minutes after the hour (0-59)
"tm_hour" Hour since midnight (0-23)
"tm_mday" Day of the month (1-31)
"tm_mon" Months since January (0-11)
"tm_year" Years since 1900
"tm_wday" Days since Sunday (0-6)
"tm_yday" Days since January 1 (0-365)
"unparsed" the date part which was not recognized using the specified format

Beispiele

Beispiel #1 strptime() example

<?php
$format 
'%d/%m/%Y %H:%M:%S';
$strf strftime($format);

echo 
"$strf\n";

print_r(strptime($strf$format));
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

03/10/2004 15:54:19

Array
(
    [tm_sec] => 19
    [tm_min] => 54
    [tm_hour] => 15
    [tm_mday] => 3
    [tm_mon] => 9
    [tm_year] => 104
    [tm_wday] => 0
    [tm_yday] => 276
    [unparsed] =>
)

Anmerkungen

Hinweis: Diese Funktion ist auf Windows-Plattformen nicht implementiert.

Hinweis: "tm_sec" includes any leap seconds (currently upto 2 a year). For more information on leap seconds, see the » Wikipedia article on leap seconds.

Siehe auch

  • strftime() - Formatiert eine Zeit-/Datumsangabe nach den lokalen Einstellungen



strtotime

(PHP 4, PHP 5)

strtotimeWandelt ein beliebiges in englischer Textform angegebenes Datum in einen UNIX-Zeitstempel (Timestamp) um

Beschreibung

int strtotime ( string $time [, int $now ] )

Diese Funktion erwartet einen String mit einem Datum in US-englischem Datumsformat und versucht, dieses Format in einen Unix-Timestamp (die Anzahl der Sekunden seit dem 01. Januar 1970 00:00:00 UTC) zu übersetzen. Die Angabe wird relativ zum im now -Parameter übergebenen Timestamp oder der aktuellen Zeit, sofern now nicht unterstützt wird, ausgewertet.

Die Funktion verwendet, sofern diese verfügbar ist, die TZ-Umgebungsvariable um den Timestamp zu berechnen. Seit PHP 5.1.0 gibt es einfachere Wege, die zu verwendende Zeitzone festzulegen, die mit allen Datums- und Zeitfunktionen verwendet werden soll. Ausführlichere Erklärungen dazu finden Sie auf der date_default_timezone_get()-Manualseite.

Hinweis: Wenn die Jahreszahlenangabe zweistellig erfolgt, werden Werte zwischen 00 und 69 auf die Jahre 2000 bis 2069 gemappt, die Werte 70-99 ergeben die Jahreszahlen 1970-1999. Beachten Sie die folgenden Anmerkungen bezüglich der Unterschiede zwischen 32- und 64-Bit-Systemen (das Datum endet möglicherweise am 2038-01-19 03:14:07).

Parameter-Liste

time

Die zu parsende Zeichenkette. Vor PHP 5.0.0 war die Angabe von Mikrosekunden in einer Zeitangabe nicht erlaubt, seit PHP 5.0.0 ist dies erlaubt, wird aber ignoriert.

now

Der Timestamp, der als Basis zur Berechnung relativer Daten verwendet wird.

Rückgabewerte

Gibt im Erfolgsfall einen Timestamp, andernfalls FALSE zurück. Vor PHP 5.1.0 gab die Funktion -1 im Fehlerfall zurück.

Fehler/Exceptions

Jeder Aufruf der Datums- und Zeitfunktionen generiert eine E_NOTICE-Warnung, wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht, wenn die Systemeinstellung oder die TZ-Umgebungsvariable genutzt wird. Siehe auch date_default_timezone_set()

Changelog

Version Beschreibung
5.1.0 Die Funktion gibt nun statt -1 im Fehlerfall FALSE zurück.
5.1.0

Erzeugt nun E_STRICT- und E_NOTICE-Zeitzonenfehler.

Beispiele

Beispiel #1 Ein strtotime()-Beispiel

<?php
echo strtotime("now"), "\n";
echo 
strtotime("10 September 2000"), "\n";
echo 
strtotime("+1 day"), "\n";
echo 
strtotime("+1 week"), "\n";
echo 
strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo 
strtotime("next Thursday"), "\n";
echo 
strtotime("last Monday"), "\n";
?>

Beispiel #2 Test auf Fehler

<?php
$str 
'Not Good';

// vor PHP 5.1.0 wuerden Sie -1 statt false als Rueckgabewert erhalten
if (($timestamp strtotime($str)) === false) {
    echo 
"Die Zeichenkette ($str) ist nicht parsebar.";
} else {
    echo 
"$str == " date('l dS \o\f F Y h:i:s A'$timestamp);
}
?>

Anmerkungen

Warnung

In PHP 5 bis 5.0.2 werden "now" und andere relative Zeitangaben fälschlicherweise dem Zeitpunkt des Datumswechsels zugeordnet. Dieses Verhalten unterscheidet sich von anderen Versionen, die diese Angaben in die korrekte aktuelle Zeit übersetzen.

Warnung

In PHP-Versionen vor 4.4.0 wird "next" fälschlicherweise als +2 interpretiert. Eine einfache Lösung für dieses Problem ist, explizit +1 zu verwenden.

Hinweis: Der gültige Bereich eines Timestamp liegt typischerweise zwischen Fri, 13 Dec 1901 20:45:54 UTC und Tue, 19 Jan 2038 03:14:07 UTC. (Das sind die Datumsangaben, die dem minimalen und maximalen Wert eines vorzeichenbehafteten 32-bit Integer entsprechen.) Zusätzlich unterstützen nicht alle Plattformen negative Werte eines Timestamps, deshalb könnte der Wertebereich eines Datums durch den Beginn der Unix Epoche begrenzt sein. Das bedeutet, dass z.B. Zeitangaben vor dem 1. Januar 1970 auf Windowssystemen, einigen Linuxdistributionen und einigen anderen Betriebssytemen nicht funktionieren. Die PHP-Versionen 5.1.0 und neuer heben diese Beschränkung auf.

Siehe auch

  • strptime() - Parse a time/date generated with strftime



time

(PHP 4, PHP 5)

timeGibt den aktuellen Unix-Timestamp/Zeitstempel zurück

Beschreibung

int time ( void )

Gibt die seit Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden zurück.

Beispiele

Beispiel #1 time()-Beispiel

<?php
$nextWeek 
time() + (24 60 60);
                   
// 7 Tage; 24 Stunden; 60 Minuten; 60 Sekunden
echo 'Jetzt:          'date('Y-m-d') ."\n";
echo 
'Naechste Woche: 'date('Y-m-d'$nextWeek) ."\n";
// oder strtotime() verwenden:
echo 'Naechste Woche: 'date('Y-m-d'strtotime('+1 week')) ."\n";
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Jetzt:          2005-03-30
Naechste Woche: 2005-04-06
Naechste Woche: 2005-04-06

Anmerkungen

Tipp

Der Timestamp des Beginns der aktuellen Anfrage steht seit PHP 5.1 in der Variablen $_SERVER['REQUEST_TIME'] zur Verfügung.

Siehe auch

  • date() - Formatiert ein(e) angegebene(s) Zeit/Datum
  • microtime() - Gibt den aktuellen Unix-Timestamp/Zeitstempel mit Mikrosekunden zurück



timezone_abbreviations_list

(PHP 5 >= 5.1.0)

timezone_abbreviations_listAlias von DateTimeZone::listAbbreviations

Beschreibung

Diese Funktion ist ein Alias für: DateTimeZone::listAbbreviations



timezone_identifiers_list

(PHP 5 >= 5.1.0)

timezone_identifiers_listAlias von DateTimeZone::listIdentifiers

Beschreibung

Diese Funktion ist ein Alias für: DateTimeZone::listIdentifiers



timezone_location_get

(PHP 5 >= 5.3.0)

timezone_location_getAlias von DateTimeZone::getLocation

Beschreibung

Diese Funktion ist ein Alias für: DateTimeZone::getLocation



timezone_name_from_abbr

(PHP 5 >= 5.1.3)

timezone_name_from_abbrGibt den Namen der Zeitzonenabkürzung zurück

Beschreibung

string timezone_name_from_abbr ( string $abbr [, int $gmtOffset = -1 [, int $isdst = -1 ]] )

Parameter-Liste

abbr

Zeitzonenabkürzung.

gmtOffset

Offset zu GMT in Sekunden. Standardwert ist -1, das bedeutet, dass die erste gefundene Zeitzone, die abbr entspricht, zurückgegeben wird. Andernfalls wird der exakte Offset gesucht und nur, wenn dieser nicht gefunden wird, wird die erste Zeitzone mit einem Offset zurückgegeben.

isdst

Sommerzeit-Indikator. Wenn abbr nicht existiert, wird die Zeitzone ausschließlich anhand von offset und isdst gesucht.

Rückgabewerte

Gibt im Erfolgsfall den Namen der Zeitzone oder im Fehlerfall FALSE zurück.

Beispiele

Beispiel #1 Ein timezone_name_from_abbr()-Beispiel

<?php
echo timezone_name_from_abbr("CET") . "\n";
echo 
timezone_name_from_abbr(""36000) . "\n";
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Europe/Berlin
Europe/Paris

Siehe auch



timezone_name_get

(PHP 5 >= 5.1.0)

timezone_name_getAlias von DateTimeZone::getName

Beschreibung

Diese Funktion ist ein Alias für: DateTimeZone::getName



timezone_offset_get

(PHP 5 >= 5.1.0)

timezone_offset_getAlias von DateTimeZone::getOffset

Beschreibung

Diese Funktion ist ein Alias für: DateTimeZone::getOffset



timezone_open

(PHP 5 >= 5.1.0)

timezone_openGibt ein neues DateTimeZone-Objekt zurück

Beschreibung

DateTimeZone timezone_open ( string $timezone )

Parameter-Liste

timezone

Zeitzonen-Identifier als vollständiger Name (z.B. Europa/Prague) oder Abkürzung (z.B. CET).

Rückgabewerte

Gibt im Erfolgsfall ein DateTimeZone-Objekt, andernfalls FALSE zurück.



timezone_transitions_get

(PHP 5 >= 5.2.0)

timezone_transitions_getAlias von DateTimeZone::getTransitions

Beschreibung

Diese Funktion ist ein Alias für: DateTimeZone::getTransitions



timezone_version_get

(PHP 5 >= 5.3.0)

timezone_version_get Gets the version of the timezonedb

Beschreibung

string timezone_version_get ( void )

Returns the current version of the timezonedb.

Rückgabewerte

Returns a string.

Beispiele

Beispiel #1 Getting the timezonedb version

<?php
echo timezone_version_get();
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

2009.7


Inhaltsverzeichnis





Eingabezeilenspezifische Erweiterungen


Newt


Einführung

This is a PHP language extension for RedHat Newt library, a terminal-based window and widget library for writing applications with user friendly interface. Once this extension is enabled in PHP it will provide the use of Newt widgets, such as windows, buttons, checkboxes, radiobuttons, labels, editboxes, scrolls, textareas, scales, etc. Use of this extension if very similar to the original Newt API of C programming language.



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

This module uses the functions of the RedHat Newt library. You need libnewt version >= 0.51.0.



Installation

Diese » PECL-Extension ist nicht Teil von PHP. Information zur Installation dieser PECL-Extension finden sie im Kapitel Installation von PECL-Extensions. Zusätzliche Informationen wie neue Releases, Downloads, Quelldateien, Maintainerinformation und ein CHANGELOG finden Sie hier: » http://pecl.php.net/package/newt.

Für PHP 4 finden Sie die Quellen dieser PECL-Erweiterung im ext/-Verzeichnis innerhalb der PHP-Quellen oder unter dem PECL-Link wie oben angegeben. In order to use these functions you must compile CGI or CLI PHP with newt support by using the --with-newt[=DIR] configure option.

Hinweis: This extension is not available for Windows platform.
You may need also curses and slang libraries, in order to compile this extension. To specify locations of these libraries, use the following configuration options: --with-curses-dir=/path/to/libcurses --with-slang-dir=/path/to/libslang



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

This extension uses two resource types: "newt component" and "newt grid".

Resource type "newt component" is returned by functions, which create common newt widgets (for example: newt_button())

Resource type "newt grid" is a special link identifier for components, returned by newt grid factory functions (for example: newt_create_grid())




Vordefinierte Konstanten

Inhaltsverzeichnis

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.


Newt form exit reasons

Newt form exit reasons
constant meaning
NEWT_EXIT_HOTKEY hotkey defined by newt_form_add_hot_key() was pressed
NEWT_EXIT_COMPONENT some component has caused form to exit
NEWT_EXIT_FDREADY file descriptor specified in newt_form_watch_fd() is ready to be read or written to
NEWT_EXIT_TIMER time specified in newt_form_set_timer() has elapsed


Newt colorsets

Newt colorsets
constant meaning
NEWT_COLORSET_ROOT  
NEWT_COLORSET_BORDER  
NEWT_COLORSET_WINDOW  
NEWT_COLORSET_SHADOW  
NEWT_COLORSET_TITLE  
NEWT_COLORSET_BUTTON  
NEWT_COLORSET_ACTBUTTON  
NEWT_COLORSET_CHECKBOX  
NEWT_COLORSET_ACTCHECKBOX  
NEWT_COLORSET_ENTRY  
NEWT_COLORSET_LABEL  
NEWT_COLORSET_LISTBOX  
NEWT_COLORSET_ACTLISTBOX  
NEWT_COLORSET_TEXTBOX  
NEWT_COLORSET_ACTTEXTBOX  
NEWT_COLORSET_HELPLINE  
NEWT_COLORSET_ROOTTEXT  
NEWT_COLORSET_ROOTTEXT  
NEWT_COLORSET_EMPTYSCALE  
NEWT_COLORSET_FULLSCALE  
NEWT_COLORSET_DISENTRY  
NEWT_COLORSET_COMPACTBUTTON  
NEWT_COLORSET_ACTSELLISTBOX  
NEWT_COLORSET_SELLISTBOX  


Newt argument flags

Newt argument flags
constant meaning
NEWT_ARG_LAST  
NEWT_ARG_APPEND  


Newt Flags Sense

Newt Flags Sense
constant meaning
NEWT_FLAGS_SET  
NEWT_FLAGS_RESET  
NEWT_FLAGS_TOGGLE  


Newt Components Flags

Newt Components Flags
constant meaning
NEWT_FLAG_RETURNEXIT Exit form, when component is activated
NEWT_FLAG_HIDDEN Component is hidden
NEWT_FLAG_SCROLL Component is scrollable
NEWT_FLAG_DISABLED Component is disabled
NEWT_FLAG_BORDER  
NEWT_FLAG_WRAP Wrap text
NEWT_FLAG_NOF12 Don't exit form on pressing F12
NEWT_FLAG_MULTIPLE  
NEWT_FLAG_SELECTED Component is selected
NEWT_FLAG_CHECKBOX Component is checkbox
NEWT_FLAG_PASSWORD Entry component is password entry
NEWT_FLAG_SHOWCURSOR Show cursor


File Descriptor Flags

File Descriptor Flags
constant meaning
NEWT_FD_READ  
NEWT_FD_WRITE  
NEWT_FD_EXCEPT  


Checkbox Tree Flags

Checkbox Tree Flags
constant meaning
NEWT_CHECKBOXTREE_UNSELECTABLE  
NEWT_CHECKBOXTREE_HIDE_BOX  
NEWT_CHECKBOXTREE_COLLAPSED  
NEWT_CHECKBOXTREE_EXPANDED  
NEWT_CHECKBOXTREE_UNSELECTED  
NEWT_CHECKBOXTREE_SELECTED  


Entry Flags

Entry Flags
constant meaning
NEWT_ENTRY_SCROLL  
NEWT_ENTRY_HIDDEN  
NEWT_ENTRY_RETURNEXIT  
NEWT_ENTRY_DISABLED  


Listbox Flags

Listbox Flags
constant meaning
NEWT_LISTBOX_RETURNEXIT  


Textbox Flags

Textbox Flags
constant meaning
NEWT_TEXTBOX_WRAP Wrap text in the textbox
NEWT_TEXTBOX_SCROLL Scroll text in the textbox


Form Flags

Form Flags
constant meaning
NEWT_FORM_NOF12 Don't exit form on F12 press


Newt Keys

Newt Keys
constant meaning
NEWT_KEY_TAB  
NEWT_KEY_ENTER  
NEWT_KEY_SUSPEND  
NEWT_KEY_ESCAPE  
NEWT_KEY_RETURN  
NEWT_KEY_EXTRA_BASE  
NEWT_KEY_UP  
NEWT_KEY_DOWN  
NEWT_KEY_LEFT  
NEWT_KEY_RIGHT  
NEWT_KEY_BKSPC  
NEWT_KEY_DELETE  
NEWT_KEY_HOME  
NEWT_KEY_END  
NEWT_KEY_UNTAB  
NEWT_KEY_PGUP  
NEWT_KEY_PGDN  
NEWT_KEY_INSERT  
NEWT_KEY_F1  
NEWT_KEY_F2  
NEWT_KEY_F3  
NEWT_KEY_F4  
NEWT_KEY_F5  
NEWT_KEY_F6  
NEWT_KEY_F7  
NEWT_KEY_F8  
NEWT_KEY_F9  
NEWT_KEY_F10  
NEWT_KEY_F11  
NEWT_KEY_F12  
NEWT_KEY_RESIZE  


Newt Anchors

Newt Anchors
constant meaning
NEWT_ANCHOR_LEFT  
NEWT_ANCHOR_RIGHT  
NEWT_ANCHOR_TOP  
NEWT_ANCHOR_BOTTOM  


Grid Flags

Grid Flags
constant meaning
NEWT_GRID_FLAG_GROWX  
NEWT_GRID_FLAG_GROWY  
NEWT_GRID_EMPTY  
NEWT_GRID_COMPONENT  
NEWT_GRID_SUBGRID  



Beispiele

Inhaltsverzeichnis


Basic usage

This example is a PHP port of RedHat 'setup' utility dialog, executed in text mode.

Beispiel #1 Newt Usage Example

<?php
newt_init 
();
newt_cls ();

newt_draw_root_text (00"Test Mode Setup Utility 1.12");
newt_push_help_line (null);
newt_draw_root_text (-300"(c) 1999-2002 RedHat, Inc");

newt_get_screen_size ($rows$cols);

newt_open_window ($rows/2-17$cols/2-103417"Choose a Tool");

$form newt_form ();

$list newt_listbox (3210);

foreach (array (
    
"Authentication configuration",
    
"Firewall configuration",
    
"Mouse configuration",
    
"Network configuration",
    
"Printer configuration",
    
"System services") as $l_item)
{
    
newt_listbox_add_entry ($list$l_item$l_item);
}

$b1 newt_button (512"Run Tool");
$b2 newt_button (2112"Quit");

newt_form_add_component ($form$list);
newt_form_add_components ($form, array($b1$b2));

newt_refresh ();
newt_run_form ($form);

newt_pop_window ();
newt_pop_help_line ();
newt_finished ();
newt_form_destroy ($form);
?>



Newt Funktionen


newt_bell

(PECL newt >= 0.1)

newt_bellSend a beep to the terminal

Beschreibung

void newt_bell ( void )

This function sends a beep to the terminal.

Hinweis: Depending on the terminal's settings, this beep may or may not be audible.

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_button_bar

(PECL newt >= 0.1)

newt_button_barThis function returns a grid containing the buttons created.

Beschreibung

resource newt_button_bar ( array &$buttons )

This function returns a grid containing the buttons created.

Parameter-Liste

buttons

Rückgabewerte

Returns grid containing the buttons created.



newt_button

(PECL newt >= 0.1)

newt_buttonCreate a new button

Beschreibung

resource newt_button ( int $left , int $top , string $text )

Creates a new button.

Parameter-Liste

left

X-coordinate of the button.

top

Y-coordinate of the button.

text

The text which should be displayed in the button.

Rückgabewerte

Returns a resource link to the created button component, or FALSE on error.

Beispiele

Beispiel #1 A newt_button() example

<?php

$form 
newt_form();

$ok_button newt_button(512"Run Tool");
    
newt_form_add_component($form$ok_button);

?>

Siehe auch



newt_centered_window

(PECL newt >= 0.1)

newt_centered_windowOpen a centered window of the specified size

Beschreibung

int newt_centered_window ( int $width , int $height [, string $title ] )

Open a centered window of the specified size.

Parameter-Liste

width

Window width

height

Window height

title

Window title

Rückgabewerte

Undefined value.

Siehe auch



newt_checkbox_get_value

(PECL newt >= 0.1)

newt_checkbox_get_valueRetreives value of checkox resource

Beschreibung

string newt_checkbox_get_value ( resource $checkbox )

This function returns the character in the sequence which indicates the current value of the checkbox.

Parameter-Liste

checkbox

Rückgabewerte

Returns character indicating the value of the checkbox.



newt_checkbox_set_flags

(PECL newt >= 0.1)

newt_checkbox_set_flagsConfigures checkbox resource

Beschreibung

void newt_checkbox_set_flags ( resource $checkbox , int $flags , int $sense )

This function allows to set various flags on checkbox resource.

Parameter-Liste

checkbox

flags

sense

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_checkbox_set_value

(PECL newt >= 0.1)

newt_checkbox_set_valueSets the value of the checkbox

Beschreibung

void newt_checkbox_set_value ( resource $checkbox , string $value )

This function allows to set the current value of the checkbox resource.

Parameter-Liste

checkbox

value

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_checkbox_tree_add_item

(PECL newt >= 0.1)

newt_checkbox_tree_add_itemAdds new item to the checkbox tree

Beschreibung

void newt_checkbox_tree_add_item ( resource $checkboxtree , string $text , mixed $data , int $flags , int $index [, int $... ] )

This function allows to add new item to the checkbox tree.

Parameter-Liste

checkboxtree

text

data

flags

index

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_checkbox_tree_find_item

(PECL newt >= 0.1)

newt_checkbox_tree_find_itemFinds an item in the checkbox tree

Beschreibung

array newt_checkbox_tree_find_item ( resource $checkboxtree , mixed $data )

Finds an item in the checkbox tree by item's data.

Parameter-Liste

checkboxtree

data

Rückgabewerte

Returns checkbox tree item resource, or NULL if it wasn't found.



newt_checkbox_tree_get_current

(PECL newt >= 0.1)

newt_checkbox_tree_get_currentReturns checkbox tree selected item

Beschreibung

mixed newt_checkbox_tree_get_current ( resource $checkboxtree )

This method returns checkbox tree selected tem.

Parameter-Liste

checkboxtree

Rückgabewerte

Returns current (selected) checkbox tree item.



newt_checkbox_tree_get_entry_value

(PECL newt >= 0.1)

newt_checkbox_tree_get_entry_value

Beschreibung

string newt_checkbox_tree_get_entry_value ( resource $checkboxtree , mixed $data )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

checkboxtree

data

Rückgabewerte



newt_checkbox_tree_get_multi_selection

(PECL newt >= 0.1)

newt_checkbox_tree_get_multi_selection

Beschreibung

array newt_checkbox_tree_get_multi_selection ( resource $checkboxtree , string $seqnum )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

checkboxtree

seqnum

Rückgabewerte



newt_checkbox_tree_get_selection

(PECL newt >= 0.1)

newt_checkbox_tree_get_selection

Beschreibung

array newt_checkbox_tree_get_selection ( resource $checkboxtree )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

checkboxtree

Rückgabewerte



newt_checkbox_tree_multi

(PECL newt >= 0.1)

newt_checkbox_tree_multi

Beschreibung

resource newt_checkbox_tree_multi ( int $left , int $top , int $height , string $seq [, int $flags ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

height

seq

flags

Rückgabewerte



newt_checkbox_tree_set_current

(PECL newt >= 0.1)

newt_checkbox_tree_set_current

Beschreibung

void newt_checkbox_tree_set_current ( resource $checkboxtree , mixed $data )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

checkboxtree

data

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_checkbox_tree_set_entry_value

(PECL newt >= 0.1)

newt_checkbox_tree_set_entry_value

Beschreibung

void newt_checkbox_tree_set_entry_value ( resource $checkboxtree , mixed $data , string $value )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

checkboxtree

data

value

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_checkbox_tree_set_entry

(PECL newt >= 0.1)

newt_checkbox_tree_set_entry

Beschreibung

void newt_checkbox_tree_set_entry ( resource $checkboxtree , mixed $data , string $text )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

checkboxtree

data

text

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_checkbox_tree_set_width

(PECL newt >= 0.1)

newt_checkbox_tree_set_width

Beschreibung

void newt_checkbox_tree_set_width ( resource $checkbox_tree , int $width )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

checkbox_tree

width

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_checkbox_tree

(PECL newt >= 0.1)

newt_checkbox_tree

Beschreibung

resource newt_checkbox_tree ( int $left , int $top , int $height [, int $flags ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

height

flags

Rückgabewerte



newt_checkbox

(PECL newt >= 0.1)

newt_checkbox

Beschreibung

resource newt_checkbox ( int $left , int $top , string $text , string $def_value [, string $seq ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

text

def_value

seq

Rückgabewerte



newt_clear_key_buffer

(PECL newt >= 0.1)

newt_clear_key_bufferDiscards the contents of the terminal's input buffer without waiting for additional input

Beschreibung

void newt_clear_key_buffer ( void )

Discards the contents of the terminal's input buffer without waiting for additional input.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch



newt_cls

(PECL newt >= 0.1)

newt_cls

Beschreibung

void newt_cls ( void )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_compact_button

(PECL newt >= 0.1)

newt_compact_button

Beschreibung

resource newt_compact_button ( int $left , int $top , string $text )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

text

Rückgabewerte



newt_component_add_callback

(PECL newt >= 0.1)

newt_component_add_callback

Beschreibung

void newt_component_add_callback ( resource $component , mixed $func_name , mixed $data )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

component

func_name

data

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_component_takes_focus

(PECL newt >= 0.1)

newt_component_takes_focus

Beschreibung

void newt_component_takes_focus ( resource $component , bool $takes_focus )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

component

takes_focus

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_create_grid

(PECL newt >= 0.1)

newt_create_grid

Beschreibung

resource newt_create_grid ( int $cols , int $rows )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

cols

rows

Rückgabewerte



newt_cursor_off

(PECL newt >= 0.1)

newt_cursor_off

Beschreibung

void newt_cursor_off ( void )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_cursor_on

(PECL newt >= 0.1)

newt_cursor_on

Beschreibung

void newt_cursor_on ( void )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_delay

(PECL newt >= 0.1)

newt_delay

Beschreibung

void newt_delay ( int $microseconds )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

microseconds

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_draw_form

(PECL newt >= 0.1)

newt_draw_form

Beschreibung

void newt_draw_form ( resource $form )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

form

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_draw_root_text

(PECL newt >= 0.1)

newt_draw_root_textDisplays the string text at the position indicated

Beschreibung

void newt_draw_root_text ( int $left , int $top , string $text )

Displays the string text at the position indicated.

Parameter-Liste

left

Column number

Hinweis: If left is negative, the position is measured from the opposite side of the screen.

top

Line number

Hinweis: If top is negative, the position is measured from the opposite side of the screen.

text

Text to display.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 A newt_draw_root_text() example

This code demonstrates drawing of titles in the both corners of the screen.

<?php
 newt_init
();
 
newt_cls();

 
newt_draw_root_text (20"Some root text");
 
newt_refresh();
 
sleep(1);

 
newt_draw_root_text (-300"Root text in the other corner");
 
newt_refresh();
 
sleep(1);

 
newt_finished();
?>

Siehe auch



newt_entry_get_value

(PECL newt >= 0.1)

newt_entry_get_value

Beschreibung

string newt_entry_get_value ( resource $entry )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

entry

Rückgabewerte



newt_entry_set_filter

(PECL newt >= 0.1)

newt_entry_set_filter

Beschreibung

void newt_entry_set_filter ( resource $entry , callback $filter , mixed $data )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

entry

filter

data

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_entry_set_flags

(PECL newt >= 0.1)

newt_entry_set_flags

Beschreibung

void newt_entry_set_flags ( resource $entry , int $flags , int $sense )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

entry

flags

sense

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_entry_set

(PECL newt >= 0.1)

newt_entry_set

Beschreibung

void newt_entry_set ( resource $entry , string $value [, bool $cursor_at_end ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

entry

value

cursor_at_end

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_entry

(PECL newt >= 0.1)

newt_entry

Beschreibung

resource newt_entry ( int $left , int $top , int $width [, string $init_value [, int $flags ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

width

init_value

flags

Rückgabewerte



newt_finished

(PECL newt >= 0.1)

newt_finishedUninitializes newt interface

Beschreibung

int newt_finished ( void )

Uninitializes newt interface. This function be called, when program is ready to exit.

Rückgabewerte

Returns 1 on success, 0 on failure.

Siehe auch



newt_form_add_component

(PECL newt >= 0.1)

newt_form_add_componentAdds a single component to the form

Beschreibung

void newt_form_add_component ( resource $form , resource $component )

Adds a single component to the form .

Parameter-Liste

form

Form to which component will be added

component

Component to add to the form

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 A newt_form_add_component() example

<?php
$form 
newt_form();

$options = array("Authentication configuration""Firewall configuration",
"Mouse configuration""Network configuration""Printer configuration",
"System services");

$list newt_listbox(3210);

foreach (
$options as $l_item) {
    
newt_listbox_add_entry($list$l_item$l_item);
}

newt_form_add_component($form$list);
?>

Siehe auch



newt_form_add_components

(PECL newt >= 0.1)

newt_form_add_componentsAdd several components to the form

Beschreibung

void newt_form_add_components ( resource $form , array $components )

Adds several components to the form .

Parameter-Liste

form

Form to which components will be added

components

Array of components to add to the form

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 A newt_form_add_components() example

<?php
$form 
newt_form();

$b1 newt_button(512"Run Tool");
$b2 newt_button(2112"Quit");

newt_form_add_components($form, array($b1$b2));
?>

Siehe auch



newt_form_add_hot_key

(PECL newt >= 0.1)

newt_form_add_hot_key

Beschreibung

void newt_form_add_hot_key ( resource $form , int $key )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

form

key

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_form_destroy

(PECL newt >= 0.1)

newt_form_destroyDestroys a form

Beschreibung

void newt_form_destroy ( resource $form )

This function frees the memory resources used by the form and all of the components which have been added to the form (including those components which are on subforms). Once a form has been destroyed, none of the form's components can be used.

Parameter-Liste

form

Form component, which is going to be destroyed

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch



newt_form_get_current

(PECL newt >= 0.1)

newt_form_get_current

Beschreibung

resource newt_form_get_current ( resource $form )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

form

Rückgabewerte



newt_form_run

(PECL newt >= 0.1)

newt_form_runRuns a form

Beschreibung

void newt_form_run ( resource $form , array &$exit_struct )

This function runs the form passed to it.

Parameter-Liste

form

Form component

exit_struct

Array, used for returning information after running the form component. Keys and values are described in the following table:

Form Exit Structure
Index Key Value Type Description
reason integer The reason, why the form has been exited. Possible values are defined here.
watch resource Resource link, specified in newt_form_watch_fd()
key integer Hotkey
component resource Component, which caused the form to exit

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch



newt_form_set_background

(PECL newt >= 0.1)

newt_form_set_background

Beschreibung

void newt_form_set_background ( resource $from , int $background )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

from

background

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_form_set_height

(PECL newt >= 0.1)

newt_form_set_height

Beschreibung

void newt_form_set_height ( resource $form , int $height )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

form

height

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_form_set_size

(PECL newt >= 0.1)

newt_form_set_size

Beschreibung

void newt_form_set_size ( resource $form )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

form

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_form_set_timer

(PECL newt >= 0.1)

newt_form_set_timer

Beschreibung

void newt_form_set_timer ( resource $form , int $milliseconds )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

form

milliseconds

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_form_set_width

(PECL newt >= 0.1)

newt_form_set_width

Beschreibung

void newt_form_set_width ( resource $form , int $width )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

form

width

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_form_watch_fd

(PECL newt >= 0.1)

newt_form_watch_fd

Beschreibung

void newt_form_watch_fd ( resource $form , resource $stream [, int $flags ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

form

stream

flags

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_form

(PECL newt >= 0.1)

newt_formCreate a form

Beschreibung

resource newt_form ([ resource $vert_bar [, string $help [, int $flags ]]] )

Create a new form.

Parameter-Liste

vert_bar

Vertical scrollbar which should be associated with the form

help

Help text string

flags

Various flags

Rückgabewerte

Returns a resource link to the created form component, or FALSE on error.

Beispiele

Beispiel #1 A newt_form() example

Displays a single button "Quit", which closes the application once it's pressed.

<?php
newt_init
();
newt_cls();

$myform newt_form();
$button newt_button (512"Quit");

newt_form_add_component ($myform$button);
newt_refresh ();
newt_run_form ($myform);

newt_finished ();
newt_form_destroy ($myform);
?>

Siehe auch



newt_get_screen_size

(PECL newt >= 0.1)

newt_get_screen_sizeFills in the passed references with the current size of the terminal

Beschreibung

void newt_get_screen_size ( int &$cols , int &$rows )

Fills in the passed references with the current size of the terminal.

Parameter-Liste

cols

Number of columns in the terminal

rows

Number of rows in the terminal

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 A newt_get_screen_size() example

This code prints out the screen size of your terminal.

<?php
 newt_init
();
 
newt_get_screen_size (&$cols, &$rows);
 
newt_finished();

 print 
"Your terminal size is: {$cols}x{$rows}\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Your terminal size is: 138x47



newt_grid_add_components_to_form

(PECL newt >= 0.1)

newt_grid_add_components_to_form

Beschreibung

void newt_grid_add_components_to_form ( resource $grid , resource $form , bool $recurse )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

grid

form

recurse

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_grid_basic_window

(PECL newt >= 0.1)

newt_grid_basic_window

Beschreibung

resource newt_grid_basic_window ( resource $text , resource $middle , resource $buttons )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

text

middle

buttons

Rückgabewerte



newt_grid_free

(PECL newt >= 0.1)

newt_grid_free

Beschreibung

void newt_grid_free ( resource $grid , bool $recurse )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

grid

recurse

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_grid_get_size

(PECL newt >= 0.1)

newt_grid_get_size

Beschreibung

void newt_grid_get_size ( resouce $grid , int &$width , int &$height )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

grid

width

height

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_grid_h_close_stacked

(PECL newt >= 0.1)

newt_grid_h_close_stacked

Beschreibung

resource newt_grid_h_close_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

element1_type

element1

Rückgabewerte



newt_grid_h_stacked

(PECL newt >= 0.1)

newt_grid_h_stacked

Beschreibung

resource newt_grid_h_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

element1_type

element1

Rückgabewerte



newt_grid_place

(PECL newt >= 0.1)

newt_grid_place

Beschreibung

void newt_grid_place ( resource $grid , int $left , int $top )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

grid

left

top

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_grid_set_field

(PECL newt >= 0.1)

newt_grid_set_field

Beschreibung

void newt_grid_set_field ( resource $grid , int $col , int $row , int $type , resource $val , int $pad_left , int $pad_top , int $pad_right , int $pad_bottom , int $anchor [, int $flags ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

grid

col

row

type

val

pad_left

pad_top

pad_right

pad_bottom

anchor

flags

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_grid_simple_window

(PECL newt >= 0.1)

newt_grid_simple_window

Beschreibung

resource newt_grid_simple_window ( resource $text , resource $middle , resource $buttons )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

text

middle

buttons

Rückgabewerte



newt_grid_v_close_stacked

(PECL newt >= 0.1)

newt_grid_v_close_stacked

Beschreibung

resource newt_grid_v_close_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

element1_type

element1

Rückgabewerte



newt_grid_v_stacked

(PECL newt >= 0.1)

newt_grid_v_stacked

Beschreibung

resource newt_grid_v_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

element1_type

element1

Rückgabewerte



newt_grid_wrapped_window_at

(PECL newt >= 0.1)

newt_grid_wrapped_window_at

Beschreibung

void newt_grid_wrapped_window_at ( resource $grid , string $title , int $left , int $top )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

grid

title

left

top

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_grid_wrapped_window

(PECL newt >= 0.1)

newt_grid_wrapped_window

Beschreibung

void newt_grid_wrapped_window ( resource $grid , string $title )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

grid

title

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_init

(PECL newt >= 0.1)

newt_initInitialize newt

Beschreibung

int newt_init ( void )

Initializes the newt interface. This function must be called before any other newt function.

Rückgabewerte

Returns 1 on success, 0 on failure.

Siehe auch



newt_label_set_text

(PECL newt >= 0.1)

newt_label_set_text

Beschreibung

void newt_label_set_text ( resource $label , string $text )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

label

text

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_label

(PECL newt >= 0.1)

newt_label

Beschreibung

resource newt_label ( int $left , int $top , string $text )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

text

Rückgabewerte



newt_listbox_append_entry

(PECL newt >= 0.1)

newt_listbox_append_entry

Beschreibung

void newt_listbox_append_entry ( resource $listbox , string $text , mixed $data )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

text

data

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_clear_selection

(PECL newt >= 0.1)

newt_listbox_clear_selection

Beschreibung

void newt_listbox_clear_selection ( resource $listbox )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_clear

(PECL newt >= 0.1)

newt_listbox_clear

Beschreibung

void newt_listbox_clear ( resource $listobx )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listobx

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_delete_entry

(PECL newt >= 0.1)

newt_listbox_delete_entry

Beschreibung

void newt_listbox_delete_entry ( resource $listbox , mixed $key )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

key

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_get_current

(PECL newt >= 0.1)

newt_listbox_get_current

Beschreibung

string newt_listbox_get_current ( resource $listbox )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

Rückgabewerte



newt_listbox_get_selection

(PECL newt >= 0.1)

newt_listbox_get_selection

Beschreibung

array newt_listbox_get_selection ( resource $listbox )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

Rückgabewerte



newt_listbox_insert_entry

(PECL newt >= 0.1)

newt_listbox_insert_entry

Beschreibung

void newt_listbox_insert_entry ( resource $listbox , string $text , mixed $data , mixed $key )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

text

data

key

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_item_count

(PECL newt >= 0.1)

newt_listbox_item_count

Beschreibung

int newt_listbox_item_count ( resource $listbox )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

Rückgabewerte



newt_listbox_select_item

(PECL newt >= 0.1)

newt_listbox_select_item

Beschreibung

void newt_listbox_select_item ( resource $listbox , mixed $key , int $sense )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

key

sense

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_set_current_by_key

(PECL newt >= 0.1)

newt_listbox_set_current_by_key

Beschreibung

void newt_listbox_set_current_by_key ( resource $listbox , mixed $key )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

key

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_set_current

(PECL newt >= 0.1)

newt_listbox_set_current

Beschreibung

void newt_listbox_set_current ( resource $listbox , int $num )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

num

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_set_data

(PECL newt >= 0.1)

newt_listbox_set_data

Beschreibung

void newt_listbox_set_data ( resource $listbox , int $num , mixed $data )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

num

data

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_set_entry

(PECL newt >= 0.1)

newt_listbox_set_entry

Beschreibung

void newt_listbox_set_entry ( resource $listbox , int $num , string $text )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

num

text

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox_set_width

(PECL newt >= 0.1)

newt_listbox_set_width

Beschreibung

void newt_listbox_set_width ( resource $listbox , int $width )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

listbox

width

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listbox

(PECL newt >= 0.1)

newt_listbox

Beschreibung

resource newt_listbox ( int $left , int $top , int $height [, int $flags ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

height

flags

Rückgabewerte



newt_listitem_get_data

(PECL newt >= 0.1)

newt_listitem_get_data

Beschreibung

mixed newt_listitem_get_data ( resource $item )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

item

Rückgabewerte



newt_listitem_set

(PECL newt >= 0.1)

newt_listitem_set

Beschreibung

void newt_listitem_set ( resource $item , string $text )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

item

text

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_listitem

(PECL newt >= 0.1)

newt_listitem

Beschreibung

resource newt_listitem ( int $left , int $top , string $text , bool $is_default , resouce $prev_item , mixed $data [, int $flags ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

text

is_default

prev_item

data

flags

Rückgabewerte



newt_open_window

(PECL newt >= 0.1)

newt_open_windowOpen a window of the specified size and position

Beschreibung

int newt_open_window ( int $left , int $top , int $width , int $height [, string $title ] )

Open a window of the specified size and position.

Parameter-Liste

left

Location of the upper left-hand corner of the window (column number)

top

Location of the upper left-hand corner of the window (row number)

width

Window width

height

Window height

title

Window title

Rückgabewerte

Returns 1 on success, 0 on failure.

Siehe auch



newt_pop_help_line

(PECL newt >= 0.1)

newt_pop_help_lineReplaces the current help line with the one from the stack

Beschreibung

void newt_pop_help_line ( void )

Replaces the current help line with the one from the stack.

Hinweis: It's important not to call to newt_pop_help_line() more than newt_push_help_line().

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch



newt_pop_window

(PECL newt >= 0.1)

newt_pop_windowRemoves the top window from the display

Beschreibung

void newt_pop_window ( void )

Removes the top window from the display, and redraws the display areas which the window overwrote.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch



newt_push_help_line

(PECL newt >= 0.1)

newt_push_help_lineSaves the current help line on a stack, and displays the new line

Beschreibung

void newt_push_help_line ([ string $text ] )

Saves the current help line on a stack, and displays the new line.

Parameter-Liste

text

New help text message

Hinweis: If not specified, the help line is cleared.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch



newt_radio_get_current

(PECL newt >= 0.1)

newt_radio_get_current

Beschreibung

resource newt_radio_get_current ( resource $set_member )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

set_member

Rückgabewerte



newt_radiobutton

(PECL newt >= 0.1)

newt_radiobutton

Beschreibung

resource newt_radiobutton ( int $left , int $top , string $text , bool $is_default [, resource $prev_button ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

text

is_default

prev_button

Rückgabewerte



newt_redraw_help_line

(PECL newt >= 0.1)

newt_redraw_help_line

Beschreibung

void newt_redraw_help_line ( void )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_reflow_text

(PECL newt >= 0.1)

newt_reflow_text

Beschreibung

string newt_reflow_text ( string $text , int $width , int $flex_down , int $flex_up , int &$actual_width , int &$actual_height )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

text

width

flex_down

flex_up

actual_width

actual_height

Rückgabewerte



newt_refresh

(PECL newt >= 0.1)

newt_refreshUpdates modified portions of the screen

Beschreibung

void newt_refresh ( void )

To increase performance, newt only updates the display when it needs to, not when the program tells it to write to the terminal. Applications can force newt to immediately update modified portions of the screen by calling this function.

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_resize_screen

(PECL newt >= 0.1)

newt_resize_screen

Beschreibung

void newt_resize_screen ([ bool $redraw ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

redraw

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_resume

(PECL newt >= 0.1)

newt_resumeResume using the newt interface after calling newt_suspend()

Beschreibung

void newt_resume ( void )

Resume using the newt interface after calling newt_suspend().

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch

  • newt_suspend() - Tells newt to return the terminal to its initial state



newt_run_form

(PECL newt >= 0.1)

newt_run_formRuns a form

Beschreibung

resource newt_run_form ( resource $form )

This function runs the form passed to it.

Parameter-Liste

form

Form component

Rückgabewerte

The component which caused the form to stop running.

Hinweis: Notice that this function doesn't fit in with newt's normal naming convention. It is an older interface which will not work for all forms. It was left in newt only for legacy applications. It is a simpler interface than the new newt_form_run() though, and is still used quite often as a result. When an application is done with a form, it destroys the form and all of the components the form contains.

Siehe auch



newt_scale_set

(PECL newt >= 0.1)

newt_scale_set

Beschreibung

void newt_scale_set ( resource $scale , int $amount )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

scale

amount

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_scale

(PECL newt >= 0.1)

newt_scale

Beschreibung

resource newt_scale ( int $left , int $top , int $width , int $full_value )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

width

full_value

Rückgabewerte



newt_scrollbar_set

(PECL newt >= 0.1)

newt_scrollbar_set

Beschreibung

void newt_scrollbar_set ( resource $scrollbar , int $where , int $total )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

scrollbar

where

total

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_set_help_callback

(PECL newt >= 0.1)

newt_set_help_callback

Beschreibung

void newt_set_help_callback ( mixed $function )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

function

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_set_suspend_callback

(PECL newt >= 0.1)

newt_set_suspend_callbackSet a callback function which gets invoked when user presses the suspend key

Beschreibung

void newt_set_suspend_callback ( callback $function , mixed $data )

Set a callback function which gets invoked when user presses the suspend key (normally ^Z). If no suspend callback is registered, the suspend keystroke is ignored.

Parameter-Liste

function

A callback function, which accepts one argument: data

data

This data is been passed to the callback function

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch

  • newt_suspend() - Tells newt to return the terminal to its initial state
  • newt_resume() - Resume using the newt interface after calling newt_suspend



newt_suspend

(PECL newt >= 0.1)

newt_suspendTells newt to return the terminal to its initial state

Beschreibung

void newt_suspend ( void )

Tells newt to return the terminal to its initial state. Once this is done, the application can suspend itself (by sending itself a SIGTSTP, fork a child program, or do whatever else it likes).

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch

  • newt_resume() - Resume using the newt interface after calling newt_suspend



newt_textbox_get_num_lines

(PECL newt >= 0.1)

newt_textbox_get_num_lines

Beschreibung

int newt_textbox_get_num_lines ( resource $textbox )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

textbox

Rückgabewerte



newt_textbox_reflowed

(PECL newt >= 0.1)

newt_textbox_reflowed

Beschreibung

resource newt_textbox_reflowed ( int $left , int $top , char $*text , int $width , int $flex_down , int $flex_up [, int $flags ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

*text

width

flex_down

flex_up

flags

Rückgabewerte



newt_textbox_set_height

(PECL newt >= 0.1)

newt_textbox_set_height

Beschreibung

void newt_textbox_set_height ( resource $textbox , int $height )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

textbox

height

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_textbox_set_text

(PECL newt >= 0.1)

newt_textbox_set_text

Beschreibung

void newt_textbox_set_text ( resource $textbox , string $text )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

textbox

text

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_textbox

(PECL newt >= 0.1)

newt_textbox

Beschreibung

resource newt_textbox ( int $left , int $top , int $width , int $height [, int $flags ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

width

height

flags

Rückgabewerte



newt_vertical_scrollbar

(PECL newt >= 0.1)

newt_vertical_scrollbar

Beschreibung

resource newt_vertical_scrollbar ( int $left , int $top , int $height [, int $normal_colorset [, int $thumb_colorset ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

left

top

height

normal_colorset

thumb_colorset

Rückgabewerte



newt_wait_for_key

(PECL newt >= 0.1)

newt_wait_for_keyDoesn't return until a key has been pressed

Beschreibung

void newt_wait_for_key ( void )

This function doesn't return until a key has been pressed. The keystroke is then ignored. If a key is already in the terminal's buffer, this function discards a keystroke and returns immediately.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Siehe auch

  • newt_clear_key_buffer() - Discards the contents of the terminal's input buffer without waiting for additional input



newt_win_choice

(PECL newt >= 0.1)

newt_win_choice

Beschreibung

int newt_win_choice ( string $title , string $button1_text , string $button2_text , string $format [, mixed $args [, mixed $... ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

title

button1_text

button2_text

format

args

Rückgabewerte



newt_win_entries

(PECL newt >= 0.1)

newt_win_entries

Beschreibung

int newt_win_entries ( string $title , string $text , int $suggested_width , int $flex_down , int $flex_up , int $data_width , array &$items , string $button1 [, string $... ] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

title

text

suggested_width

flex_down

flex_up

data_width

items

button1

button2

Rückgabewerte

Beispiele

Beispiel #1 A newt_win_entries() example

<?php

newt_init
();
newt_cls();

$entries[] = array('text' => 'First name:''value' => &$f_name);
$entries[] = array('text' => 'Last name:',  'value' => &$l_name);

$rc newt_win_entries("User information""Please enter your credentials:"507730$entries"Ok""Back");
newt_finished ();

if (
$rc != 2) {
    echo 
"Your name is: $f_name $l_name\n";
}
?>



newt_win_menu

(PECL newt >= 0.1)

newt_win_menu

Beschreibung

int newt_win_menu ( string $title , string $text , int $suggestedWidth , int $flexDown , int $flexUp , int $maxListHeight , array $items , int &$listItem [, string $button1 [, string $... ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

title

text

suggestedWidth

flexDown

flexUp

maxListHeight

items

listItem

button1

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_win_message

(PECL newt >= 0.1)

newt_win_message

Beschreibung

void newt_win_message ( string $title , string $button_text , string $format [, mixed $args [, mixed $... ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

title

button_text

format

args

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_win_messagev

(PECL newt >= 0.1)

newt_win_messagev

Beschreibung

void newt_win_messagev ( string $title , string $button_text , string $format , array $args )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

title

button_text

format

args

Rückgabewerte

Es wird kein Wert zurückgegeben.



newt_win_ternary

(PECL newt >= 0.1)

newt_win_ternary

Beschreibung

int newt_win_ternary ( string $title , string $button1_text , string $button2_text , string $button3_text , string $format [, mixed $args [, mixed $... ]] )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

title

Its description

button1_text

Its description

button2_text

Its description

button3_text

Its description

format

Its description

args

Its description

Rückgabewerte

What the function returns, first on success, then on failure. See also the &return.success; entity


Inhaltsverzeichnis




Ncurses Terminal Screen Control


Einführung

ncurses (new curses) is a free software emulation of curses in System V Rel 4.0 (and above). It uses terminfo format, supports pads, colors, multiple highlights, form characters and function key mapping. Because of the interactive nature of this library, it will be of little use for writing Web applications, but may be useful when writing scripts meant using PHP from the command line.

The features available, such as colors, depend on the terminal that you are using. Use functions such as ncurses_has_colors(), ncurses_can_change_color(), and ncurses_has_ic() to check for individual capabilities.

Hinweis: Diese Erweiterung wurde ins » PECL-Repositorium verschoben und ist nicht mehr Teil von PHP ab PHP 5.3.0.

ncurses is available for the following platforms:

  • AIX
  • BeOS
  • BSD variants (FreeBSD, NetBSD, OpenBSD)
  • Cygwin
  • Digital Unix (aka OSF1)
  • GNU/Linux
  • HPUX
  • IRIX64
  • Mac OS X
  • OS/2
  • QNX
  • SCO OpenServer
  • Solaris
  • Tru64



Installation/Konfiguration

Inhaltsverzeichnis


Anforderungen

You need the ncurses libraries and headerfiles. Download the latest version from the » ftp://ftp.gnu.org/pub/gnu/ncurses/ or from an other GNU-Mirror.



Installation

To get these functions to work, you have to compile the CGI or CLI version of PHP with --with-ncurses[=DIR].



Laufzeit-Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.



Ressource-Typen

This extension defines window, panel and pad resources.




Vordefinierte Konstanten

Inhaltsverzeichnis

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.


Error codes

On error ncurses functions return -1. Some functions return 0 on success. See the relevant pages in the documentation for actual return values.



Colors

ncurses color constants
constant meaning
NCURSES_COLOR_BLACK no color (black)
NCURSES_COLOR_WHITE white
NCURSES_COLOR_RED red - supported when terminal is in color mode
NCURSES_COLOR_GREEN green - supported when terminal is in color mode
NCURSES_COLOR_YELLOW yellow - supported when terminal is in color mode
NCURSES_COLOR_BLUE blue - supported when terminal is in color mode
NCURSES_COLOR_CYAN cyan - supported when terminal is in color mode
NCURSES_COLOR_MAGENTA magenta - supported when terminal is in color mode


Keys

ncurses key constants
constant meaning
NCURSES_KEY_F0 - NCURSES_KEY_F64 function keys F1 - F64
NCURSES_KEY_DOWN down arrow
NCURSES_KEY_UP up arrow
NCURSES_KEY_LEFT left arrow
NCURSES_KEY_RIGHT right arrow
NCURSES_KEY_HOME home key (upward+left arrow)
NCURSES_KEY_BACKSPACE backspace
NCURSES_KEY_DL delete line
NCURSES_KEY_IL insert line
NCURSES_KEY_DC delete character
NCURSES_KEY_IC insert char or enter insert mode
NCURSES_KEY_EIC exit insert char mode
NCURSES_KEY_CLEAR clear screen
NCURSES_KEY_EOS clear to end of screen
NCURSES_KEY_EOL clear to end of line
NCURSES_KEY_SF scroll one line forward
NCURSES_KEY_SR scroll one line backward
NCURSES_KEY_NPAGE next page
NCURSES_KEY_PPAGE previous page
NCURSES_KEY_STAB set tab
NCURSES_KEY_CTAB clear tab
NCURSES_KEY_CATAB clear all tabs
NCURSES_KEY_SRESET soft (partial) reset
NCURSES_KEY_RESET reset or hard reset
NCURSES_KEY_PRINT print
NCURSES_KEY_LL lower left
NCURSES_KEY_A1 upper left of keypad
NCURSES_KEY_A3 upper right of keypad
NCURSES_KEY_B2 center of keypad
NCURSES_KEY_C1 lower left of keypad
NCURSES_KEY_C3 lower right of keypad
NCURSES_KEY_BTAB back tab
NCURSES_KEY_BEG beginning
NCURSES_KEY_CANCEL cancel
NCURSES_KEY_CLOSE close
NCURSES_KEY_COMMAND cmd (command)
NCURSES_KEY_COPY copy
NCURSES_KEY_CREATE create
NCURSES_KEY_END end
NCURSES_KEY_EXIT exit
NCURSES_KEY_FIND find
NCURSES_KEY_HELP help
NCURSES_KEY_MARK mark
NCURSES_KEY_MESSAGE message
NCURSES_KEY_MOVE move
NCURSES_KEY_NEXT next
NCURSES_KEY_OPEN open
NCURSES_KEY_OPTIONS options
NCURSES_KEY_PREVIOUS previous
NCURSES_KEY_REDO redo
NCURSES_KEY_REFERENCE ref (reference)
NCURSES_KEY_REFRESH refresh
NCURSES_KEY_REPLACE replace
NCURSES_KEY_RESTART restart
NCURSES_KEY_RESUME resume
NCURSES_KEY_SAVE save
NCURSES_KEY_SBEG shiftet beg (beginning)
NCURSES_KEY_SCANCEL shifted cancel
NCURSES_KEY_SCOMMAND shifted command
NCURSES_KEY_SCOPY shifted copy
NCURSES_KEY_SCREATE shifted create
NCURSES_KEY_SDC shifted delete char
NCURSES_KEY_SDL shifted delete line
NCURSES_KEY_SELECT select
NCURSES_KEY_SEND shifted end
NCURSES_KEY_SEOL shifted end of line
NCURSES_KEY_SEXIT shifted exit
NCURSES_KEY_SFIND shifted find
NCURSES_KEY_SHELP shifted help
NCURSES_KEY_SHOME shifted home
NCURSES_KEY_SIC shifted input
NCURSES_KEY_SLEFT shifted left arrow
NCURSES_KEY_SMESSAGE shifted message
NCURSES_KEY_SMOVE shifted move
NCURSES_KEY_SNEXT shifted next
NCURSES_KEY_SOPTIONS shifted options
NCURSES_KEY_SPREVIOUS shifted previous
NCURSES_KEY_SPRINT shifted print
NCURSES_KEY_SREDO shifted redo
NCURSES_KEY_SREPLACE shifted replace
NCURSES_KEY_SRIGHT shifted right arrow
NCURSES_KEY_SRSUME shifted resume
NCURSES_KEY_SSAVE shifted save
NCURSES_KEY_SSUSPEND shifted suspend
NCURSES_KEY_UNDO undo
NCURSES_KEY_MOUSE mouse event has occurred
NCURSES_KEY_MAX maximum key value


Mouse

mouse constants
Constant meaning
NCURSES_BUTTON1_RELEASED - NCURSES_BUTTON4_RELEASED button (1-4) released
NCURSES_BUTTON1_PRESSED - NCURSES_BUTTON4_PRESSED button (1-4) pressed
NCURSES_BUTTON1_CLICKED - NCURSES_BUTTON4_CLICKED button (1-4) clicked
NCURSES_BUTTON1_DOUBLE_CLICKED - NCURSES_BUTTON4_DOUBLE_CLICKED button (1-4) double clicked
NCURSES_BUTTON1_TRIPLE_CLICKED - NCURSES_BUTTON4_TRIPLE_CLICKED button (1-4) triple clicked
NCURSES_BUTTON_CTRL ctrl pressed during click
NCURSES_BUTTON_SHIFT shift pressed during click
NCURSES_BUTTON_ALT alt pressed during click
NCURSES_ALL_MOUSE_EVENTS report all mouse events
NCURSES_REPORT_MOUSE_POSITION report mouse position



Ncurses Funktionen


ncurses_addch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchAdd character at current position and advance cursor

Beschreibung

int ncurses_addch ( int $ch )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

ch



ncurses_addchnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchnstrAdd attributed string with specified length at current position

Beschreibung

int ncurses_addchnstr ( string $s , int $n )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

s

n



ncurses_addchstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchstrAdd attributed string at current position

Beschreibung

int ncurses_addchstr ( string $s )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

s



ncurses_addnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addnstrAdd string with specified length at current position

Beschreibung

int ncurses_addnstr ( string $s , int $n )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

s

n



ncurses_addstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addstrOutput text at current position

Beschreibung

int ncurses_addstr ( string $text )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

text



ncurses_assume_default_colors

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_assume_default_colorsDefine default colors for color 0

Beschreibung

int ncurses_assume_default_colors ( int $fg , int $bg )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

fg

bg



ncurses_attroff

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attroffTurn off the given attributes

Beschreibung

int ncurses_attroff ( int $attributes )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

attributes



ncurses_attron

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attronTurn on the given attributes

Beschreibung

int ncurses_attron ( int $attributes )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

attributes



ncurses_attrset

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attrsetSet given attributes

Beschreibung

int ncurses_attrset ( int $attributes )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

attributes



ncurses_baudrate

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_baudrateReturns baudrate of terminal

Beschreibung

int ncurses_baudrate ( void )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.



ncurses_beep

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_beepLet the terminal beep

Beschreibung

int ncurses_beep ( void )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

ncurses_beep() sends an audible alert (bell) and if its not possible flashes the screen.

Siehe auch



ncurses_bkgd

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bkgdSet background property for terminal screen

Beschreibung

int ncurses_bkgd ( int $attrchar )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

attrchar



ncurses_bkgdset

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bkgdsetControl screen background

Beschreibung

void ncurses_bkgdset ( int $attrchar )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

attrchar



ncurses_border

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_borderDraw a border around the screen using attributed characters

Beschreibung

int ncurses_border ( int $left , int $right , int $top , int $bottom , int $tl_corner , int $tr_corner , int $bl_corner , int $br_corner )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Draws the specified lines and corners around the main window.

Use ncurses_wborder() for borders around subwindows!

Parameter-Liste

Every parameter expects 0 to draw a line or 1 to skip it.

left

right

top

bottom

tl_corner

Top left corner

tr_corner

Top right corner

bl_corner

Bottom left corner

br_corner

Bottom right corner

Siehe auch



ncurses_bottom_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bottom_panelMoves a visible panel to the bottom of the stack

Beschreibung

int ncurses_bottom_panel ( resource $panel )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

panel



ncurses_can_change_color

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_can_change_colorChecks if terminal color definitions can be changed

Beschreibung

bool ncurses_can_change_color ( void )

Checks whether the terminal has color capabilities and whether the programmer can change color definitions using ncurses_init_color(). ncurses must be initialized using ncurses_init() before calling this function.

Parameter-Liste

Diese Funktion hat keine Parameter.

Rückgabewerte

Return TRUE if the programmer can change color definitions, FALSE otherwise.

Siehe auch



ncurses_cbreak

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_cbreakSwitch of input buffering

Beschreibung

bool ncurses_cbreak ( void )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Disables line buffering and character processing (interrupt and flow control characters are unaffected), making characters typed by the user immediately available to the program.

Rückgabewerte

Returns TRUE or NCURSES_ERR if any error occurred.

Siehe auch



ncurses_clear

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clearClear screen

Beschreibung

bool ncurses_clear ( void )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Clears the screen completely without setting blanks.

Note: ncurses_clear() clears the screen without setting blanks, which have the current background rendition. To clear screen with blanks, use ncurses_erase().

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



ncurses_clrtobot

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clrtobotClear screen from current position to bottom

Beschreibung

bool ncurses_clrtobot ( void )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Erases all lines from cursor to end of screen and creates blanks. Blanks created by ncurses_clrtobot() have the current background rendition.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



ncurses_clrtoeol

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clrtoeolClear screen from current position to end of line

Beschreibung

bool ncurses_clrtoeol ( void )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Erases the current line from cursor position to the end. Blanks created by ncurses_clrtoeol() have the current background rendition.

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Siehe auch



ncurses_color_content

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_color_contentRetrieves RGB components of a color

Beschreibung

int ncurses_color_content ( int $color , int &$r , int &$g , int &$b )

Retrieves the red, green, and blue components for the given color definition. Terminal color capabilities must be initialized with ncurses_start_color() prior to calling this function.

Parameter-Liste

color

The number of the color to retrieve information for. May be one of the pre-defined color constants.

r

A reference to which to return the red component of the color. The value returned to the reference will be between 0 and 1000.

g

A reference to which to return the green component of the color. The value returned to the reference will be between 0 and 1000.

b

A reference to which to return the blue component of the color. The value returned to the reference will be between 0 and 1000.

Rückgabewerte

Returns -1 if the function was successful, and 0 if ncurses or terminal color capabilities have not been initialized.

Siehe auch



ncurses_color_set

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_color_setSet active foreground and background colors

Beschreibung

int ncurses_color_set ( int $pair )

Sets the active foreground and background colors. Any characters written after this function is invoked will have these colors. This function requires terminal colors to be supported and initialized using ncurses_start_color() beforehand.

ncurses uses color pairs to specify both foreground and background colors. Use ncurses_init_pair() to define a color pair.

Parameter-Liste

pair

The color pair from which to get the foreground and background colors to set as the active colors.

Rückgabewerte

Returns -1 on success, and 0 on failure.

Beispiele

Beispiel #1 Writing a string with a specified color to the screen

<?php
ncurses_init
();

// If the terminal supports colors, initialize and set active color
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Write a string at specified location
ncurses_mvaddstr(1010"Hello world! Yellow on blue text!");

// Flush output to screen
ncurses_refresh();

ncurses_end();
?>

Siehe auch



ncurses_curs_set

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_curs_setSet cursor state

Beschreibung

int ncurses_curs_set ( int $visibility )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

visibility



ncurses_def_prog_mode

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_def_prog_modeSaves terminals (program) mode

Beschreibung

bool ncurses_def_prog_mode ( void )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Saves the current terminal modes for program (in curses) for use by ncurses_reset_prog_mode().

Rückgabewerte

Returns FALSE on success, otherwise TRUE.

Siehe auch



ncurses_def_shell_mode

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_def_shell_modeSaves terminals (shell) mode

Beschreibung

bool ncurses_def_shell_mode ( void )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Saves the current terminal modes for shell (not in curses) for use by ncurses_reset_shell_mode().

Rückgabewerte

Returns FALSE on success, TRUE otherwise.

Siehe auch



ncurses_define_key

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_define_keyDefine a keycode

Beschreibung

int ncurses_define_key ( string $definition , int $keycode )
Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.

Parameter-Liste

definition

keycode



ncurses_del_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_del_panelRemove panel from the stack and delete it (but not the associated window)

Beschreibung

bool ncurses_del_panel ( resource $panel )
Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.