Copyright © 1997 - 2012 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 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.
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.
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, Nilgün Belma Bugüner, Jesus M. Castagnetto, Ron Chmara, Sean Coates, John Coggeshall, Simone Cortesi, Peter Cowburn, Daniel Egeberg, Markus Fischer, Wez Furlong, Sara Golemon, Rui Hirokawa, Brad House, Pierre-Alain Joye, Etienne Kneuss, Moriyoshi Koizumi, Rasmus Lerdorf, Andrew Lindeman, Stanislav Malyshev, Justin Martin, Rafael Martinez, Rick McGuire, Moacir de Oliveira Miranda Júnior, Kalle Sommer Nielsen, Yasuo Ohgaki, Richard Quadling, Derick Rethans, Rob Richards, Sander Roobol, Egon Schmid, Thomas Schoefbeck, Sascha Schumann, Dan Scott, Masahiro Takagi, Yannick Torres, 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.
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.
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.
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.
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:
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.
- 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
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.
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 Seite » 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 Programme mit einigen wenigen Mausklicks installieren. Es ist ziemlich einfach, einen Webserver mit PHP-Unterstützung auf jedem Betriebssystem, wie MacOSX, Linux oder 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.
Erstellen Sie eine Datei mit dem Namen hallo.php und speichern Sie diese 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ätzliches 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 Textverarbeitungsprogrammen
Textverarbeitungsprogramme 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(); ?>
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 finden 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, existieren sie 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 Beispiels könnte so aussehen:
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 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 Heuhaufen 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, 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() hat nicht FALSE zurückgegeben</h3>
<p>Sie benutzen Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() hat FALSE zurückgegeben</h3>
<p>Sie benutzen nicht Internet Explorer</p>
<?php
}
?>
Die Ausgabe dieses Skripts könnte so aussehen:
<h3>strpos() hat nicht FALSE zurückgegeben</h3> <p>Sie benutzen 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 strpos() zurückgibt bzw. ob der String MSIE gefunden wird oder nicht.
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, dass die Zeichen, die in HTML eine spezielle Bedeutung haben, ordentlich codiert werden, sodass niemand HTML Tags oder Javascript-Code in Ihre Seite einschmuggeln kann. Da wir wissen, dass 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, welches alle POST-Daten enthält. Beachten Sie, dass die im Formular verwendete Methode POST ist. Hätten wir GET verwendet, 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 ebenfalls die Eingaben von XForms in PHP verarbeiten, auch wenn Ihnen die von PHP unterstützten HTML-Formulare bisher gut gereicht haben. Auch wenn die Arbeit mit XForms nichts für Anfänger ist, sind Sie vielleicht trotzdem daran interessant. In unserem Features-Kapitel finden Sie eine kurze Einführung in die Verarbeitung von XForms-Daten.
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:
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/.
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:
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.
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:
Wenn direkt von den SVN Dateien kompiliert wird oder eigene Änderungen vorgenommen wurden, könnten folgende Komponenten benötigt werden:
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.
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-development /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-production 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.
LoadModule php5_module libexec/libphp5.so
15. Fügen Sie dies im AddModule-Abschnitt Ihrer httpd.conf, irgendwo unterhalb
von ClearModuleList, hinzu:
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-development /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
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 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 libphp5.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. 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:
Wenn man dies nicht auf "Group nogroup" oder etwas ähnliches ("Group daemon" ist auch üblich) ändert, wird PHP nicht imstande sein, Dateien zu öffnen.User nobody Group "#-1"
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.
Dieser Abschnitt enthält Hinweise und Tipps, die sich auf die Installation von PHP speziell für Apache 2.0 auf Unixsystemen beziehen.
Wir empfehlen, in einer Produktionsumgebung kein Threaded MPM mit Apache2 zu verwenden. Verwenden Sie stattdessen das Prefork MPM, welches der Standard-MPM für Apace 2.0 und 2.2 ist. 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.
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.
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).
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).
Lighttpd provides a program called spawn-fcgi to ease the process of spawning fastcgi processes easier.
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"
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 ))
)
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.
Install the following packages from » http://www.sunfreeware.com/ or another download site:
export PATH.
gunzip php-x.x.x.tar.gz (if you have a .gz dist,
otherwise go to 4).
tar xvf php-x.x.x.tar
cd ../php-x.x.x
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
After performing the base install and reading the appropriate readme file, you may need to perform some additional configuration steps.
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/.
Add the following line to mime.types (you can do that by the administration server):
type=magnus-internal/x-httpd-php exts=php
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"]
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>
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>
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>
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").
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
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...]
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...]
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!!!
By default, PHP is built as both a CLI and CGI program, which can be used for CGI processing. If you are running a web server that 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.
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 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.
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'.
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
This section contains notes and hints specific to installing PHP on » OpenBSD 3.6.
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.
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.
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).
This section contains notes and hints specific to installing PHP on Solaris systems.
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.
For unpacking the PHP distribution you need
For compiling PHP you need
For building extra extensions or hacking the code of PHP you might also need
You can simplify the Solaris install process by using pkgadd to install most of your needed components. The Image Packaging System (IPS) for Solaris 11 Express also contains most of the required components for installation using the pkg command.
Dieser Abschnitt beinhaltet Hinweise und Tipps für die Installation von PHP unter » Debian GNU/Linux.
Nicht offizielle Pakete von Drittanbietern werden hier nicht unterstützt. Alle Bugs sollten an das Debian-Team gemeldet werden, außer falls sie mit den letzten Paketen von unserer » Download-Seite reproduzierbar sind.
Auch wenn die Anweisungen zum Kompilieren von PHP unter Unix auch für Debian gelten, enthält diese Handbuchseite spezielle Informationen für weitere Optionen, wie z.B. über die Nutzung der apt-get- oder aptitude-Kommandos. Diese Handbuchseite nutzt beide Kommandos synonym.
Beachten Sie zunächst, dass andere verwandte Pakete wie libapache2-mod-php5 (zur Integration mit Apache 2) oder php-pear (für PEAR) existieren.
Außerdem sollten Sie vor der Installation eines Pakets sicherstellen, dass die Paketliste auf dem aktuellen Stand ist. Üblicherweise kann dies durch das Kommando apt-get update erledigt werden.
Beispiel #1 Debian-Installations-Beispiel mit Apache 2
# apt-get install php5-common libapache2-mod-php5 php5-cli
APT wird automatisch das PHP-5-Modul für Apache 2 sowie alle seine Abhängigkeiten installieren und danach aktivieren. Damit die Änderungen in Kraft treten, muss Apache neu gestart werden. Zum Beispiel:
Beispiel #2 Stoppen und Starten von Apache nach der Installation von PHP
# /etc/init.d/apache2 stop # /etc/init.d/apache2 start
Im letzten Abschnitt wurde PHP nur mit den Basismodulen installiert. In den meisten Fällen werden Sie weitere Module wie MySQL, cURL oder GD benötigen. Auch diese Module können mit dem apt-get-Kommando installiert werden.
Beispiel #3 Methoden zur Anzeige weiterer PHP-5-Pakete
# apt-cache search php5 # aptitude search php5 # aptitude search php5 |grep -i mysql
Diese Beispiel werden eine große Zahl von Paketen, inklusive spezieller PHP-Pakete wie php5-cgi, php5-cli und php5-dev, anzeigen. Entscheiden Sie, welche Sie benötigen und installieren Sie diese wie jedes andere Paket entweder mit apt-get oder aptitude. Weil Debian Abhängigkeiten prüft, wird es Sie ggf. fragen, um MySQL und cURL zu installieren:
Beispiel #4 PHP mit MySQL und cURL installieren
# apt-get install php5-mysql php5-curl
APT wird automatisch die passenden Zeilen zu Ihren verschiedenen mit der php.ini verwandten Dateien hinzufügen, wie z.B. /etc/php5/apache2/php.ini, /etc/php5/conf.d/pdo.ini etc. Abhängig von der Erweiterung wird es Einträge ähnlich wie extension=foo.so hinzufügen. Das Neustarten des Web-Server (z.B. Apache) ist erforderlich, damit die Änderungen sich auswirken.
Diese Kapitel beschreibt die Installation von PHP unter Mac OS X. PHP wird auf Macs ausgeliefert; das Kompilieren ist ähnlich zur Installation unter Unix.
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), müssen Sie sich Ihr eigenes PHP - eventuell auch einen eigenen Webserver - kompilieren. Wenn Sie nicht vertraut mit dem Kompilieren eigener Software sind, sollten Sie prüfen, ob nicht bereits jemand ein gepacktes und vorkompiliertes System bereitstellt, das Ihren Anforderungen entspricht.
Die folgenden Quellen bieten einfach zu installierende PHP-Pakete für Mac OS X an:
Seit der Version 10.0.0 ist PHP standardmäßig in Mac OS 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 Versionen erstellt, um Fehler zu beseitigen und um den Funktionsumfang zu erweitern. Für weitere Informationen sollten Sie die entsprechende Mac-OS-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 für den Apache-Webserver (Standard-Webserver, der über die Systemeinstellungen von Mac OS X zugänglich ist) und umfasst folgende Schritte:
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 ctrl-Taste steht.
Hinweis: Versionen von Mac OS X vor 10.5 enthielten ältere Versionen von PHP und Apache. Daher kann sich die Apache-Konfigurationen auf solchen älteren Maschinen im folgenden Verzeichnis befinden: /etc/httpd/httpd.conf.
Mit einem Texteditor müssen Sie nur die Zeilen, die ähnlich wie die folgenden aussehen, einkommentieren (durch entfernen von #; die beiden Zeilen sind oft ein Stück voneinander getrennt):
# LoadModule php5_module libexec/httpd/libphp4.so # AddModule mod_php5.c
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>
Hinweis:
Vor OS X 10.5 (Leopard) war PHP 4 statt PHP 5 enthalten, weswegen die oben genannten Anweisungen angepasst werden müssen (Ersetzen der "5" durch die "4").
Die phpinfo()-Funktion zeigt Informationen über PHP an. Erstellen Sie eine Datei im DocumentRoot mit dem folgenden Inhalt:
<?php phpinfo(); ?>
Das CLI (oder CGI in älteren Versionen) heißt entsprechend php und existiert wahrscheinlich als /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 dieses PHP-Binärprogramms zu sehen. Ein Aufruf von phpinfo() enthält diese Informationen ebenfalls.
Um PHP unter Mac OS X zu kompilieren, nutzen Sie die Unix-Installationsanleitung.
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.
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 a development environment such as 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.
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.
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.
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.
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.
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 option for the feature "PDO" you will install all PDO Drivers).
It is not recommended to install all extensions by default, since many of 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.
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 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
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.
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).
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 IIS7 or greater and PHP 5.3+, then the VC9 binaries of PHP should be used.
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.
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.
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.
This section contains PHP installation instructions specific to Microsoft Internet Information Services (IIS).
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.
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.
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:
In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";
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";
Click the "Directory Security" tab;
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)
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:
In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";
Right-click on the "Web Sites" node in the tree view and select "Properties";
Click the "Documents" tab;
Click the "Add..." button and enter "index.php" for the "Default content page:".
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
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
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\"
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.
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:
In the Windows Start Menu choose "Run:", type "optionalfeatures.exe" and click "Ok";
In the "Windows Features" dialog expand "Internet Information Services", "World Wide Web Services", "Application Development Features" and then enable the "CGI" checkbox;
Click OK and wait until the installation is complete.
To enable FastCGI support on Windows Server 2008 and Windows Server 2008 R2:
In the Windows Start Menu choose "Run:", type "CompMgmtLauncher" and click "Ok";
If the "Web Server (IIS)" role is not present under the "Roles" node, then add it by clicking "Add Roles";
If the "Web Server (IIS)" role is present, then click "Add Role Services" and then enable the "CGI" checkbox under "Application Development" group;
Click "Next" and then "Install" and wait for the installation to complete.
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.
Follow these steps to create an IIS handler mapping for PHP in IIS Manager user interface:
In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";
In the IIS Manager user interface select the server node in the "Connections" tree view;
In the "Features View" page open the "Handler Mappings" feature;
In the "Actions" pane click "Add Module Mapping...";
In the "Add Module Mapping" dialog enter the following:
Click "Request Restrictions" button and then configure the mapping to invoke handler only if request is mapped to a file or a folder;
Click OK on all the dialogs to save the configuration.
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.
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)
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
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']"
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 timeout settings
%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
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
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 sollten: c:/directory/file.ext. Bei Verzeichnisnamen kann weiterhin ein abschließender Schrägstrich nötig sein.
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
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
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'); ?>.
This section contains notes and hints specific to Apache 2.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 Support
Users of Apache 2.2 should note that the DLL file for Apache 2.2 is named php5apache2_2.dll rather than php5apache2.dll and is available only for PHP 5.2.0 and later. See also » http://snaps.php.net/
You are strongly encouraged to consult the » Apache Documentation to get a basic understanding of the Apache 2.x Server. Also consider reading the » Windows specific notes for Apache 2.x before reading on here.
Apache 2.x is designed to run on the Windows version designated as server platforms, such as Windows NT 4.0, Windows 2000, Windows XP, or Windows 7. While Apache 2.x works tolerably well on Windows 9x, support on these platforms is incomplete, and some things will not work correctly. There is no plan to remedy this situation.
Download the most recent version of » Apache 2.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 three ways to set up PHP to work with Apache 2.x on Windows. You can run PHP as a handler, as a CGI, or under FastCGI.
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 sollten: c:/directory/file.ext. Bei Verzeichnisnamen kann weiterhin ein abschließender Schrägstrich nötig sein.
You need to insert the following lines into your Apache httpd.conf configuration file to load the PHP module for Apache 2.x:
Beispiel #1 PHP and Apache 2.x as handler
# LoadModule php5_module "c:/php/php5apache2.dll" AddHandler 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 php5apache2.dll or php5apache2_2.dll in your LoadModule directive and verify that the referenced file is in fact located at the file path that you point to in this directive.
The above configuration will enable PHP handling of any file that has a .php extension, even if there are other file extensions. For example, a file named example.php.txt will be executed by the PHP handler. To ensure that only files that end in .php are executed, use the following configuration instead:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
You should consult the » Apache CGI documentation for a more complete understanding of running CGI on Apache.
To run PHP as CGI, you'll need to place your php-cgi files in a directory designated as a CGI directory using the ScriptAlias directive.
You will then need to insert a #! line in the PHP files, pointing to the location of your PHP binary:
Beispiel #2 PHP and Apache 2.x as CGI
#!C:/php/php.exe <?php phpinfo(); ?>
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.
Running PHP under FastCGI has a number of advantages over running it as a CGI. Setting it up this way is fairly straightforward:
Obtain mod_fcgid from » http://httpd.apache.org/mod_fcgid/. Win32 binaries are available for download from that site. Install the module according to the instructions that will come with it.
Configure your web server as shown below, taking care to adjust any paths to reflect your how you have installed things on your particular system:
Beispiel #3 Configure Apache to run PHP as FastCGI
LoadModule fcgid_module modules/mod_fcgid.so # Where is your php.ini file? FcgidInitialEnv PHPRC "c:/php" AddHandler fcgid-script .php FcgidWrapper "c:/php/php-cgi.exe" .php
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.
To install PHP as a CGI handler, do the following:
Make a file association from the command line. Type the following two lines:
assoc .php=PHPScript ftype PHPScript=c:\php\php.exe %1 %*
More details about setting up PHP as a CGI executable can be found here: » http://benoit.noss.free.fr/php/install-php.html
To install PHP with NSAPI, do the following:
Make a file association from the command line. Type the following two lines:
assoc .php=PHPScript ftype PHPScript=c:\php\php.exe %1 %*
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"]
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 ...]
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>
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").
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
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...]
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...]
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"
You can check the status by using the phpinfo() function.
Hinweis:
But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!
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
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.
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.
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.
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.
See the Wiki documentation at: » http://wiki.php.net/internals/windows/stepbystepbuild
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.
| 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 |
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.exe,0" [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
script -arg1 -arg2 -arg3
Hinweis:
There is a small problem if you intend to use this technique and use your PHP scripts as a command line filter, like the example below:
ordir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3You may find that the script simply hangs and nothing is output. To get this operational, you need to make another registry change.dir | script -arg1 -arg2 -arg3Further information regarding this issue can be found in this » Microsoft Knowledgebase Article : 321788.Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer] "InheritConsoleHandles"=dword:00000001
PHP installiert in der Wolke. Auf zur PHP Wolke!
PHP kann auf der » Azure Cloud Plattform installiert werden.
Mehr Informationen hier: » Azure SDK für PHP.
PHP kann auf der » EC2 Cloud Plattform installiert werden.
Mehr Informationen hier: » AWS SDK für PHP.
FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features (mostly) useful for heavy-loaded sites.
These features include:
advanced process management with graceful stop/start;
ability to start workers with different uid/gid/chroot/environment, listening on different ports and using different php.ini (replaces safe_mode);
stdout and stderr logging;
emergency restart in case of accidental opcode cache destruction;
accelerated upload support;
"slowlog" - logging scripts (not just their names, but their PHP backtraces too, using ptrace and similar things to read remote process' execute_data) that are executed unusually slow;
fastcgi_finish_request() - special function to finish request and flush all data while continuing to do something time-consuming (video converting, stats processing etc.);
dynamic/static child spawning;
basic SAPI status info (similar to Apache mod_status);
php.ini-based config file.
In order to enable FPM in your PHP build you need to add --enable-fpm to your configure line.
There are several other FPM-specific configure options (all of them optional):
--with-fpm-user - set FPM user (default - nobody).
--with-fpm-group - set FPM group (default - nobody).
FPM verwendet den php.ini Syntax für die Konfigurationsdatei - php-fpm.conf.
pid
string
Pfad zur PID Datei. Standardwert: none.
error_log
string
Pfad zur error log Datei. Standardwert: #INSTALL_PREFIX#/log/php-fpm.log.
log_level
string
Error log level. Mögliche Werte: alert, error, warning, notice, debug. Standardwert: notice.
emergency_restart_threshold
int
Wenn diese Anzahl an Kindprozessen mit SIGSEGV oder SIGBUS terminiert, innerhalb des durch emergency_restart_interval gesetzten Zeitintervals, dann wird FPM neu starten. Der Wert 0 meint 'Off'. Standardwert: 0 (Off).
emergency_restart_interval
mixed
Zeitinterval, dass von emergency_restart_interval verwendet wird, um zu bestimmen, wann ein zeitversetzter Neustart ausgelöst werden soll. Das kann als Workaround bei zufälligen Fehlern im Shared Memory eines Accelerators nützlich sein. Verfügbare Einheiten: s(econds), m(inutes), h(ours), oder d(ays). Standardeinheit: seconds. Standardwert: 0 (Off).
process_control_timeout
mixed
Zeitlimit der Kindprozesse, um auf eine Reaktion vom Master zu warten. Verfügbare Einheiten: s(econds), m(inutes), h(ours), oder d(ays) Standardeinheit: seconds. Standardwert: 0.
daemonize
boolean
Schickt FPM in den Hintergrund. Setze 'no', um FPM im Vordergrund zu halten und zu debuggen. Standardwert: yes.
Mit FPM sind mehrere Pools an Prozessen mit unterschiedlichen Einstellungen lauffähig. Nachfolgend finden Sie die Einstellungen die pro Pool verändert werden können.
listen
string
Die Adresse, unter welcher FastCGI-Anfragen angenommen werden. Gültig ist der Syntax: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Diese Einstellunge ist für jeden Pool zwingend notwendig.
listen.backlog
int
Setzt listen(2) backlog. Der Wert '-1' meint unbegrenzt. Standardwert: -1.
listen.allowed_clients
string
Liste mit IPv4 Adressen von FastCGI Clients, denen eine Verbindung gestattet ist. Gleichzusetzen mit der FCGI_WEB_SERVER_ADDRS Umgebungsvariable im originalen PHP FastCGI (5.2.2+). Macht nur Sinn mit einem empfangenden TCP Socket. Die Adressen sind durch Komma zu trennen. Wenn der Wert leer gelassen wird, dann werden Verbindungen von beliebigen IP Adressen akzeptiert. Standardwert: any.
listen.owner
string
Setzt die Rechte für den Unix Socket, falls dieser verwendet wird. Unter Linux müssen Lese- und Schreibrechte gesetzt werden, um Verbindungen eines Webservers zu erlauben. Viele BSD-Derivate erlauben Verbindungen unabhängig von den Rechteeinstellungen. Standardwert: user und group werden auf den aktuellen User gesetzt und Mode auf 0666.
listen.group
string
Siehe listen.owner.
listen.mode
string
Siehe listen.owner.
user
string
Der Unix-Benutzer der FPM Prozesse. Diese Einstellung ist zwingend notwendig.
group
string
Die Unix-Benutzergruppe der FPM Prozesse. Wenn nicht eingestellt, wird als Wert die Gruppe des Standard-Nutzers verwendet.
pm
string
Wähle, wie der Prozess-Manager die Anzahl der Kindprozesse verwaltet. Mögliche Werte: static, ondemand, dynamic. Diese Einstellung ist zwingend notwendig.
static - die Anzahl der Kindprozesse ist fest eingestellt (pm.max_children).
ondemand - die Kindprozesse werden gestartet, sobald sie benötigt werden, im Gegensatz zu dynamic, wo zu Beginn bereits pm.start_servers Prozesse gestartet werden.
dynamic - die Anzahl der Kindprozesse wird dynamisch eingestellt, wobei die folgenden Einstellungen zugrundegelegt werden: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
pm.max_children
int
Die Anzahl an Kindprozessen, die erstellt werden, wenn pm auf static gesetzt und die maximale Anzahl an Kindprozessen, die erstellt werden, wenn pm auf dynamic gesetzt ist. Diese Einstellung ist zwingend notwendig.
Die Einstellung setzt das Limit für die Anzahl gleichzeitiger Verbindungen. Gleichzusetzen mit der ApacheMaxClients-Direktive mit mpm_prefork und der PHP_FCGI_CHILDREN Umgebungsvariable im originalen PHP FastCGI.
pm.start_servers
in
Die Anzahl an Kindprozessen, die beim Start erstellt werden. Wird nur verwendet, wenn pm auf dynamic gesetzt ist. Standardwert: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.
pm.min_spare_servers
int
Die gewünschte Mindestanzahl an Prozessen. Wird nur genutzt, wenn pm auf dynamic gesetzt ist. Ebenfalls zwingend notwendig.
pm.max_spare_servers
int
Die gewünschte Maximalanzahl an Prozessen. Wird nur genutzt, wenn pm auf dynamic gesetzt ist. Ebenfalls zwingend erforderlich.
pm.max_requests
int
Die Anzahl an Anfragen, die ein Kindprozesse ausführt, bevor er neu startet. Das kann hilfreich sein, um Memory Leaks in Bibliotheken von Drittanbietern zu debuggen. Für eine unbegrenzte Anfrageanzahl '0' verwenden. Vergleichbar mit PHP_FCGI_MAX_REQUESTS. Standardwert: 0.
pm.status_path
string
Die URI, um die FPM Statusseite anzuzeigen. Wenn dieser Wert nicht gesetzt ist, wird kein URI als Statusseite erkannt. Standardwert: none.
ping.path
string
Die Ping URI, um die Monitoring-Seite von FPM aufzurufen. Wenn dieser Wert nicht gesetzt ist, dann wird keine URI als Ping-Seite erkannt. Das kann dafür verwendet werden, zu testen, ob FPM noch läuft und antwortet. Es sei der Hinweis gestattet, dass der Wert mit einem Forwardslash (/) zu beginnen hat.
ping.response
string
Diese Direktive kann dazu verwendet werden, die Antwort auf eine Ping-Anfrage zu gestalten. Die Antwort ist vom Typ text/plain mit Antwortcode 200. Standardwert: pong.
request_terminate_timeout
mixed
Das Zeitfenster, in dem die einzelne Anfrage beantwortet sein sollte und falls nicht, der bearbeitende Prozess terminiert wird. Diese Einstellung sollte verwendet werden, wenn die 'max_execution_time' php.ini Einstellung, aus irgendeinem Grund nicht zu einem Scriptabbruch führt.Der Wert '0' steht für 'Off'. Mögliche Einheiten: s(econds)(default), m(inutes), h(ours) oder d(ays). Standardwert: 0.
request_slowlog_timeout
mixed
Das Zeitfenster, in dem die einzelne Anfrage beantwortet sein sollte und falls nicht, ein PHP Backtrace in die Log-Datei für langsame Anfragen geschrieben wird. Der Wert '0' meint 'Off'. Mögliche Einheiten: s(econds)(default), m(inutes), h(ours) oder d(ays). Standardwert: 0.
slowlog
string
Die Log-Datei für langsame Anfragen. Standardwert: #INSTALL_PREFIX#/log/php-fpm.log.slow.
rlimit_files
int
Setzt open file descriptor rlimit. Standardwert: Systemeinstellung.
rlimit_core
int
Setzt max core size rlimit. Mögliche Werte: 'unlimited' oder ein Integer größer oder gleich 0. Standardwert: Systemeinstellung.
chroot
string
Wechselt (chroot) beim Start in das angegebene Verzeichnis. Der Wert muss eine absolute Pfadangabe sein. Wenn dieser Wert nicht gesetzt ist, wird chroot nicht verwendet.
chdir
string
Wechselt (chdir) beim Start in das angegebene Verzeichnis. Der Wert muss eine absolute Pfadangabe sein. Standardwert: aktuelles Verzeichnis oder / wenn chroot.
catch_workers_output
boolean
Umleitung von Stdout und Stderr in das allgemeine Errorlog. Wenn nicht gesetzt, werden Stdout und Stderr umgeleitet nach /dev/null, entsprechend der FastCGI Spezifikation. Standardwert: no.
Es ist möglich, zusätzliche Umgebungsvariablen zu setzen und PHP Einstellungen eines bestimmten Pools zu verändern. Dazu sind die nachfolgenden Einstellungen in der php-fpm.conf erforderlich.
Beispiel #1 Übergabe von Umgebungsvariablen und PHP Einstellungen an einen Pool
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
Einstellungen die mit php_admin_value und php_admin_flag gemacht wurden, können nicht durch Verwendung von ini_set() verändert werden.
» 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.
There are several options for downloading PECL extensions, such as:
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.
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 PHP 4) 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.
Many times, you will find several versions of each DLL:
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
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.
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.
PECL makes it easy to create shared PHP extensions. Using the » pecl command, do the following:
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:
You may also install a specific version using this variant:
Hinweis:
After enabling the extension in php.ini, restarting the web service is required for the changes to be picked up.
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 --help to display additional usage information.
php-config is a simple shell script for obtaining information about the installed PHP configuration.
When compiling extensions, if you have multiple PHP versions installed, you may specify for which installation you'd like to build by using the --with-php-config option during configuration, specifying the path of the respective php-config script.
The list of command line options provided by the php-config script can be queried anytime by running php-config with the -h switch:
Usage: /usr/local/bin/php-config [OPTION] Options: --prefix [...] --includes [...] --ldflags [...] --libs [...] --extension-dir [...] --include-dir [...] --php-binary [...] --php-sapis [...] --configure-options [...] --version [...] --vernum [...]
| Option | Description |
|---|---|
| --prefix | Directory prefix where PHP is installed, e.g. /usr/local |
| --includes | List of -I options with all include files |
| --ldflags | LD Flags which PHP was compiled with |
| --libs | Extra libraries which PHP was compiled with |
| --extension-dir | Directory where extensions are searched by default |
| --include-dir | Directory prefix where header files are installed by default |
| --php-binary | Full path to php CLI or CGI binary |
| --php-sapis | Show all SAPI modules available |
| --configure-options | Configure options to recreate configuration of current PHP installation |
| --version | PHP version |
| --vernum | PHP version as integer |
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:
From here, force PHP to rebuild the configure script, and then build PHP as normal:
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:
Some problems are more common than others. The most common ones are listed in the PHP FAQ, part of this manual.
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.
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!
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:
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".
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). Falls sich die PHP-Datei außerhalb des "document root" befindet, wird nur das Verzeichnis, in dem sich die Datei befindet, gescannt.
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).
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().
| Modus | Wert | Bedeutung |
|---|---|---|
| PHP_INI_USER | 1 | Eintrag kann in Benutzerskripten (z.B. mittels ini_set()) oder in der Windows-Registry gesetzt werden |
| PHP_INI_PERDIR | 6 | Eintrag kann in der php.ini, .htaccess oder httpd.conf gesetzt werden |
| PHP_INI_SYSTEM | 4 | Eintrag kann in der php.ini oder httpd.conf gesetzt werden |
| PHP_INI_ALL | 7 | Eintrag kann überall gesetzt werden |
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_valuenicht, 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
Wert
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 oder
ini_set() überschrieben werden.
Beispiel #1 Apache-Konfigurationsbeispiel
<IfModule mod_php5.c> php_value include_path ".:/usr/local/lib/php" php_admin_flag engine on </IfModule> <IfModule mod_php4.c> php_value include_path ".:/usr/local/lib/php" php_admin_flag engine on </IfModule>
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.
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.
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.
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
}
?>
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.
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.
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. */
*/
?>
PHP unterstützt acht primitive Typen.
Vier skalare Typen:
Zwei zusammengesetzte Typen:
Und zuletzt drei 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 $a_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.
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.
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 nicht nötig...
if ($show_separators == TRUE) {
echo "<hr>\n";
}
// ... weil folgendes *genau* die selbe Bedeutung hat:
if ($show_separators) {
echo "<hr>\n";
}
?>
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:
FALSE selbst
Jeder andere Wert wird als TRUE angenommen (inklusive
jeglicher
resource
Werte).
-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)
?>
An integer is a number of the set Z = {..., -2, -1, 0, 1, 2, ...}.
See also:
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.
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
?>
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_dump( 0xffffffff );
// output: float(4294967295)
// this doesn't go for hexadecimal specified integers above 2^32-1:
var_dump( 0x100000000 );
// output: int(2147483647)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number);
// output: float(50000000000)
?>
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)
?>
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.
FALSE will yield 0 (zero), and TRUE will yield
1 (one).
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!
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.
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 (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.
Fließkommazahlen haben eine begrenzte Präzision. PHP nutzt normalerweise (dies hängt aber vom System ab) das IEEE 754 double precision Format, welches einen maximalen relativen Fehler von 1.11e-16 hat. Nicht elementare Rechenoperationen können einen größeren Fehler verursachen und bei Durchführung von mehreren Operationen können sich die Fehler addieren.
Weiterhin können viele rationale Zahlen, die zwar eine genaue Darstellung zur Basis 10 besitzen, wie beispielsweilse 0.1 oder 0.7, nicht genau als Gleitkommazahl zur intern genutzten Basis 2 dargestellt werden, unabhängig von der Größe der Mantisse. Daher können sie nicht ohne einen gewissen Präzisionsverlust 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 erwarteten 8, da die interne Repräsentation etwa wie folgt aussieht: 8
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.
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.
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.
A string literal can be specified in four different ways:
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';
?>
If the string is enclosed in double-quotes ("), PHP will interpret more escape sequences for special 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.
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.
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.
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 <![CDATA[ ]]> 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': \x41Hinweis:
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.
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.
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.
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.
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.
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.
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.
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 = 1 + "10.5"; // $foo is float (11.5)
$foo = 1 + "-1.3e3"; // $foo is float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is integer (1)
$foo = 1 + "bob3"; // $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 4 + "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.
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.
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(6 => 5, 13 => 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(5 => 43, 32, 56, "b" => 12);
// ...this array
array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
?>
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.
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(5 => 1, 12 => 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(1, 2, 3, 4, 5);
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 )
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(1 => 'one', 2 => 'two', 3 => '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.
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(1, 2);
$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.
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.
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 A {
private $A; // This will become '\0A\0A'
}
class B extends A {
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'.
It is possible to compare arrays with the array_diff() function and with array operators.
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(1 => '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",
5 => "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(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 is changed,
// $arr1 is still array(2, 3)
$arr3 = &$arr1;
$arr3[] = 4; // now $arr1 and $arr3 are the same
?>
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.
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'
?>
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 wurde in PHP 4 eingeführt.
Siehe auch get_resource_type().
Da resource-Variablen spezielle Referenzen auf geöffnete Dateien, Datenbankverbindungen, Grafikbereiche usw. enthalten, ist die Konvertierung von resource nicht sinnvoll.
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.
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.
Es gibt nur einen Wert vom Typ null:
das Schlüsselwort NULL (Groß- und Kleinschreibung ist
dabei nicht wichtig).
<?php
$var = NULL;
?>
Die Umwandlung einer Variable auf den Typ null entfernt die Variable und löscht ihren Inhalt.
Callbacks can be denoted by callable type hint as of PHP 5.4. This documentation used callback type information for the same purpose.
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. As of PHP 5.2.3, it is also possible to pass 'ClassName::methodName'.
Apart from common user-defined function, create_function() can also be used to create an anonymous callback function. As of PHP 5.3.0 it is possible to also pass a closure to a callback parameter.
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 A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
?>
Beispiel #2 Callback example using a Closure
<?php
// Our closure
$double = function($a) {
return $a * 2;
};
// This is our range of numbers
$numbers = range(1, 5);
// Use the closure as a callback here to
// double the size of each element in our
// range
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2 4 6 8 10
Hinweis: In PHP 4, 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.
Hinweis:
Callbacks die für Funktionen wie call_user_func() und call_user_func_array() registeriert sind werden nicht mehr ausgeführt, wenn in einem vorherigen Calback eine Exception geworfen und nicht gefangen wurde.
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.
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 A {
public static function who() {
echo "A\n";
}
}
class B extends A {
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 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.
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 = 5 + "10 Little Piggies"; // $foo is integer (15)
$foo = 5 + "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 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:
(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 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.
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ß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.
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.
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.
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.
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'];
}
?>
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;
}
?>
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:
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:
Dieses Beispiel demonstriert, dass die Referenz, die einer statischen Variablen zugewiesen wird, beim zweiten Aufruf der Funktion &get_instance_ref() vergessen ist.
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].
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.
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($_POST, true));
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>
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.
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", $zaehler, time()+3600);
setcookie("Cart[$zaehler]", $item, time()+3600);
?>
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 */
?>
Deshalb ist es wichtig zu wissen, dass PHP in den ihm übergebenen Variablen alle Punkte (.) automatisch durch einen Unterstrich (_) ersetzt.
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.
Eine Konstante ist ein Bezeichner (Name) für einen einfachen Wert. 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]*
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.
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
TRUEund $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:
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;
?>
Hinweis:
Im Gegensatz zu Konstanten, welche mit define() ersellt werden, müssen über const definierte Konstanten im Top-Level Scope erstellt werden, weil sie zur Compile Zeit definiert werden. Das heißt, dass sie nicht innerhalb von Funktionen, Schleifen oder if Statements definiert werden können.
Lesen Sie ebenfalls den Abschnitt über Klassenkonstanten.
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:
| 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. Der Klassenname enthält auch den Namen des Namespaces in dem er deklariert wurde (z.B. Foo\Bar). __CLASS__ kann seit PHP 5.4 auch in Traits verwendet werden, in welchem Fall Name der Klasse welche den Trait verwendet zurückgegeben wird. |
__TRAIT__ |
Der Trait Name, wie er definiert wurde (unter Beachtung der Groß- und Kleinschreibung). (Hinzugefügt in PHP 5.4.0) Enthält auch den Namespace in welchem der Trait definiert wurde (z.B. Foo\Bar). |
__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 (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 wir 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 '$b *= 7' (multipliziert den Wert von $b mit 7), 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.
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.
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.
| 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 | |
| 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.
Erinnern Sie sich noch an die Grundrechenarten aus der Schule? Die arithmetischen Operatoren funktionieren genauso:
| 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.
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 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
?>
| 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, jedoch nicht in beiden gesetzt sind, werden gesetzt. |
| ~ $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 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.
| 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'];
}
?>
TRUE zurückgibt und
ausdr3, wenn
ausdr1 FALSE zurückgibt.
Siehe auch strcasecmp(), strcmp(), Array-Operatoren und den Abschnitt über Typen.
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.
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.
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.
PHP unterstützt Prä- und Post-Inkrement- und Dekrementoperatoren im Stil der Programmiersprache C.
| 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
*/
?>
| 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.)
Beispiel #1 Logische Operatoren dargestellt
<?php
// --------------------
// foo() wird nie aufgerufen werden, da die Operatoren umgangen werden
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
// --------------------
// "||" hat eine größere Priorität als "or"
// Das Ergebnis des Ausdrucks (false || true) wird $e zugewiesen
// Funktioniert wie: ($e = (false || true))
$e = false || true;
// Die Konstante "false" wird $f zugewiesen und danach wird true ignoriert
// Funktioniert wie: (($e = false) or true)
$f = false or true;
var_dump($e, $f);
// --------------------
// "&&" hat eine größere Priorität als "and"
// Das Ergebnis des Ausdrucks (true && false) wird $g zugewiesen
// Funktioniert wie: ($g = (true && false))
$g = true && false;
// Die Konstante "true" wird $h zugewiesen und danach wird false ignoriert
// Funktioniert wie: (($h = true) and false)
$h = true and false;
var_dump($g, $h);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
bool(true) bool(false) bool(false) bool(true)
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.
| 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);
?>
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(1 => "Banane", "0" => "Apfel");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>
Siehe auch die Abschnitte über Arrays und Array-Funktionen.
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:
Siehe auch get_class() und is_a().
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.
(PHP 4, PHP 5)
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, falls $a größer als $b ist, 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.
(PHP 4, PHP 5)
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 Programmcode 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";
}
?>
FALSE ausgewertet
wurden (siehe auch elseif).
(PHP 4, PHP 5)
elseif, wie der Name schon sagt, ist eine Kombination aus if und else. Wie else erweitert es eine if-Kontrollstruktur, um alternative Befehle auszuführen, wenn die ursprüngliche if-Bedingung nicht zutrifft. Im Gegensatz zu else werden die Alternativ-Befehle aber nur ausgeführt, wenn die elseif-Bedingung zutrifft. Der folgende Beispielcode gibt a ist größer als b, a ist gleich groß wie b oder a ist kleiner als b aus:
<?php
if ($a > $b) {
echo "a is größer als b";
} elseif ($a == $b) {
echo "a ist gleich groß wie b";
} else {
echo "a ist kleiner als b";
}
?>
Innerhalb einer if-Kontrollstruktur können mehrere elseif-Strukturen benutzt werden. Die erste, deren Bedingung zutrifft, wird ausgeführt. In PHP kann ebenfalls als Schlüsselwort 'else if' (in zwei Wörtern) benutzt werden, was sich komplett identisch wie 'elseif' (in einem Wort) verhält. Die syntaktische Bedeutung ist geringfügig anders (ähnlich wie in C), aber das Ergebnis ist, dass beide sich exakt genauso verhalten.
Der elseif-Teil wird nur ausgeführt, wenn die vorhergehende
if-Bedingung und alle vorhergehenden elseif-Bedingungen
nicht zutrafen (FALSE) und die aktuelle elseif-Bedingung
zutrifft (TRUE).
Hinweis: Achtung: elseif und else if verhalten sich nur gleich, wenn geschwungene Klammern verwendet werden, wie im obigen Beispiel. Wenn ein Doppelpunkt zur Definition der if/elseif-Bedingungen benutzt wird, darf else if nicht in zwei Wörtern geschrieben werden, oder PHP wird das Skript mit einem Parse Error abbrechen.
<?php
/* Falsch: */
if($a > $b):
echo $a." ist größer als ".$b;
else if($a == $b): // Funktioniert nicht.
echo "Die vorige Zeile wird einen Parse Error verursachen.";
endif;
/* Richtig: */
if($a > $b):
echo $a." ist größer als ".$b;
elseif($a == $b): // elseif in einem Wort!
echo $a." ist gleich groß wie ".$b;
else:
echo $a." ist weder größer als noch gleich wie ".$b;
endif;
?>
(PHP 4, PHP 5)
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;
?>
Hinweis:
Das Vermischen unterschiedlicher Schreibweisen im selben Kontrollblock ist nicht unterstützt.
(PHP 4, PHP 5)
while-Schleifen sind der einfachste Typ von Schleifen in PHP. Sie verhalten sich wie ihre Pendants in C. Die Grundform einer while-Schleife ist:
while (bedingung)
anweisung
Die Bedeutung einer while-Schleife ist simpel. Die Schleife weist PHP an, die untergeordnete(n) Anweisung(en) wiederholt auszuführen, solange die while-Bedingung zutrifft. Die Bedingung wird jedes Mal am Anfang der Schleife überprüft, Das bedeutet, dass die Ausführung der untergeordneten Anweisungen nicht stoppt, auch wenn sich der Wahrheitsgehalt der Bedingung zwischendurch ändert (jedes Mal, wenn PHP die Anweisungen ausführt, handelt es sich um eine Runde). Wenn die while-Bedingung von Anfang an nicht zutrifft, werden die untergeordneten Anweisung nicht ein einziges Mal ausgeführt.
Wie bei if-Abfragen können mehrere Statements innerhalb der selben Schleife mit geschleiften Klammern oder mithilfe der alternativen Syntax gruppiert werden:
while (bedingung):
anweisung
...
endwhile;
Die folgenden Beispiele sind identisch und geben die Zahlen von 1 bis 10 aus:
<?php
/* Beispiel 1 */
$i = 1;
while ($i <= 10) {
echo $i++; /* der ausgegebene Wert ist $i bevor
er erhöht wird (post-increment) */
}
/* Beispiel 2 */
$i = 1;
while ($i <= 10):
echo $i;
$i++;
endwhile;
?>
(PHP 4, PHP 5)
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.
(PHP 4, PHP 5)
for-Schleifen sind die komplexesten Schleifen in PHP. Sie verhalten sich wie ihre Pendants in C. Die Syntax einer for-Schleife ist:
for (expr1; expr2; expr3)
statement
Der erste Ausdruck (expr1) wird vor Ausführung der Schleife ausgeführt.
Am Anfang jedes Schleifendurchlaufs wird die Anweisung expr2
ausgeführt. Wenn diese wahr ist (TRUE), wird die Schleife fortgesetzt
und die untergeordneten Anweisungen werden ausgeführt.
Andernfalls (FALSE) endet die Ausführung der Schleife.
Am Ende jedes Schleifendurchlaufs wird die Anweisung expr3 ausgeführt.
Jede der Anweisungen kann leer sein oder mehrere durch Kommata getrennte
Anweisungen enthalten. In letzterem Fall werden bei expr2
zwar alle Anweisungen ausgeführt aber das Ergebnis wird nur von der letzten
Anweisung verwendet.
Wenn expr2 leer ist, läuft die Schleife unendlich
lange (PHP nimmt dies als TRUE, ebenso wie C). Dies ist nicht so sinnlos,
wie es scheint, denn oft will man die Schleife manuell mit break
beenden.
Die folgenden Beispiele geben alle die Zahlen 1 bis 10 aus:
<?php
/* Beispiel 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* Beispiel 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* Beispiel 3 */
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* Beispiel 4 */
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
Sicher ist das erste das hübscheste (vielleicht auch das vierte), aber in manchen Fällen sind leere Anweisungen in for-Schleifen durchaus praktisch.
PHP untersützt bei for-Schleifen ebenfalls die alternative "Doppelpunkt-Syntax":
for (expr1; expr2; expr3):
statement
...
endfor;
Es ist üblich, dass Arrays wie in dem folgenden Beispiel durchlaufen werden.
<?php
/*
* Dies ist ein Array mit Daten, die wir in der
* Schleife verändern wollen.
*/
$personen = Array(
Array('name' => 'Hans', 'salt' => 856412),
Array('name' => 'Martin', 'salt' => 215863)
);
for($i = 0; $i < sizeof($personen); ++$i)
{
$personen[$i]['salt'] = rand(000000, 999999);
}
?>
Das Problem liegt in der zweiten Anweisung: Dieses Programmbeispiel kann sehr langsam sein, weil die Größe des Arrays bei jedem Schleifendurchlauf berechnet wird. Da sich die Größe nie ändert, kann das Programm optimiert werden, indem man die Größe in eine Variable speichert und diese anstelle von sizeof nutzt, wie im folgenden Beispiel:
<?php
$personen = Array(
Array('name' => 'Hans', 'salt' => 856412),
Array('name' => 'Martin', 'salt' => 215863)
);
for($i = 0, $groesse = sizeof($personen); $i < $groesse; ++$i)
{
$personen[$i]['salt'] = rand(000000, 999999);
}
?>
(PHP 4, PHP 5)
The foreach construct provides an easy way to iterate over arrays. foreach works only on arrays and objects, 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:
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 iteration, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next iteration, you'll be looking at the next element).
The second form will additionally assign the current element's key to the $key variable on each iteration.
It is possible to customize object iteration.
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.
As foreach relies on the internal array pointer changing it within the loop may lead to unexpected behavior.
In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
?>
Referencing $value is only possible if the iterated array can be referenced (i.e. if it is a variable). The following code won't work:
<?php
foreach (array(1, 2, 3, 4) as &$value) {
$value = $value * 2;
}
?>
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(1, 2, 3, 17);
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(1, 2, 3, 17);
$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(1, 2, 3, 4, 5) as $v) {
echo "$v\n";
}
?>
(PHP 4, PHP 5)
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;
}
}
?>
(PHP 4, PHP 5)
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.
Hinweis:
continue 0; und continue 1; sind äquivalent zu continue;.
<?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 "Mittlere<br />\n";
while (1) {
echo "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 continue print "$i\n"; als ein Ausdruck ausgeführt wird und print somit nur aufgerufen wird, wenn $i == 2 ist. (Der Rückgabewert von print, welcher immer 1 ist, wird an continue als numerische Argument übergeben.)
(PHP 4, PHP 5)
Die switch Anweisung entspricht in etwa einer Folge von if Anweisungen die jeweils den gleichen Ausdruck prüfen. Es kommt oft vor, dass man dieselbe Variable (oder denselben Ausdruck) gegen viele verschiedene mögliche Werte prüfen und abhängig davon unterschiedlichen Code ausführen möchte. Genau hierfür wurde die switch Anweisung eingeführt.
Hinweis: Beachten Sie, dass im Unterschied zu einigen anderen Sprachen die continue Anweisung auch auf switch anwendbar ist und sich ähnlich wie break verhält. Wenn Sie ein switch innerhalb einer Schleife verwenden und mit dem nächsten Schleifendurchlauf beginnen wollen so müssen Sie in diesem Fall continue 2 angeben.
Hinweis:
Beachten Sie auch, dass switch/case typschwache Vergleiche durchführt.
Die folgenden beiden Beispiele zeigen zwei verschiedene Wege um das gleiche Verhalten zu erreichen. Eines benutzt eine Folge von if und elseif Anweisungen, das andere eine switch Anweisung:
Beispiel #1 switch Anweisung
<?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 gestattet den Vergleich mit 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;
}
?>
Um Fehler zu vermeiden ist es wichtig zu verstehen wie eine switch Anweisung ausgeführt wird. Eine switch Anweisung wird zeilenweise (genauer: Anweisung für Anweisung) ausgewertet. Zunächst einmal wird überhaupt kein Code ausgeführt. Erst wenn eine case Anweisung gefunden wird die dem Wert des an switch übergebenen Ausdrucks entspricht beginnt PHP tatsächlich die folgenden Anweisungen auszuführen. Die Ausführung wird fortgesetzt bis das Ende der switch Anweisung erreicht ist oder bis PHP bei der Ausführung auf eine break Anweisung stößt. Wenn Sie am Ende eines case Blocks kein break setzen so wird die Ausführung mit dem nächsten case fortgesetzt, z.B.:
<?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;
}
?>
(PHP 4, PHP 5)
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
?>
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.
Nicht alle Statements führen zu einem Tick-Event. So etwa Konditionen und Argumente.
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 Tick Nutzungsbeispiel
<?php
declare(ticks=1);
// Funktion, welche bei jeden Tick-Event aufgerufen wird
function tick_handler()
{
echo "tick_handler() aufgerufen\n";
}
register_tick_function('tick_handler');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
?>
Beispiel #2 Tick Nutzungsbeispiel
<?php
function tick_handler()
{
echo "tick_handler() aufgerufen\n";
}
$a = 1;
tick_handler();
if ($a > 0) {
$a += 2;
tick_handler();
print($a);
tick_handler();
}
tick_handler();
?>
Siehe auch register_tick_function() und unregister_tick_function().
Das Encoding eines Skripts kann pro Skript mittels der Encoding-Direktive festgelegt werden.
Beispiel #3 Das Encoding eines Skripts deklarieren.
<?php
declare(encoding='ISO-8859-1');
// hier folgt der Code
?>
Die einzig zulässige Syntax für ein declare, das mit Namespaces kombiniert wird, ist declare(encoding='...');, wobei ... der Name des Encodings ist. declare(encoding='...') {} führt zu einem 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.
PHP bietet abgesehen von phpinfo() keine Möglichkeit zur Laufzeit herauszufinden, ob es mit --enable-zend-multibyte kompiliert wurde.
(PHP 4, PHP 5)
Wenn innerhalb einer Funktion aufgerufen, beendet return augenblicklich die Ausführung der Funktion und übergibt den Parameter als Rückgabewert der Funktion. return beendet ebenfalls die Ausführung von Code innerhalb von eval() oder einer Datei.
Wenn im globalen Raum aufgerufen, endet die Ausführung des Skripts. Wenn das aktuelle Skript mit include oder require eingebunden ist, endet nur die Ausführung der eingebundenen Datei und der Wert, der an return übergeben wurde, wird zum Rückgabewert des Aufrufs von include/require. Wenn return im Hauptskript aufgerufen wird, endet das gesamte Skript. Wenn das aktuelle Skript durch die Konfigurationsdirektiven auto_prepend_file oder auto_append_file aufgerufen wurde, wird die Ausführung dieses Skripts beendet.
Für mehr Informationen, siehe die Dokumentation zu Rückgabewerten.
Hinweis: Weil return ein Sprachkonstrukt und keine Funktion ist, sind die Klammern um das Argument optional. Es ist üblich, sie auszulassen, und dies wird ausdrücklich empfohlen, weil PHP in diesem Fall weniger zu tun hat.
Hinweis: Wenn kein Parameter übergeben wird, dürfen die Klammern nicht gesetzt werden und
NULLwird zurückgegeben. Der Aufruf von return mit Klammern aber ohne Parameter verursacht einen Parse Error.
Hinweis: Das Zurückgeben von Referenzen funktioniert nicht, wenn Klammern um den Parameter verwendet werden. Bei return ($a); wird nicht die Variable $a sondern das Ergebnis des Ausdrucks ($a) zurückgegeben (was selbstverständlich der Wert von $a ist).
(PHP 4, PHP 5)
require entspricht im Wesentlichen
include, wirft aber im Fehlerfall einen
E_COMPILE_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.
(PHP 4, PHP 5)
include bindet eine angegebene Datei ein und führt sie aus.
Die folgende Dokumentation trifft ebenfalls auf require zu.
Dateien werden unter dem angegebenen Pfad gesucht, oder, wenn keiner gegeben ist, im include_path. Wenn die Datei auch im include_path nicht gefunden werden kann, sucht include noch in dem Verzeichnis der aufrufenden Datei und dem aktuellen Arbeitsverzeichnis. Wenn keine Datei gefunden wurde, erzeugt include eine Warnung, im Gegensatz dazu erzeugt require in diesem Fall einen Fatal Error.
Wenn ein Pfad angegeben ist — ob absolut (beginnend mit einem Laufwerksbuchstaben oder \ auf Windows oder / auf Unix/Linux) oder relativ (beginnend mit . oder ..), wird der include_path ignoriert. Wenn der Dateiname beispielsweise mit ../ beginnt, sucht der Parser im übergeordneten Verzeichnis des aktuellen Arbeitsverzeichnisses nach der Datei.
Mehr Informationen über den Umgang PHPs mit dem Einbinden von Dateien im Zusammenhang mit dem include_path, siehe die Dokumentation zu include_path.
Wenn eine Datei eingebunden wird, wird für den enthaltenen Code der gleiche Geltungsbereich für Variablen übernommen, der für die Zeile gilt, die den include-Befehl aufruft. Jede für diese Zeile verfügbare Variable ist in dem eingebundenen Code verfügbar und jede Variable, die in der eingebundenen Datei gesetzt wird, steht dem weiteren aufrufenden Skript zur Verfügung, als wäre sie in der Zeile, in der include aufgerufen wird, definiert worden. Alle Funktionen und Klassen in der eingebundenen Datei gehören zum globalen Geltungsbereich.
Beispiel #1 Grundlegendes include-Beispiel
vars.php
<?php
$farbe = 'grün';
$frucht = 'Apfel';
?>
test.php
<?php
echo "Der $frucht ist $farbe."; // Der ist .
include 'vars.php';
echo "Der $frucht ist $farbe"; // Der Apfel ist grün
?>
Wenn include innerhalb einer Funktion aufgerufen wird, verhält sich der gesamte Code aus der aufgerufenen Datei wie wenn er in der Funktion stände. Folglich hat er den selben Variablen-Gültigkeitsbereich wie diese Funktion. Eine Ausname von dieser Regel sind Magische Konstanten, die geparst werden, bevor die Einbindung durchgeführt wird.
Beispiel #2 Include in Funktionen
<?php
function foo()
{
global $farbe;
include 'vars.php';
echo "Der $frucht ist $farbe.";
}
/* vars.php ist im Gültigkeitsbereich von foo(), *
* sodass $frucht außerhalb von diesem Bereich *
* nicht verfügbar ist. $farbe ist auch außerhalb *
* verfügbar, weil es als global deklariert ist. */
foo(); // Der Apfel ist grün.
echo "Der $frucht ist $farbe."; // Der ist grün.
?>
Wenn eine Datei eingebunden wird, wechselt der Parser am Anfang der eingebundenen Datei in den HTML-Modus und am Ende wieder in den PHP-Modus. Aus diesem Grund muss jeder PHP-Code in der eingebundenen Datei mit gültigen PHP-Start- und -Endtags umschlossen sein.
Wenn "fopen-URL-Wrapper" aktiviert sind (was sie in der Standard-Konfiguration sind), kann die einzubindende Datei mit einem URL (über HTTP oder ein anderes unterstütztes Protokoll - siehe Unterstützte Protokolle and Wrappers für eine Liste unterstützter Protokolle) anstall eines lokalen Pfades eingebunden werden. Wenn der Zielserver die Zieldatei als PHP-Code interpretiert, können Variablen an die einzubindende Datei mithilfe von HTTP-GET-Query-Strings übergeben werden, obwohl dies nicht das selbe ist, wie wenn man die Datei einbindet und sie den Variablenbereich übernimmt; das Skript läuft weiterhin auf dem entfernten Server und das Ergebnis wird in das lokale Skript eingebunden.
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 über HTTP
<?php
/* Dieses Beispiel setzt voraus, dass www.example.com konfiguriert ist, *
* .php-Dateien als PHP-Skripte zu interpretieren und .txt-Dateien *
* nicht. Des Weiteren meint 'Funktioniert' hier, dass die Variablen *
* $foo und $bar innerhalb der eingebundenen Datei verfügbar sind. */
// Funktioniert nicht; file.txt wird von www.example.com nicht als PHP interpretiert
include 'http://www.example.com/file.txt?foo=1&bar=2';
// Funktioniert nicht; hier wird nach einer Datei mit dem Namen
// 'file.php?foo=1&bar=2' im lokalen Dateisystem gesucht.
include 'file.php?foo=1&bar=2';
// Funktioniert
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Funktioniert
include 'file.php'; // Funktioniert
?>
Die entfernte Datei mag vom entfernten Server (je nach Konfiguration) geparst werden oder nicht, aber sie muss weiterhin ein gültiges PHP-Skript ausgeben, weil die Ausgabe auf dem lokalen Server als PHP ausgeführt wird. Wenn die Ausgabe des vom entfernten Server nur ausgegeben werden soll, ist readfile() die bessere Wahl. Andernfalls muss sehr gut acht gegeben werden, dass das entfernte Skript sicher gültigen und erwünschten Code ausgibt!
Siehe auch Entfernte Dateien, fopen() und file() für verwandte Informationen.
Umgang mit Rückgabewerten: Es ist möglich, in der eingebundenen Datei return aufzurufen um den Ablauf dieser Datei abzubrechen und zu dem einbindenden Skript zurückzukehren. Der zurückgegebene Wert kann als Rückgabewert des include-Aufrufs abgefragt werden, wie bei einer normalen Funktion. Dies ist beim Einbinden entfernter Dateien nur möglich, wenn die entfernte Datei mit gültigen PHP Start- und Endtags umschlossen ist (wie bei jeder lokalen Datei). Es ist möglich, die benötigten Variablen innerhalb diese Tags zu deklarieren und sie werden im einzubindenden Skript am dem Punkt, an dem die Datei eingebunden wird, verfügbar.
Weil include eine spezielles Sprachkonstrukt ist, sind die Klammern um das Argument optional. Beim Vergleichen des Rückgabewerts muss allerdings aufgepasst werden (siehe Beispiel).
Beispiel #4 Vergleichen des Rückgabewerts von include
<?php
// funktioniert nicht, wird als include(('vars.php') == 'OK') behandelt
// also als include('')
if (include('vars.php') == 'OK') {
echo 'OK';
}
// Funktioniert
if ((include 'vars.php') == 'OK') {
echo 'OK';
}
?>
Beispiel #5 include und return
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // gibt 'PHP' aus
$bar = include 'noreturn.php';
echo $bar; // gibt 1 aus
?>
$bar hat den Wert 1, weil das Einbinden
erfolgreich war. Die erste Datei nutzt return,
was die andere nicht tut. Wenn das Einbinden fehlschlägt, wird FALSE
zurückgegeben und ein Fehler der Kategorie E_WARNING
erzeugt.
Wenn in der eingebundenen Datei Funktionen definiert werden, können sie in der einbindenden Datei genutzt werden, unabhängig davon, ob sie vor oder nach return definiert werden. Wenn eine Datei zweimal eingebunden wird, erzeugt PHP 5 einen fatalen Fehler, weil Funktionen bereits definiert wurden, während PHP 4 Funktionen, die nach return definiert werden, ignoriert. Es ist empfohlen, include_once zu nutzen, anstatt zu überprüfen, ob die Datei bereits eingebunden wurde, und abhängig davon innerhalb der eingebundenen Datei zu handeln.
Ein anderer Weg, die Ausgabe eines eingebundenen Skriptes in eine Variable zu schreiben, ist das Arbeiten mit den Funktionen zur Steuerung des Ausgabepuffers. Beispiel:
Beispiel #6 Nutzung des Ausgabepuffers um eine Datei "in einen String" einzubinden
<?php
$string = get_include_contents('somefile.php');
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
return ob_get_clean();
}
return false;
}
?>
Um automatisch Dateien in Skripte einzubinden, siehe auch die Konfigurationsdirektiven auto_prepend_file und auto_append_file in php.ini.
Hinweis: Da dies ein Sprachkonstrukt und keine Funktion ist, können Sie dieses nicht mit Variablenfunktionen verwenden.
Siehe auch require, require_once, include_once, get_included_files(), readfile(), virtual(), und include_path.
(PHP 4, PHP 5)
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.
(PHP 4, PHP 5)
include_once bindet eine angegebene Datei ein und führt sie als PHP-Skript aus. Dieses Verhalten ist identisch zu include, mit dem einzigen Unterschied, dass die Datei, wenn sie bereits eingebunden wurde, nicht erneut eingebunden wird. Wie der Name schon sagt, wird sie nur einmal eingebunden werden.
include_once kann beispielsweise benutzt werden, wenn die selbe Datei an mehreren Stellen eingebunden wird, um Problemen durch erneute Definitionen von Funktionen, erneute Zuweisung von Variablen oder ähnliches zu vermeiden.
Für die Funktionsweise der Funktion, siehe die Dokumentation zu include.
Hinweis:
Mit PHP 4 wird auf Betriebssystemen, die bei Dateinamen nicht zwischen Groß- und Kleinschreibung unterscheiden (wie Windows), bei _once dennoch zwischen Groß- und Kleinschreibung unterschieden, wie das folgende Beispiel zeigt:
Beispiel #1 include_once mit einem case-insensitive Betriebssystem und PHP 4
<?php
include_once "a.php"; // a.php wird eingebunden.
include_once "A.php"; // a.php wird nochmal eingebunden! (Nur in PHP 4)
?>Dieses Verhalten hat sich in PHP 5 geändert, so dass zum Beispiel bei Windows der Pfad zuerst normalisiert wird, sodass C:\PROGRA~1\A.php und C:\Program Files\a.php als das selbe erkannt und nur einmal eingebunden werden.
(PHP 5 >= 5.3.0)
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. Hierbei handelt es sich jedoch nicht um ein vollständig uneingeschränktes goto: Die Zielanweisung muss in der selben Datei und im selben Kontext liegen, d.h. dass weder aus einer Funktion oder Methode herausgesprungen werden kann, noch in sie hineingesprungen. Weiterhin kann nicht in eine Schleifen- oder switch-Anweisung hineingesprungen werden. Es ist jedoch möglich aus diesen hinauszuspringen, weshalb goto häufig als Ersatz für ein mehrstufiges break verwendet wird.
Beispiel #1 goto-Beispiel
<?php
goto a;
echo 'Foo';
a:
echo 'Bar';
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Bar
Beispiel #2 goto Schleifenbeispiel
<?php
for ($i=0, $j=50; $i<100; $i++) {
while ($j--) {
if ($j==17) goto end;
}
}
echo "i = $i";
end:
echo 'j hit 17';
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
j hit 17
Beispiel #3 Das wird nicht funktionieren
<?php
goto loop;
for ($i=0, $j=50; $i<100; $i++) {
while ($j--) {
loop:
}
}
echo "$i = $i";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Fatal error: 'goto' into loop or switch statement is disallowed in script on line 2
Hinweis:
Der goto-Operator ist ab PHP 5.3 verfügbar.
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]*.
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 ($makefoo) foo();
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);
}
}
?>
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];
}
?>
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.'
?>
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:
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 Parameter mit Vorgabewert rechts von den Parametern ohne Vorgabewert stehen müssen - 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:
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:
Hinweis: Das Setzen von Standardwerten für Argumente, die als Referenz übergeben werden ("passed by reference") wird seit PHP 5 unterstützt.
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.
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 (0, 1, 2);
}
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.
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().
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
NULLzurü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, 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($total, 2);;
}
}
$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.
Für PHP 5 wurde das Objektmodell neu geschrieben, um bessere Performance und mehr Features zu ermöglichen. Dies war ein Major Change zu PHP 4. PHP 5 hat ein komplettes Objektmodell.
Unter den Features von PHP 5 finden sich unter anderem Sichtbarkeit, abstrakte und finale Klassen und Methoden sowie magische Methoden, Interfaces, Cloning und Typehinting.
PHP behandelt Objekte auf die gleiche Art wie Referenzen oder Handles, das bedeutet, dass jede Variable eine Objektreferenz statt einer Kopie des gesamten Objekts enthält. Lesen Sie dazu auch den Abschnitt Objekte und Referenzen.
Siehe auch Userland Naming Guide.
Einfache Klassendefinitionen beginnen mit dem Schlüsselwort class, gefolgt von einem Klassennamen, gefolgt von einem Paar geschweifter Klammern, die die Definitionen der Eigenschaften und Methoden der Klasse enthalten.
Der Klassenname kann jeder gültige Bezeichner sein, der kein von 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.
Um eine Instanz einer Klasse zu erzeugen, muss das new-Schlüsselwort verwendet werden. Ein Objekt wird immer erzeugt, 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).
Wenn ein string mit dem Namen einer Klasse mit new genutzt wird, wird eine neue Instanz dieser Klasse erzeugt. Falls sich die Klasse in einem Namensraum befindet, muss der vollqualifizierte Name hierfür genutzt werden.
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
$instanz = new SimpleClass();
$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"
}
Mit PHP 5.3.0 wurden neue Möglichkeiten zur Erzeugung von Instanzen eines Objekts eingeführt:
Beispiel #5 Erzeugen neuer Objekte
<?php
class Test
{
static public function getNew()
{
return new static;
}
}
class Child extends Test
{}
$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);
$obj3 = Test::getNew();
var_dump($obj3 instanceof Test);
$obj4 = Child::getNew();
var_dump($obj4 instanceof Child);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(true) bool(true)
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.
Wenn Methoden überschrieben werden, sollte die Parametersignatur gleich
bleiben; andernfalls wird PHP einen E_STRICT-Fehler
generieren. Dies gilt nicht für den Konstruktor, der das Überschreiben
mit unterschiedlichen Parameter erlaubt.
Beispiel #6 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
Variablen in einer Klasse werden "Eigenschaften" genannt. Die Begriffe "Attribute" oder "Felder" werden ebenfalls verwendet, um sich auf das selbe Konzept zu beziehen, aber innerhalb dieser Referenz wird der Begriff "Eigenschaften" verwendet. Diese werden definiert, indem man eines der Schlüsselwörter public, protected oder private gefolgt von einer regulären Variablendeklaration verwendet. Die Deklaration darf eine Initialisierung des Variablenwertes beinhalten, der zu setzende Wert muss dabei allerdings ein konstanter Wert sein - d.h. dieser muss zum Kompilierungszeitpunkt ausgewertet werden können und darf nicht von Informationen abhängen, die erst zur Laufzeit zur Verfügung stehen.
Siehe Sichtbarkeit für mehr Informationen zur Bedeutung von public, protected und private.
Hinweis:
Um Abwärtskompatibilität mit PHP 4 zu gewährleisten, akzeptiert PHP 5 weiterhin die Verwendung des Schlüsselwortes var zur Deklaration von Eigenschaften anstelle von (oder zusätzlich zu) public, protected oder private. var wird jedoch nicht mehr benötigt. In den Versionen von PHP 5.0 bis 5.1.3 wurde die Verwendung von var als veraltet betrachtet und erzeugte eine
E_STRICT-Warnung, aber seit PHP 5.1.3 ist dies nicht länger veraltet und erzeugt keine Warnung.Wenn eine Eigenschaft mittels var anstelle von public, protected oder private deklariert wird, so wird PHP 5 diese Eigenschaft so behandeln, als wäre sie mittels public deklariert worden.
Innerhalb der Methoden einer Klasse kann auf Eigenschaften, Konstanten und Methoden in der Form $this->Eigenschaft (wobei Eigenschaft der Name der Eigenschaft ist) zugegriffen werden, solange nicht aus dem Kontext einer statischen Methode auf eine statische Eigenschaft zugegriffen wird. In diesem Fall kann mittels self::$Eigenschaft darauf zugegriffen werden. Siehe auch Static-Schlüsselwort für mehr Informationen zu diesem Thema.
Die Pseudo-Variable $this ist innerhalb jeder Klassenmethode verfügbar, wenn diese Methode im Kontext eines Objektes aufgerufen wird. $this ist eine Referenz auf das aufrufende Objekt (üblicherweise das Objekt, zu dem diese Methode gehört; möglicherweise ein anderes Objekt, wenn die Methode statisch aus einem sekundären Objekt aufgerufen wird).
Beispiel #1 Deklaration von Eigenschaften
<?php
class SimpleClass
{
// Ungültige Deklarationen von Eigenschaften:
public $var1 = 'Hallo ' . 'Welt';
public $var2 = <<<EOD
Hallo Welt
EOD;
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar;
// Gültige Deklarationen von Eigenschaften:
public $var6 = myConstant;
public $var7 = array(true, false);
// Dies ist nur in PHP 5.3.0 oder später gültig.
public $var8 = <<<'EOD'
Hallo Welt
EOD;
}
?>
Hinweis:
Es gibt einige nützliche Funktionen für den Umgang mit Klassen und Objekten. Siehe hierzu Klassen- und Objekt-Funktionen.
Im Gegensatz zur Heredoc-Syntax kann die Nowdoc-Syntax in jedem Kontext für statische Daten verwendet werden, einschließlich der Deklaration von Eigenschaften.
Beispiel #2 Beispiel für ein nowdoc zur Initialisierung einer Eigenschaft
<?php
class foo {
// Seit PHP 5.3.0
public $bar = <<<'EOT'
bar
EOT;
}
?>
Hinweis:
Unterstützung für Nowdoc wurde in PHP 5.3.0 hinzugefügt.
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, Klassenattribute, 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.
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.
spl_autoload_register() bietet eine flexiblere Alternative zum automatischen Laden von Klassen an. Aus diesem Grund wird von der Verwendung von __autoload() abgeraten und diese Funktion könnte zukünftig als veraltet gekennzeichnet oder gar entfernt werden.
Hinweis:
Vor der Version 5.3.0 waren Exceptions, die in einer __autoload-Funktion geworfen wurden nicht in einem Catch- Block fangbar und führten zu einem fatalen Fehler. Seit 5.3.0+ können Exceptions, die in einer __autoload-Funktion geworfen wurden, unter der folgenden Bedingung in einem Catch-Block gefangen werden. Wenn eine selbst definierte Exception geworfen wird, so muss die Klasse dieser Exception bereits verfügbar sein. Die __autoload- Funktion darf rekursiv verwendet werden, um diese Exceptionklasse zu laden.
Hinweis:
Autoloading ist nicht verfügbar, wenn man PHP im CLI interaktiven Modus betreibt.
Hinweis:
Wird der Klassenname verwendet, z.B. in der Funktion call_user_func(), so ist zu beachten, dass er gefährliche Zeichen wie z.B. ../ enthalten kann. Es wird daher empfohlen keine Benutzereingaben an solche Funktionen weiterzugeben oder zumindest die Eingaben in __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) {
include $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 ...
*/
?>
Beispiel #3 Autoloading mit Ausnahmebehandlung für 5.3.0+
In diesem Beispiel wird eine Exception geworfen und ein try/catch-Block demonstriert.
<?php
function __autoload($name) {
echo "Möchte $name laden.\n";
throw new Exception("Kann $name nicht laden.");
}
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Möchte NonLoadableClass laden. Kann NonLoadableClass nicht laden.
Beispiel #4 Autoloading mit Ausnahmebehandlung für 5.3.0+ mit fehlender eigener Exception
In diesem Beispiel wird eine Exception geworfen für eine nicht ladbare eigene Exception.
<?php
function __autoload($name) {
echo "Möchte $name laden.\n";
throw new MissingException("Kann $name nicht laden.");
}
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Möchte NonLoadableClass laden. Möchte MissingException laden. Fatal error: Class 'MissingException' not found in testMissingException.php on line 4
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();
?>
Aus Gründen der Abwärtskompatibilität sucht PHP 5, falls die Klasse keine __construct() Methode beistzt, nach einem Konstruktur des alten Stils, d.h. einer Methode mit dem selben Namen wie die Klasse. Der einzige Fall in dem somit Kompatibilitätsprobleme auftreten können, ist wenn die Klasse eine Methode __construct() definiert, welche jedoch für andere Zwecke benutzt wird.
Im Gegensatz zu anderen Methoden, generiert PHP keinen E_STRICT
Fehler, wenn __construct() in einer Kindklasse
andere Parameter definiert, als die __construct()
Methode der Elternklasse.
Seit PHP 5.3.3 werden Methoden, welche mit dem Klassennamen übereinstimmen, nicht länger als Konstruktoren behandelt, wenn die Klasse sich in einem Namespace befindet. Klassen, welche sich nicht in einem Namespace befinden, betrifft dies jedoch nicht.
Beispiel #2 Konstruktoren in Klassen in Namespaces
<?php
namespace Foo;
class Bar {
public function Bar() {
// wird in PHP 5.3.0-5.3.2 als Konstruktor behandelt
// wird in PHP 5.3.3 und höher als reguläre Methode behandelt
}
}
?>
PHP 5 führt ein Destruktorkonzept ähnlich dem anderer objektorientierter Programmiersprachen wie C++ ein. Die Destruktormethode wird aufgerufen, sobald es keine weiteren Referenzen auf ein bestimmtes Objekt mehr gibt, oder in beliebiger Reihenfolge am Ende des Skripts.
Beispiel #3 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
Der Destruktor wird aufgerufen, wenn das Script mittels exit() abgebrochen wird. Wenn exit() innerhalb eines Destruktors aufgerufen wird, verhindert das die Ausführung von jeglichen weiteren Shutdown Routinen.
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.
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 Elternklassen und abgeleitete Klassen (sowie die Klasse, die das Element definiert). Private grenzt die Sichtbarkeit einzig auf die Klasse ein, die das Element definiert.
Klasseneigenschaften müssen als public, private oder protected definiert werden. Wenn sie mit var deklariert werden, werden sie als public definiert.
Beispiel #1 Eigenschaftendeklaration
<?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 die private-Methode
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, wird 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 erzeugt.
Klassenmethoden müssen mit public, private oder protected definiert werden. Methoden ohne jede explizite 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
?>
Objekte des gleichen Types haben untereinander Zugriff auf die als private und protected markierten Member, obwohl es sich nicht um die gleichen Instanzen handelt. Dies liegt daran, dass die Details über die Implementierung innerhalb solcher Objekte bekannt sind.
Beispiel #3 Zugriff auf als private markierte Member des gleichen Objekttyps
<?php
class Test
{
private $foo;
public function __construct($foo)
{
$this->foo = $foo;
}
private function bar()
{
echo 'Zugriff auf die private Methode';
}
public function baz(Test $other)
{
// Ändern der privaten Eigenschaft ist möglich:
$other->foo = 'Hallo';
var_dump($other->foo);
// Aufruf der privaten Methode ist ebenfalls möglich:
$other->bar();
}
}
$test = new Test('test');
$test->baz(new Test('other'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(5) "Hallo" Zugriff auf die private Methode +
Vererbung ist ein gängiges Prinzip der Programmierung und PHP verwendet dieses Prinzip in seinem Objektmodell. Dieses Prinzip beeinflusst die Art und Weise, in der mehrere Klassen und Objekte in Beziehung zueinander stehen.
Wenn man zum Beispiel von einer Klasse erbt, so erbt die Unterklasse alle Methoden der Sichtbarkeiten public und protected von der Vaterklasse. Wenn eine Klasse diese Methoden nicht überschreibt, wird die ursprüngliche Funktionalität beibehalten.
Dies ist nützlich, um Funktionalität zu definieren und zu abstrahieren und erlaubt es, zusätzliche Funktionalität in ähnlichen Objekten zu implementieren, ohne sämtliche gemeinsame Funktionalitäten neu implementieren zu müssen.
Hinweis:
Wenn Autoloading nicht verwendet wird, so müssen die Klassen definiert werden bevor sie verwendet werden. Wenn eine Klasse eine andere erweitert, so muss die Vaterklasse vor der Kindklasse deklariert werden. Diese Regel gilt für Klassen, die von anderen Klassen und Interfaces erben.
Beispiel #1 Beispiel für Vererbung
<?php
class foo
{
public function printItem($string)
{
echo 'Foo: ' . $string . PHP_EOL;
}
public function printPHP()
{
echo 'PHP ist großartig.' . PHP_EOL;
}
}
class bar extends foo
{
public function printItem($string)
{
echo 'Bar: ' . $string . PHP_EOL;
}
}
$foo = new foo();
$bar = new bar();
$foo->printItem('baz'); // Ausgabe: 'Foo: baz'
$foo->printPHP(); // Ausgabe: 'PHP ist großartig.'
$bar->printItem('baz'); // Ausgabe: 'Bar: baz'
$bar->printPHP(); // Ausgabe: 'PHP ist großartig.'
?>
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 drei speziellen Schlüsselwörter self, parent und static 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();
?>
Siehe auch ein Beispiel zur Bedeutung von $this, wenn nich statische Methoden statisch aufgerufen werden.
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();
?>
PHP 5 führt abstrakte Klassen und Methoden ein. Abstrakt definierte Klassen dürfen nicht instanziiert werden; wurde. Jede Klasse, die wenigstens eine abstrakte Methode enthält, muss ebenso abstrakt sein. Abstrakt definierte Methoden deklarieren nur die Signatur der Methode - sie können nicht die Implementierung definieren.
Wenn eine abstrakte Klasse abgeleitet wird, müssen alle in der Deklaration der Elternklasse abstrakt bezeichneten Methoden durch das Kind definiert werden. Zusätzlich müssen diese Methoden mit derselben (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. Außerdem müssen sich die Signaturen der Methoden sich entsprechen, d.h. die Type-Hints und die Anzahl der erforderlichen Parameter müssen gleich sein. Dies gilt seit PHP 5.4 auch für Konstruktoren. Vor 5.4 konnten Konstruktor-Signaturen voneinander abweichen.
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
Älterer Code, der keine nutzerdefinierten Klassen oder Funktionen mit dem Namen 'abstract' besitzt, sollte ohne Änderungen lauffähig sein.
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 dieselbe 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.
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 extends erweitert werden.
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.
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 b extends a
{
public function baz(Baz $baz);
}
// Dies Funktioniert
class c implements b
{
public function foo()
{
}
public function baz(Baz $baz)
{
}
}
// Dies funktioniert nicht und führt zu einem fatalen Fehler
class d 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 c extends a, b
{
public function baz();
}
class d implements c
{
public function foo()
{
}
public function bar()
{
}
public function baz()
{
}
}
?>
Beispiel #4 Interfaces mit Konstanten
<?php
interface a
{
const b = '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 b implements a
{
const b = 'Class constant';
}
?>
Siehe auch den instanceof-Operator.
Seit PHP 5.4.0 gibt es in PHP eine Methode der Wiederverwendung von Code, die Traits genannt wird.
Traits ist ein Mechanismus zur Wiederverwendung von Code, der in Programmiersprachen mit einfacher Vererbung wie PHP verwendet wird. Ein Trait kann verwendet werden die Beschränkungen der einfachen Vererbung aufzuweichen indem er erlaubt, dass Mengen von Methoden frei in mehreren unabhängigen Klassen die in verschiedenen Klassenhierarchien stecken wiederzuverwenden. Die Semantik der Kombination von Traits und Klassen ist so definiert, dass die Komplexität reduziert wird und die üblichen Probleme vermeidet, die mit Mehrfachvererbung und Mixins in Verbindung gebracht werden.
Ein Trait hat Ähnlichkeit mit einer Klasse ist aber nur dafür vorgesehen Funktionalität in einer feingranularen und konsistenten Art und Weise zu bündeln. Es ist nicht möglich einen Trait alleinstehend zu instantiieren. Es handelt sich um einen Zusatz zur traditionellen Vererbung und erlaubt horizontale Komposition von Verhaltensweisen, d.h. die Verwendung von Klassenmethoden ohne Vererbung vorauszusetzen.
Beispiel #1 Trait Beispiel
<?php
trait ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
/* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo;
/* ... */
}
?>
Methoden der aktuellen Klasse überschreiben Methoden, welche von Traits definiert wurden. Jene wiederum überschreiben von Elternklassen geerbte Methoden.
Beispiel #2 Rangfolge Beispiel
Die Methode sayHello der Basisklasse wird durch die gleichnamige Methode aus dem Trait überschrieben.
<?php
class Base {
public function sayHello() {
echo 'Hallo ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'Welt!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Hallo Welt!
Beispiel #3 Weiteres Beispiel für Rangfolge
<?php
trait HelloWorld {
public function sayHello() {
echo 'Hallo Welt!';
}
}
class TheWorldIsNotEnough {
use HelloWorld;
public function sayHello() {
echo 'Hallo Universum!';
}
}
$o = new TheWorldIsNotEnough();
$o->sayHello();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Hallo Universum!
Mehrere Traits können durch eine kommaseparierte Auflistung im Use- Statement zu einer Klasse hinzugefügt werden.
Beispiel #4 Verwendung mehrerer Traits
<?php
trait Hello {
public function sayHello() {
echo 'Hallo ';
}
}
trait World {
public function sayWorld() {
echo ' Welt';
}
}
class MyHelloWorld {
use Hello, World;
public function sayExclamationMark() {
echo '!';
}
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Hallo Welt!
Falls zwei Traits eine Methode mit gleichem namen einfügen, so wird ein Fatal Error erzeugt, wenn der Konflikt nicht explizit aufgelöst wird.
Um einen Namenskonflikt zwischen Traits in der gleichen Klasse aufzulösen muss der insteadof-Operator verwendet werden, um genau eine der Methoden des Konflikts auszuwählen.
Da dies es nur erlaubt Methoden auszuschließen kann der as-Operator verwendet werden, um eine der Methoden des Konflikts wieder unter einem anderen Namen hinzuzufügen.
Beispiel #5 Konfliktauflösung
In diesem Beispiel verwendet die Klasse Talker die Traits A und B. Nachdem A und B sich widersprechende Methoden besitzen definiert die Klasse, dass sie die Variante von smallTalk aus dem Trait B und die Variante von bigTalk des Traits A verwenden möchte.
Die Klasse Aliased_Talker verwendet den as-Operator, damit sie außerdem die Implementierung der bigTalk-Methode von B unter dem Alias talk verwenden kann.
<?php
trait A {
public function smallTalk() {
echo 'a';
}
public function bigTalk() {
echo 'A';
}
}
trait B {
public function smallTalk() {
echo 'b';
}
public function bigTalk() {
echo 'B';
}
}
class Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
}
}
class Aliased_Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
B::bigTalk as talk;
}
}
?>
Mit der as-Syntax ist es ebenso möglich, die Sichtbarkeit einer Methode in der darstellenden Klasse zu verändern.
Beispiel #6 Veränderung der Sichtbarkeit von Methoden
<?php
trait HelloWorld {
public function sayHello() {
echo 'Hallo Welt!';
}
}
// Ändern der Sichtbarkeit von sayHello
class MyClass1 {
use HelloWorld { sayHello as protected }
}
// Alias der Methode mit geänderter Sichtbarkeit
// Die Sichtbarkeit von sayHello bleibt unverändert
class MyClass2 {
use HelloWorld { doHelloWorld as private sayHello }
}
?>
Ebenso wie Klassen können auch traits andere Traits verwenden. Indem man einen oder mehrere Traits in einer Traitdefinition verwendet kann man Traits entweder teilweise oder vollständig aus Methoden, welche in anderen Traits definiert sind, zusammensetzen.
Beispiel #7 Trait-Zusammensetzung aus Traits
<?php
trait Hello {
public function sayHello() {
echo 'Hallo ';
}
}
trait World {
public function sayWorld() {
echo 'Welt!';
}
}
trait HelloWorld {
use Hello, World;
}
class MyHelloWorld {
use HelloWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Hallo Welt!
Traits unterstützen auch die Verwendung von abstrakten Methoden, um darstellenden Klassen Anforderungen aufzudrängen.
Beispiel #8 Ausdrücken von Anforderungen durch abstrakte Methoden
<?php
trait Hello {
public function sayHelloWorld() {
echo 'Hallo'.$this->getWorld();
}
abstract public function getWorld();
}
class MyHelloWorld {
private $world;
use Hello;
public function getWorld() {
return $this->world;
}
public function setWorld($val) {
$this->world = $val;
}
}
?>
Innerhalb von Traits kann auf statische Variablen zugegriffen werden, aber diese können nicht in Traits definiert werden. Statische Methoden können hingegen auch durch Traits für die darstellende Klasse definiert werden.
Beispiel #9 Statische Variablen
<?php
trait Counter {
public function inc() {
static $c = 0;
$c = $c + 1;
echo "$c\n";
}
}
class C1 {
use Counter;
}
class C2 {
use Counter;
}
$o = new C1(); $o->inc(); // echo 1
$p = new C2(); $p->inc(); // echo 1
?>
Beispiel #10 Statische Methoden
<?php
trait StaticExample {
public static function doSomething() {
return 'Tue etwas';
}
}
class Example {
use StaticExample;
}
Example::doSomething();
?>
Traits können ebenfalls Attribute definieren.
Beispiel #11 Attribute definieren
<?php
trait PropertiesTrait {
public $x = 1;
}
class PropertiesExample {
use PropertiesTrait;
}
$example = new PropertiesExample;
$example->x;
?>
Ein Attribut, welches durch einen Trait definiert wurde, kann nicht von der
Klasse erneut definiert werden. Wenn die Attribute kompatibel sind, d.h. die selbe
Sichtbarkeit und den selben Standardwert besitzen, wird ein E_STRICT
Fehler geworfen. Anderfalls wird ein Fatal Error geworfen.
Beispiel #12 Konfliktauflösung
<?php
trait PropertiesTrait {
public $same = true;
public $different = false;
}
class PropertiesExample {
use PropertiesTrait;
public $same = true; // Strict Standards
public $different = true; // Fatal error
}
?>
Überladung bietet in PHP Möglichkeiten, um dynamisch Eigenschaften und Methoden zu "erzeugen". Diese dynamisch erzeugten Entitäten werden unter Zuhilfenahme von magischen Methoden verarbeitet, die man in einer Klasse zu verschiedenen Aktivitäten definieren kann.
Die Überladungsmethoden werden aufgerufen, wenn mit Eigenschaften oder Methoden interagiert wird, die entweder nicht deklariert wurden oder im aktuellen Geltungsbereich nicht sichtbar sind. Im Rest dieses Abschnitts werden die Begriffe "unzugreifbare Eigenschaft" und "unzugreifbare Methode" verwendet, um auf die Kombination von Deklaration und Sichtbarkeit zu verweisen.
Alle Überladungsmethoden müssen als public definiert sein.
Hinweis:
Keiner der Parameter dieser magischen Methoden kann als Referenz übergeben werden.
Hinweis:
Die Interpretation von "Überladung" weicht von den meisten objektorientierten Programmiersprachen ab. Traditionell bezeichnet Überladung die Möglichkeit mehrere Methoden mit gleichem Namen aber unterschiedlichen Anzahlen und Typen von Parametern zu definieren.
| Version | Beschreibung |
|---|---|
| 5.3.0 | __callStatic hinzugefügt. Eine Warnung wurde hinzugefügt, um die Sichtbakeit public und nicht statische Deklaration zu erzwingen. |
| 5.1.0 | __isset und __unset hinzugefügt. |
$name
)$name
)__set wird aufgerufen, wenn Daten in unzugreifbare Eigenschaften geschrieben werden sollen.
__get wird verwendet, um Daten aus unzugreifbaren Eigenschaften zu lesen.
__isset wird aufgerufen, indem isset() oder empty() auf unzugreifbare Eigenschaften angewendet wird.
__unset wird aufgerufen, wenn unset() für unzugreifbaren Eigenschaften aufgerufen wird.
Der Parameter $name beinhaltet den Namen der Eigenschaft, mit der interagiert wird. Der Parameter $value der Funktion __set spezifiziert den Wert den die Eigenschaft $name annehmen soll.
Überladung von Eigenschaften funktioniert nur im Kontext von Objekten. Diese magischen Methoden werden nicht aus einem statischen Kontext aufgerufen. Diese Methoden sollten daher nicht als static deklariert werden. Seit PHP 5.3.0 wird eine Warnung ausgegeben, wenn eine dieser magischen Überladungsmethoden als static deklariert ist.
Hinweis:
Der Rückgabewert von __set wird, aufgrund der Behandlung des Zuweisungsoperators in PHP, ignoriert. Aus ähnlichen Gründen wird __get nicht aufgerufen, wenn man Zuweisungen in etwa wie folgt verkettet:
$a = $obj->b = 8;
Hinweis:
Es ist unmöglich überladene Eigenschaften in anderen Sprachkonstrukten als isset() zu verwenden. Das heißt, falls empty() für eine überladene Eigenschaft aufgerufen wird, so wird die Überladungsmethode nicht aufgerufen.
Diese Einschränkung kann umgangen werden, indem die überladene Eigenschaft in eine lokale Variable des aktuellen Gültigkeitsbereiches kopiert wird und diese an empty() übergeben wird.
Beispiel #1 Überladung von Eigenschaften mit den Methoden __get, __set, __isset und __unset
<?php
class EigenschaftTest
{
/** Speicherplatz für überladene Daten. */
private $data = array();
/** Überladung wird nicht bei deklarierten Eigenschaften benutzt. */
public $declared = 1;
/** Überladung wird nur von außerhalb der Klasse angewendet. */
private $hidden = 2;
public function __set($name, $value)
{
echo "Setze '$name' auf '$value'\n";
$this->data[$name] = $value;
}
public function __get($name)
{
echo "Lese '$name'\n";
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
$trace = debug_backtrace();
trigger_error(
'Undefinierte Eigenschaft für __get(): ' . $name .
' in ' . $trace[0]['file'] .
' Zeile ' . $trace[0]['line'],
E_USER_NOTICE);
return null;
}
/** Seit PHP 5.1.0 */
public function __isset($name)
{
echo "Ist '$name' gesetzt?\n";
return isset($this->data[$name]);
}
/** Seit PHP 5.1.0 */
public function __unset($name)
{
echo "Lösche '$name'\n";
unset($this->data[$name]);
}
/** Keine magische Methode, nur beispielhaft hier. */
public function getHidden()
{
return $this->hidden;
}
}
echo "<pre>\n";
$obj = new EigenschaftTest;
$obj->a = 1;
echo $obj->a . "\n\n";
var_dump(isset($obj->a));
unset($obj->a);
var_dump(isset($obj->a));
echo "\n";
echo $obj->declared . "\n\n";
echo "Wir experimentieren nun mit der private-Eigenschaft 'hidden':\n";
echo "Private ist innerhalb der Klasse sichtbar, also wird __get() nicht benutzt...\n";
echo $obj->getHidden() . "\n";
echo "Private nicht sichtbar von außerhalb der Klasse, also wird __get() benutzt...\n";
echo $obj->hidden . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Setze 'a' auf '1' Lese 'a' 1 Ist 'a' gesetzt? bool(true) Lösche 'a' Ist 'a' gesetzt? bool(false) 1 Wir experimentieren nun mit der private-Eigenschaft 'hidden': Private ist innerhalb der Klasse sichtbar, also wird __get() nicht benutzt... 2 Private nicht sichtbar von außerhalb der Klasse, also wird __get() benutzt... Lese 'hidden' Notice: Undefinierte Eigenschaft für __get(): hidden in <file> Zeile 70 in <file> on line 29
__call wird aufgerufen, wenn eine unzugreifbare Methode in einem Objekt aufgerufen wird.
__callStatic wird aufgerufen, wenn eine unzugreifbare Methode in einem statischen Kontext aufgerufen wird.
Der Parameter $name ist der Name der aufgerufenen Methode. Der Parameter $arguments beinhaltet ein Array mit den Parametern, die der Methode $name übergeben wurden.
Beispiel #2 Überladung von Methoden mit den methoden __call und __callStatic
<?php
class MethodenTest {
public function __call($name, $arguments)
{
// Achtung: Der Wert von $name beachtet die Groß-/Kleinschreibung
echo "Rufe die Objektmethode '$name' "
. implode(', ', $arguments). "\n";
}
/** Seit PHP 5.3.0 */
public static function __callStatic($name, $arguments)
{
// Achtung: Der Wert von $name beachtet die Groß-/Kleinschreibung
echo "Rufe die statische Methode '$name' "
. implode(', ', $arguments). "\n";
}
}
$obj = new MethodenTest;
$obj->runTest('eines Objektes auf');
MethodTest::runTest('aus statischem Kontext auf'); // Seit PHP 5.3.0
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Rufe die Objektmethode 'runTest' eines Objektes auf Rufe die statische Methode 'runTest' aus statischem Kontext auf
PHP 5 bietet eine Möglichkeit Objekte so zu definieren, dass es möglich ist eine Liste von Elementen zu durchlaufen, z.B. mit einem foreach-Statement. 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 sind eine Möglichkeit, um optimale Verfahren und gute Entwürfe zu beschreiben. Sie zeigen eine flexible Lösung für verbreitete Programierprobleme.
Das Factory-Pattern erlaubt die Instanziierung 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 instanziierenden Klasse als Parameter übergeben.
Beispiel #1 Parametrisierte Factory-Methode
<?php
class Example
{
// Die parametrisierte Factory-Methode
public static function factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $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 Example-Klasse eine Datenbankabstraktionsklasse wäre, könnte das Laden eines MySQL- und SQLite-Treibers wie folgt aussehen:
<?php
// Lade einen MySQL Treiber
$mysql = Example::factory('MySQL');
// Lade einen SQLite Treiber
$sqlite = Example::factory('SQLite');
?>
Das Singleton stellt sicher, dass es nur eine Instanz einer Klasse geben kann; es stellt eine globale Zugriffsmöglichkeit zu dieser Instanz bereit. Singleton ist ein Pattern der "Gang of Four".
Das Singleton-Pattern wird oft implementiert in Datenbankklassen, Loggern, Front-Controllern oder Request- und Response-Objekten.
Beispiel #2 Singleton-Funktion
<?php
class Beispiel
{
private static $instance;
private $count = 0;
private function __construct()
{
}
public static function singleton()
{
if (!isset(self::$instance)) {
echo 'Erstelle neue Instanz.';
$className = __CLASS__;
self::$instance = new $className;
}
return self::$instance;
}
public function increment()
{
return $this->count++;
}
public function __clone()
{
trigger_error('Clonen ist nicht erlaubt.', E_USER_ERROR);
}
public function __wakeup()
{
trigger_error('Deserialisierung ist nicht erlaubt.', E_USER_ERROR);
}
}
?>
Illustrated below is how the Singleton behaves
<?php
$singleton = Example::singleton(); // gibt "Erstelle neue Instanz." aus
echo $singleton->increment(); // 0
echo $singleton->increment(); // 1
$singleton = Example::singleton(); // verwendet die bereits existierende Instanz
echo $singleton->increment(); // 2
echo $singleton->increment(); // 3
// alle folgenden Zeilen führen zu einem Fatal Error
$singleton2 = new Example;
$singleton3 = clone $singleton;
$singleton4 = unserialize(serialize($singleton));
?>
Das Singleton-Pattern ist eines der kontrovers betrachteten Pattern. Kritiker argumentieren, dass Singletons zu globale Zuständen in Applikationen führen und dass sie das Singleton und die benutzenden Klassen eng koppeln. Somit entstehen versteckte Abhängigkeiten und unerwartete Seiteneffekte, woraus wiederum Code entsteht, der schwierig zu testen und zu warten ist.
Die Kritiker argumentieren außerdem, dass es sinnlos ist, ein Singleton in einer Shared-Nothing-Architektur wie PHP einzusetzen, in der Objekte nur innerhalb eines Requests eindeutig sind. Es ist einfacher und sauberer, Kollaborations-Objektgraphen zu erstellen, indem die Builder- und Factory-Pattern am Anfang eines Requests benutzt werden.
Singletons verstoßen außerdem gegen die "SOLID"-OOP-Design-Regeln und gegen das Gesetz von Demeter. Singletons können nicht serialisiert werden. Sie können nicht durch Subtypen ersetzt werden (vor PHP 5.3) und sie werden auch nicht bei der Garbage-Collection berücksichtigt, weil die Instanz als statisches Attribut des Singletons gespeichert wird.
Die Funktionen __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state() and __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.
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.
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 geworfen.
Hinweis:
__sleep() kann nicht Namen von privaten Eigenschaften von Elternklassen zurückgeben. In diesem Fall wird eine
E_NOTICEgeworfen. Stattdessen sollte das Serializable Interface verwendet werden.
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();
}
}
?>
Die __toString() Methode erlaubt
einer Klasse zu entscheiden, wie sie reagieren soll, wenn sie in eine Zeichenkette
umgewandelt wird. Die beeinflusst beispielsweise, was echo $obj;
ausgeben wird. Diese Methode muss eine Zeichenkette zurückgeben, ansonsten wird ein
E_RECOVERABLE_ERROR geworfen.
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.
Die __invoke()-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)
$properties
)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($a, true) . ';'); // $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"
}
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.
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.
Sobald der Klonvorgang abgeschlossen und eine __clone()- Methode definiert ist, so wird die __clone()-Methode des neu erzeugten Objekts aufgerufen, damit alle notwendigen Eigenschaften verändert werden 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 Objekt:
MyCloneable Object
(
[object1] => SubObject Object
(
[instanz] => 1
)
[object2] => SubObject Object
(
[instanz] => 2
)
)
geklontes Object:
MyCloneable Object
(
[objekt1] => SubObject Object
(
[instanz] => 3
)
[objekt2] => SubObject Object
(
[instanz] => 2
)
)
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 Programmiersprache erwartet (nicht dass PHP 5 eine derartige Sprache wäre).
Wenn man den Vergleichsoperator (==) benutzt, werden Objektvariablen auf einfache Weise verglichen, d.h.: 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:
Erweiterungen können eigenen Regeln für ihre Objektvergleiche definieren.
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.
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.
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 A {
public static function who() {
echo __CLASS__;
}
public static function test() {
self::who();
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
A
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 A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // statische Bindung
}
}
class B extends A {
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 A {
public static function foo() {
static::who();
}
public static function who() {
echo __CLASS__."\n";
}
}
class B extends A {
public static function test() {
A::foo();
parent::foo();
self::foo();
}
public static function who() {
echo __CLASS__."\n";
}
}
class C extends B {
public static function who() {
echo __CLASS__."\n";
}
}
C::test();
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
A C C
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 A {
protected static function who() {
echo __CLASS__."\n";
}
public function __get($var) {
return static::who();
}
}
class B extends A {
protected static function who() {
echo __CLASS__."\n";
}
}
$b = new B;
$b->foo;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
B
Eine der häufigsten Aussagen zu objektorientierter Programmierung in PHP5 ist, dass "Objekte standardmäßig als Referenz übergeben werden". Dies ist nicht komplett wahr. Dieser Abschnitt berichtigt diese verbreitete Annahme anhand von Beispielen.
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 A {
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
serialize() erzeugt einen String, welcher die Byte-Stream-Repräsentation eines jeden Wertes besitzt, der in PHP gespeichert werden kann. unserialize() kann diesen String verwenden, um die ursprünglichen Variablenwerte wiederherzustellen. Verwendet man serialize(), um ein Objekt zu speichern, so werden alle Variablen dieses Objektes gespeichert. Die Methoden des Objektes werden nicht gespeichert, nur der Name der Klasse.
Damit man imstande ist, ein Objekt mit unserialize() wiederherzustellen, muss die Klasse des Objektes definiert sein. Das heißt, wenn man ein Objekt der Klasse A serialisiert, erhält man einen String, der sich auf die Klasse A bezieht und die Werte aller darin enthaltenen Variablen beinhaltet. Wenn man in einer anderen Datei diesen String wieder zu einem Objekt der Klasse A deserialisieren will, so muss die Klasse A in dieser Datei vorher bekannt sein. Dies kann man erreichen, indem man die Definition der Klasse A in eine mittels include ladbare Datei auslagert und diese Datei einbindet oder die Funktion spl_autoload_register() verwendet.
<?php
// classa.inc:
class A {
public $one = 1;
public function show_one() {
echo $this->one;
}
}
// page1.php:
include("classa.inc");
$a = new A;
$s = serialize($a);
// $s irgendwo ablegen, wo page2.php dies finden kann.
file_put_contents('store', $s);
// page2.php:
// Dies ist nötig, damit unserialize korrekt funktioniert.
include("classa.inc");
$s = file_get_contents('store');
$a = unserialize($s);
// Nun kann man die Funktion show_one() des Objektes $a
// verwenden.
$a->show_one();
?>
Wenn eine Anwendung Sessions verwendet und die Funktion session_register() benutzt, um Objekte zu registrieren, so werden diese Objekte automatisch am Schluss jeder PHP-Seite serialisiert und in jeder nachfolgenden PHP-Seite deserialisiert. Das heißt, dass diese Objekte in jeder Seite der Anwendung auftauchen können, sobald diese Teil der Session werden. session_register() wurde in PHP 5.4.0 jedoch entfernt.
Es ist dringend empfohlen, dass wenn eine Anwendung Objekte zur späteren Verwendung in der Anwendung serialisiert, die Klassendefinitionen in der gesamten Anwendung eingebunden werden. Wird dies nicht beachtet, so wird das Objekt ohne eine Klassendefinition deserialisiert, was dazu führen wird, dass PHP dem Objekt eine Klasse __PHP_Incomplete_Class_Name zuweisen wird, welche keine Methoden besitzt. Dies wird das Objekt nutzlos machen.
Wenn also im obigen Beispiel $a Teil einer Session würde, indem man session_register("a") benutzt, so sollte die Datei classa.inc in jeder Seite eingebunden werden, nicht nur in page1.php und page2.php.
Hier werden Änderungen am OOP-Modell von PHP 5 protokolliert. Beschreibungen und andere Hinweise zu diesen Features werden innerhalb der OOP-5-Dokumentation dargelegt.
| Version | Beschreibung |
|---|---|
| 5.4.0 | Geändert: Wenn eine abstrakte Klasse eine Signatur für den Konstruktor definiert, so wird diese nun erzwungen. |
| 5.3.3 | Geändert: Methoden, die den Namen des letzten Elementes eines Klassennamens in einem Namespace tragen, werden nicht länger als Konstruktor behandelt. Diese Änderung beeinflusst Klassen außerhalb von Namespaces nicht. |
| 5.3.0 | Geändert: Klassen, die Interfaces implementieren, welche Methoden mit Vorgabewerten in ihrem Prototypen enthalten müssen nicht mehr dem Vorgabewert des Interfaces entsprechen. |
| 5.3.0 | Geändert: Es ist nun möglich eine Klasse mittels einer Variablen zu referenzieren (z.B. echo $classname::constant;). Der Wert der Variable darf kein Schlüsselwort sein (z.B. self, parent oder static). |
| 5.3.0 |
Geändert: Ein Fehler der Stufe E_WARNING wird
ausgelöst, wenn die magischen Methoden für
Überladung
als static deklariert
werden. Dies erzwingt auch die Anforderung nach öffentlicher
Sichtbarkeit.
|
| 5.3.0 | Geändert: Vor PHP 5.3.0 konnten Exceptions, die in einer __autoload()-Funktion geworfen wurden, nicht mit einem catch-Block gefangen werden und resultierten in einem "fatal error". Nun können Exceptions, die in einer __autoload-Funktion geworfen wurden, im catch-Block unter einer Bedingung gefangen werden. Wenn eine selbst definierte Exception geworfen wird, so muss diese Exception verfügbar sein. Die __autoload-Funktion kann jedoch rekursiv aufgerufen werden, um die Exceptionklasse automatisch zu laden. |
| 5.3.0 | Hinzugefügt: Die Methode __callStatic. |
| 5.3.0 | Hinzugefügt: Unterstützung für die heredoc- und nowdoc-Syntax für const und Definition von Eigenschaften in einer Klasse. Beachten Sie: die heredoc-Werte müssen den gleichen Regeln wie Strings in doppelten Anführungszeichen folgen (d.h. keine Variablen beinhalten). |
| 5.3.0 | Hinzugefügt: Späte statische Bindung. |
| 5.3.0 | Hinzugefügt: Die Methode __invoke. |
| 5.2.0 |
Geändert: Die Methode
__toString wurde nur
in direkter Verbindung mit echo oder
print aufgerufen. Nun wird sie in jedem
String-Kontext aufgerufen (z.B. in printf() mit dem
%s-Modifizierer), aber nicht in anderen Kontexten
(z.B. mit dem %d-Modifizierer). Seit PHP 5.2.0 löst die
Konvertierung von Objekten ohne __toString-Methode zu
Strings einen Fehler der Stufe E_RECOVERABLE_ERROR
aus.
|
| 5.1.3 |
Geändert: In vorhergehenden Versionen von PHP 5 wurde die Verwendung
von var als veraltet betrachtet und löste einen
Fehler der Stufe E_STRICT aus. Dies ist nicht
länger veraltet und daher wird kein Fehler mehr ausgelöst.
|
| 5.1.0 | Geändert: Die statische Methode __set_state wird nun für Klassen aufgerufen, wenn sie durch var_export() exportiert werden. |
| 5.1.0 | Hinzugefügt: Die Methoden __isset und __unset. |
(PHP 5 >= 5.3.0)
Was sind Namespaces? Im weitesten Sinne bieten Namespaces eine Möglichkeit, verschiedene Gegenstände zu kapseln. Dies kann man als abstraktes Konzept an vielen Dingen beobachten. In einem Betriebssystem dienen zum Beispiel Verzeichnisse dazu, um zusammengehörige Dateien zu gruppieren, und dienen als Namespace für die beinhalteten Dateien. In einem konkreten Beispiel kann die Datei foo.txt sowohl im Verzeichnis /home/greg als auch in /home/other existieren, aber es können keine zwei Varianten der Datei foo.txt im gleichen Verzeichnis existieren. Um auf die Datei foo.txt von außerhalb des Verzeichnisses /home/greg zuzugreifen, muss man zusätzlich dem Verzeichnisnamen den Dateinamen und ein Trennzeichen voranstellen, um /home/greg/foo.txt zu erhalten. Das gleiche Prinzip streckt sich auf Namespaces in der Programmierwelt aus.
In der Welt von PHP wurden Namespaces entworfen, um zwei Probleme zu lösen, auf die die Autoren von Bibliotheken und Anwendungen stoßen, wenn sie wiederverwendbare Codeelemente wie Klassen und Funktionen entwickeln:
PHP-Namespaces bieten eine Möglickeit, um zusammengehörige Klassen, Interfaces, Funktionen und Konstanten zusammenzufassen. Dies ist ein Beispiel für die Namespace-Syntax in PHP:
Beispiel #1 Beispiel für Namespace-Syntax
<?php
namespace my\name; // siehe Abschnitt "Namespaces definieren"
class MyClass {}
function myfunction() {}
const MYCONST = 1;
$a = new MyClass;
$c = new \my\name\MyClass; // siehe Abschnitt "Globaler Namensraum"
$a = strlen('hi'); // siehe Abschnitt "Namespaces verwenden: Rückgriff auf
// globale Funktion/Konstante"
$d = namespace\MYCONST; // siehe Abschnitt "Namespace-Schlüsselwort und __NAMESPACE__-
// Konstante"
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // siehe Abschnitt "Namespaces und dynamische Sprachfeatures"
?>
Hinweis:
Die Namespaces PHP und php, sowie zusammengesetzte Namen, die mit diesen Bezeichnungen beginnen (wie z.B. PHP\Classes), sind zur internen Verwendung in der Sprache reserviert und sollten im eigene Programmcode nicht verwendet werden.
(PHP 5 >= 5.3.0)
Obwohl jeder gültige PHP-Quellcode in Namespaces eingeschlossen werden kann, werden nur vier Arten von Code von Namespaces beeinflusst: Klassen, Interfaces, Funktionen und Konstanten.
Namespaces werden mit dem Schlüsselwort namespace definiert. Eine Datei, die einen Namespace beinhaltet, muss den Namespace am Anfang der Datei vor jeglichem anderen Code deklarieren - mit Ausnahme des declare-Schlüsselworts.
Beispiel #1 Einen einzelnen Namespace deklarieren
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
Beispiel #2 Einen einzelnen Namespace deklarieren
<html>
<?php
namespace MyProject; // fatal error - Namespace muss der erste Ausdruck im Skript sein
?>
Zusätzlich darf - im Gegensatz zu anderen PHP-Konstrukten - der selbe Namespace in mehreren Dateien definiert werden, womit man den Inhalt eines Namespaces im Dateisystem aufteilen kann.
(PHP 5 >= 5.3.0)
Ähnlich wie Verzeichnisse und Dateien hat ein PHP-Namespace auch die Möglichkeit, eine Hierarchie von Namespacenamen zu beinhalten. Ein Namespace kann also mit Unterebenen definiert werden:
Beispiel #1 Einen einzelnen Namespace mit einer Hierarchie deklarieren
<?php
namespace MyProject\Sub\Level;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
(PHP 5 >= 5.3.0)
Es können auch mehrere Namespaces in der selben Datei definiert werden. Es gibt hierfür zwei mögliche Schreibweisen:
Beispiel #1 Mehrere Namespaces definieren, einfache Kombinationssyntax
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
Diese Syntax ist nicht die empfohlene Syntax, um mehrere Namespaces in einer einzigen Datei zusammenzuführen. Stattdessen wird die geklammerte Syntax empfohlen.
Beispiel #2 Mehrere Namespaces definieren, geklammerte Syntax
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
?>
Es wird stark von der Programierpraxis mehrere Namespaces in einer Datei zu definieren abgeraten. Der wichtigste Einsatzzweck für diese Möglichkeit ist es, mehrere PHP-Skripte in der selben Datei zusammenzuführen.
Um Code ohne Namensräume mit solchem mit Namensräumen zusammenzuführen, wird nur die geklammerte Syntax unterstützt. Globaler Code sollte in einem Namespace-Statement ohne Namespace eingeschlossen werden:
Beispiel #3 Mehrere Namespaces und Code ohne Namespace deklarieren
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // global code
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
Es darf kein PHP-Code außerhalb der Namespace-Klammern existieren, abgesehen von einem beginnenden declare-Ausdruck.
Beispiel #4 Mehrere Namespaces und Code ohne Namespace deklarieren
<?php
declare(encoding='UTF-8');
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // globaler Code
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
(PHP 5 >= 5.3.0)
Bevor die Verwendung von Namespaces besprochen wird, ist es wichtig zu verstehen, woher PHP weiß, welches Element mit Namespace vom Code angefordert wird. Eine einfache Analogie kann zwischen PHP-Namensräumen und einem Dateisystem gesehen werden. Es gibt drei Möglichkeiten, mit denen man auf eine Datei in einem Dateisystem zugreifen kann:
Hier ein Beispiel für die drei Schreibweisen in tatsächlichem 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() {}
}
/* Unqualifizierter Name */
foo(); // wird als Funktion Foo\Bar\foo aufgelöst
foo::staticmethod(); // wird als Klasse Foo\Bar\foo und Methode staticmethod aufgelöst
echo FOO; // gibt die Konstante Foo\Bar\FOO aus
/* QUalifizierter Name */
subnamespace\foo(); // wird als Funktion Foo\Bar\subnamespace\foo aufgelöst
subnamespace\foo::staticmethod(); // wird als Klasse Foo\Bar\subnamespace\foo und
// Methode staticmethod aufgelöst
echo subnamespace\FOO; // gibt die Konstante Foo\Bar\subnamespace\FOO aus
/* Vollständig qualifizierter Name */
\Foo\Bar\foo(); // wird als Funktion Foo\Bar\foo aufgelöst
\Foo\Bar\foo::staticmethod(); // wird als Klasse Foo\Bar\foo und Methode staticmethod aufgelöst
echo \Foo\Bar\FOO; // gibt die Konstante Foo\Bar\FOO aus
?>
Beachten Sie, dass für den Zugriff auf jede globale Klasse, Funktion oder Konstante auch ein vollständig qualifizierter Name verwendet werden kann, wie z.B. \strlen(), \Exception oder \INI_ALL.
Beispiel #1 Zugriff auf globale Klassen, Funktionen und Konstanten aus einem Namespace
<?php
namespace Foo;
function strlen() {}
const INI_ALL = 3;
class Exception {}
$a = \strlen('hi'); // ruft die globale Funktion strlen auf
$b = \INI_ALL; // greift auf die globale Konstante INI_ALL zu
$c = new \Exception('error'); // erzeugt eine Neue Instanz der globalen
// Klasse Exception
?>
(PHP 5 >= 5.3.0)
Die Implementierung von Namespaces in PHP ist stark von seinen Eigenschaften als Programmiersprache mit dynamischen Features beeinflusst. Man kann also den folgenden Code in Code mit Namespaces umformen:
Beispiel #1 Dynamischer Zugriff auf Elemente
example1.php:
<?php
class classname
{
function __construct()
{
echo __METHOD__,"\n";
}
}
function funcname()
{
echo __FUNCTION__,"\n";
}
const constname = "global";
$a = 'classname';
$obj = new $a; // gibt classname::__construct aus
$b = 'funcname';
$b(); // gibt funcname aus
echo constant('constname'), "\n"; // gibt global aus
?>
Beispiel #2 Dynamischer Zugriff auf Elemente mit Namespace
<?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; // gibt classname::__construct aus
$b = 'funcname';
$b(); // gibt funcname aus
echo constant('constname'), "\n"; // gibt global aus
/* Wenn man doppelte Anführungszeichen verwendet,
muss "\\namespacename\\classname" verwendet werden */
$a = '\namespacename\classname';
$obj = new $a; // gibt namespacename\classname::__construct aus
$a = 'namespacename\classname';
$obj = new $a; // gibt ebenfalls namespacename\classname::__construct aus
$b = 'namespacename\funcname';
$b(); // gibt namespacename\funcname aus
$b = '\namespacename\funcname';
$b(); // gibt ebenfalls namespacename\funcname aus
echo constant('\namespacename\constname'), "\n"; // gibt namespaced aus
echo constant('namespacename\constname'), "\n"; // gibt ebenfalls namespaced aus
?>
Bitte lesen Sie auch den Hinweis zum Escaping von Namespacenamen in Strings.
(PHP 5 >= 5.3.0)
PHP unterstützt zwei Arten des abstrakten Zugriffs auf Elemente innerhalb eines
Namenspaces, die magische Konstante __NAMESPACE__ und das
Schlüsselwort namespace.
Der Wert von __NAMESPACE__ ist ein String, der den Namen
des aktuellen Namespace beinhaltet. In globalem Code ohne Namespaces beinhaltet dies
einen leeren String.
Beispiel #1 __NAMESPACE__-Beispiel, Code mit Namespace
<?php
namespace MyProject;
echo '"', __NAMESPACE__, '"'; // gibt "MyProject" aus
?>
Beispiel #2 __NAMESPACE__-Beispiel, globaler Code
<?php
echo '"', __NAMESPACE__, '"'; // gibt "" aus
?>
__NAMESPACE__ ist nützlich, um dynamische
Namen zu konstruieren, zum Beispiel:
Beispiel #3 __NAMESPACE__ zur dynamischen Namenszusammensetzung verwenden
<?php
namespace MyProject;
function get($classname)
{
$a = __NAMESPACE__ . '\\' . $classname;
return new $a;
}
?>
Das Schlüsselwort namespace kann verwendet werden, um explizit ein Element des aktuellen Namespaces oder eines untergeordneten Namespaces anzufordern. Es ist das äquivalent der Namespaces zum self-Operator für Klassen.
Beispiel #4 Der namespace-Operator, innerhalb eines Namespace
<?php
namespace MyProject;
use blah\blah as mine; // siehe "Namespaces verwenden: Importieren/Aliase"
blah\mine(); // ruft die Funktion MyProject\blah\mine() auf
namespace\blah\mine(); // ruft die Funktion MyProject\blah\mine() auf
namespace\func(); // ruft die Function MyProject\func() auf
namespace\sub\func(); // ruft die Function MyProject\sub\func() auf
namespace\cname::method(); // ruft die statische Methode "method" der Klasse MyProject\cname auf
$a = new namespace\sub\cname(); // erzeugt ein Objekt der Klasse MyProject\sub\cname
$b = namespace\CONSTANT; // weist den Wert der Konstante MyProject\CONSTANT $b zu
?>
Beispiel #5 Der namespace-Operator, in globalem Code
<?php
namespace\func(); // ruft die Function func() auf
namespace\sub\func(); // ruft die Function sub\func() auf
namespace\cname::method(); // ruft die statische Methode "method" der Klasse cname auf
$a = new namespace\sub\cname(); // erzeugt ein Objekt der Klasse sub\cname
$b = namespace\CONSTANT; // weist den Wert der Konstante CONSTANT $b zu
?>
(PHP 5 >= 5.3.0)
Die Möglichkeit, auf vollständig qualifizierte Namen mit einem Alias (Importieren) zuzugreifen, ist ein wichtiges Feature von Namespaces. Dies ist ähnlich wie die Möglichkeit von Unix-basierten Dateisystemen einen symbolischen Link auf eine Datei oder ein Verzeichnis anzulegen.
PHP-Namespaces unterstützen drei Arten von Aliasen oder Importen: Einen Alias für einen Klassennamen, einen Alias für einen Interfacenamen und einen Alias für einen Namespace. Beachten Sie, dass das importieren einer Funktion oder Konstanten nicht unterstützt wird.
Ein Alias wird in PHP mittels des use-Operators angelegt. Hier ein Beispiel, welches alle drei Arten von Importen zeigt:
Beispiel #1 Importieren/Aliase mit dem use-Operator
<?php
namespace foo;
use My\Full\Classname as Another;
// dies ist das gleiche wie use My\Full\NSname as NSname
use My\Full\NSname;
// importiert eine globale Klasse
use ArrayObject;
$obj = new namespace\Another; // erzeugt ein Objekt der Klasse foo\Another
$obj = new Another; // erzeugt ein Objekt der Klasse My\Full\Classname
NSname\subns\func(); // ruft die Funktion My\Full\NSname\subns\func auf
$a = new ArrayObject(array(1)); // erzeugt ein Objekt der Klasse ArrayObject
// ohne das "use ArrayObject" wäre ein Objekt der Klasse foo\ArrayObject erzeugt worden
?>
PHP unterstützt zusätzlich auch eine komfortable Kurzsyntax, mit der mehrere use-Ausdrücke in der gleichen Zeile erscheinen können.
Beispiel #2 Importieren/Aliase mit dem use-Operator, mehrere use-Ausdrücke kombiniert
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // erzeugt ein Objekt der Klasse My\Full\Classname
NSname\subns\func(); // ruft die Funktion My\Full\NSname\subns\func auf
?>
Importieren wird zur Kompilierungszeit ausgeführt und hat daher keinen Einfluss auf dynamische Klassen-, Funktions- oder Konstantennamen.
Beispiel #3 Importieren und dynamische Namen
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // erzeugt ein Objekt der Klasse My\Full\Classname
$a = 'Another';
$obj = new $a; // erzeugt ein Objekt der Klasse Another
?>
Zusätzlich beeinflusst das Importieren nur unqualifizierte und qualifizierte Namen. Vollständig qualifizierte Namen sind absolut und werden von Importen nicht beeinflusst.
Beispiel #4 Importieren und vollständig qualifizierte Namen
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // erzeugt ein Objekt der Klasse My\Full\Classname
$obj = new \Another; // erzeugt ein Objekt der Klasse Another
$obj = new Another\thing; // erzeugt ein Objekt der Klasse My\Full\Classname\thing
$obj = new \Another\thing; // erzeugt ein Objekt der Klasse Another\thing
?>
Das Schlüsselwort use muss im äußersten Gültigkeitsbereich (dem globalen Gültigkeitsbereich) oder innerhalb einer Namespace-Deklaration angegeben werden. Das ist darin begründet, dass Importe zur Kompilierungszeit und nicht zur Laufzeit durchgeführt werden und daher nicht in einem anderen Gültigkeitsbereich liegen dürfen. Das folgende Beispiel zeigt eine ungültige Verwendung des use-Schlüsselwortes:
Beispiel #5 Ungültige Importregel
<?php
namespace Languages;
class Greenlandic
{
use Languages\Danish;
...
}
?>
Hinweis:
Importregeln sind auf Dateibasis gültig, das heißt eine eingebundene Datei wird NICHT die Importregeln der einbindenden Datei erben.
(PHP 5 >= 5.3.0)
Ohne die Definition eines Namespace werden alle Klassen- und Funktionsdefinitionen im globalen Namensraum platziert, so wie dies auch in PHP geschah bevor Namespaces unterstützt wurden. Wenn man dem Namen ein \ voranstellt, so spezifiziert man, dass der Name dem globalen Namensraum angehört, auch wenn man sich im Kontext eines Namensraumes befindet.
Beispiel #1 Verwenden der Spezifikation des gloablen Namensraumes
<?php
namespace A\B\C;
/* Diese Funktion ist A\B\C\fopen */
function fopen() {
/* ... */
$f = \fopen(...); // globale Funktion fopen aufrufen
return $f;
}
?>
(PHP 5 >= 5.3.0)
Wenn PHP innerhalb eines Namespace auf einen unqualifizierten Namen für einen Klasen-, Funktions- oder Konstantennamen trifft, so werden diese mit unterschiedlichen Prioritäten aufgelöst. Klassennamen werden immer auf de aktuellen Namespace aufgelöst. Um also auf interne Klassen oder Benutzerklassen ohne Namespace zuzugreifen, muss man diese mit ihrem vollständig qualifizierten Namen ansprechen:
Beispiel #1 Zugriff auf globale Klasse innerhalb eines Namespace
<?php
namespace A\B\C;
class Exception extends \Exception {}
$a = new Exception('hi'); // $a ist ein Objekt der Klasse A\B\C\Exception
$b = new \Exception('hi'); // $b ist ein Objekt der Klasse Exception
$c = new ArrayObject; // fatal error, die Klasse A\B\C\ArrayObject konnte
// nicht gefunden werden
?>
Für Funktionen und Konstanten wird PHP auf globale Funktionen oder Konstanten zurückgreifen, wenn eine Funktion oder Konstante im Namespace nicht existiert.
Beispiel #2 Rückgriff auf globale Funktionen/Konstanten innerhalb eines Namespace
<?php
namespace A\B\C;
const E_ERROR = 45;
function strlen($str)
{
return \strlen($str) - 1;
}
echo E_ERROR, "\n"; // gibt "45" aus
echo INI_ALL, "\n"; // gibt "7" aus - Rückgriff auf globale INI_ALL
echo strlen('hi'), "\n"; // gibt "1" aus
if (is_array('hi')) { // gibt "ist kein Array" aus
echo "ist Array\n";
} else {
echo "ist kein Array\n";
}
?>
(PHP 5 >= 5.3.0)
Hier einige wichtige Definitionen für die Zwecke der Namensauflösungsregeln:
Dies ist ein Bezeichner ohne einen Namespaceseparator, z.B. Foo
Dies ist ein Bezeichner mit einem Namespaceseparator, z.B. Foo\Bar
Dies ist ein Bezeichner mit einem Namespaceseparator, der mit einem Namespaceseparator beginnt, z.B. \Foo\Bar. namespace\Foo ist ebenfalls ein vollständig qualifizierter Name.
Namen werden gemäß den folgenden Regeln aufgelöst:
Beispiel #1 Illustration der Namensauflösung
<?php
namespace A;
use B\D, C\E as F;
// Funktionsaufrufe
foo(); // versucht zuerst die Funktion "foo" im Namespace "A" aufzurufen
// danach wird die globale Funktion "foo" aufgerufen
\foo(); // ruft die Funktion "foo" im globalen Namensraum auf
my\foo(); // ruft die Funktion "foo" im Namespace "A\my" auf
F(); // versucht zuerst die Funktion "F" im Namespace "A" aufzurufen,
// danach wird die globale Funktion "F" aufgerufen
// Klassenreferenzen
new B(); // erzeugt ein Objekt der Klasse "B" im Namespace "A"
// wenn diese Klasse nicht bekannt ist, so wird versucht per
// Autoload die Klasse "A\B" zu laden
new D(); // gemäß den Importregeln wird ein Objekt der Klasse "D"
// aus dem Namenspace "B" erzeugt
// wenn diese Klasse nicht bekannt ist, so wird versucht per
// Autoload die Klasse "B\D" zu laden
new F(); // gemäß den Importregeln wird ein Objekt der Klasse "E"
// aus dem Namespace "C" erzeugt
// wenn diese Klasse nicht bekannt ist, so wird versucht per
// Autoload die Klasse "C\E" zu laden
new \B(); // erzeugt ein Objekt der Klasse "B" aus dem globalen Namensraum
// wenn diese Klasse nicht bekannt ist, so wird versucht per
// Autoload die Klasse "B" zu laden
new \D(); // erzeugt ein Objekt der Klasse "D" aus dem globalen Namensraum
// wenn diese Klasse nicht bekannt ist, so wird versucht per
// Autoload die Klasse "D" zu laden
new \F(); // erzeugt ein Objekt der Klasse "F" aus dem globalen Namensraum
// wenn diese Klasse nicht bekannt ist, so wird versucht per
// Autoload die Klasse "F" zu laden
// statische Methoden und Funktionen mit Namespace aus anderen Namespaces
B\foo(); // ruft die Funktion "foo" aus dem Namensraum "A\B" auf
B::foo(); // ruft die Methode "foo" der Klasse "B" im Namensraum "A" auf
// wenn die Klasse "A\B" nicht bekannt ist, so wird versucht
// die Klasse "A\B" mittels Autoload zu laden
D::foo(); // ruft gemäß den Importregeln die Methode "foo" der Klasse "D"
// im Namensraum "B" auf
// wenn die Klasse "B\D" nicht bekannt ist, so wird versucht
// die Klasse "B\D" mittels Autoload zu laden
\B\foo(); // ruft die Funktion "foo" im Namespace "B" auf
\B::foo(); // ruft die Methode "foo" der Klasse "B" im
// globalen Namensraum auf
// wenn die Klasse "B" nicht bekannt ist, so wird versucht
// die Klasse "B" mittels Autoload zu laden
// statische Methoden und Funktionen mit Namespace aus den gleichen Namespaces
A\B::foo(); // ruft die Methode "foo" der Klasse "B" aus dem Namespace "A\A" auf
// wenn die Klasse "A\A\B" nicht bekannt ist, so wird
// versucht die Klasse "A\A\B" mittels Autoload zu laden
\A\B::foo(); // ruft die Methode "foo" der Klasse "B" aus dem Namespace "A" auf
// wenn die Klasse "A\B" nicht bekannt ist, so wird
// versucht die Klasse "A\B" mittels Autoload zu laden
?>
(PHP 5 >= 5.3.0)
Diese häufig gestellten Fragen (FAQ) wurden in zwei Abschnitte aufgeteilt: allgemeine Fragen und einige Implementierungsdetails, deren vollständiges Verständnis hilfreich sein kann.
Zuerst die allgemeinen Fragen.
Es gibt einige Implementierungsdetails von Namespaces, deren Verständnis hilfreich ist.
Nein. Namespaces haben keinerlei Einfluss auf bereits bestehenden Code oder irgendwelchen Code der noch geschrieben wird, der keine Namespaces verwendet. Sie können folgenden Code schreiben, wenn Sie dies wünschen:
Beispiel #1 Zugriff auf globale Klassen außerhalb eines Namespace
<?php
$a = new \stdClass;
?>
Dies ist äquivalent zu:
Beispiel #2 Zugriff auf globale Klassen außerhalb eines Namespace
<?php
$a = new stdClass;
?>
Beispiel #3 Zugriff auf interne Klassen in Namespaces
<?php
namespace foo;
$a = new \stdClass;
function test(\ArrayObject $typehintexample = null) {}
$a = \DirectoryIterator::CURRENT_AS_FILEINFO;
// erben von einer internen oder globalen Klasse
class MyException extends \Exception {}
?>
Beispiel #4 Zugriff auf interne Klassen, Funktionen oder Konstanten in Namespaces
<?php
namespace foo;
class MyClass {}
// verwendet eine Klasse des aktuellen Namensraumes als Type-Hint
function test(MyClass $typehintexample = null) {}
// eine andere Möglichkeit, eine Klasse des aktuellen Namensraums
// als Type-Hint zu verwenden
function test(\foo\MyClass $typehintexample = null) {}
// ableiten von einer Klasse aus dem aktuellen Namespace
class Extended extends MyClass {}
// Zugriff auf eine globale Funktion
$a = \globalfunc();
// Zugriff auf eine globale Konstante
$b = \INI_ALL;
?>
Namen, die mit einem \ beginnen, werden immer zu exakt dem aufgelöst wie sie aussehen. \mein\name ist also tatsächlich \mein\name und \Exception ist Exception.
Beispiel #5 Vollständig qualifizierte Namen
<?php
namespace foo;
$a = new \my\name(); // erzeugt ein Objekt der Klasse "my\name"
echo \strlen('hi'); // ruft die Funktion "strlen" auf
$a = \INI_ALL; // $a wird auf den Wert der Konstante "INI_ALL" gesetzt
?>
Namen, die einen Backslash beinhalten, aber nicht mit einem Backslash beginnen, wie z.B. mein\name, können auf zwei verschiedene Arten aufgelöst werden.
Falls es einen Import-Ausdruck gibt, der einen Alias für einen anderen Namen definiert, so dass dieser mein heißen soll, dann wird dieser Alias für das mein in mein\name angewandt.
Andernfalls wird der aktuelle Namespace vor mein\name vorangestellt.
Beispiel #6 Qualifizierte Namen
<?php
namespace foo;
use blah\blah as foo;
$a = new my\name(); // erzeugt ein Objekt der Klasse "foo\my\name"
foo\bar::name(); // ruft die statische Methode "name"
// der Klasse "blah\blah\bar" auf
my\bar(); // ruft die Funktion "foo\my\bar" auf
$a = my\BAR; // setzt $a auf den Wert der Konstante "foo\my\BAR"
?>
Klassennamen, die keinen Backslash beinhalten, wie z.B. name, können auf zwei Arten aufgelöst werden.
Falls es einen Import-Ausdruck gibt, der einen Alias für einen anderen Namen definiert, so dass dieser name heißen soll, dann wird dieser Alias angewandt.
Andernfalls wird der aktuelle Namespace name vorangestellt.
Beispiel #7 Unqualifizierter Klassennamen
<?php
namespace foo;
use blah\blah as foo;
$a = new name(); // erzeugt ein Objekt der Klasse "foo\name"
foo::name(); // ruft die statische Methode "name" der Klasse "blah\blah" auf
?>
Funktions- oder Konstantennamen, die keinen Backslash beinhalten, wie z.B. name, können auf zwei verschiedene Arten aufgelöst werden.
Zuerst wird der aktuelle Namespace dem name vorangestellt.
Wenn die Konstante oder Funktion name im aktuellen Namensraum nicht existiert, so wird die globale Konstante oder Funktion name verwendet, wenn sie existiert.
Beispiel #8 Unqualifizierte Funktions- oder Konstantennamen
<?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(); // ruft "foo\my" auf
$a = strlen('hi'); // ruft die globale Funktion "strlen" auf, weil
// foo\strlen nicht existiert
$arr = array(1,3,2);
$b = sort($arr); // ruft die Funktion "foo\sort" auf
$c = foo(); // ruft die Funktion "foo\foo" auf - der Alias wird ignoriert
$a = FOO; // setzt $a auf den Wert der Konstante "foo\FOO" -
// der Alias wird ignoriert
$b = INI_ALL; // setzt $b auf den Wert der globalen Konstante "INI_ALL"
?>
Die folgende Kombination von Skripten ist gültig:
file1.php
<?php
namespace mein\zeug;
class MyClass {}
?>
anderes.php
<?php
namespace anderes;
class Ding {}
?>
file2.php
<?php
namespace mein\zeug;
include 'file1.php';
include 'anderes.php';
use anderes\Ding as MyClass;
$a = new MyClass; // erzeugt ein Objekt der Klasse "Ding"
// aus dem Namespace "anderes"
?>
Es gibt hier, trotzdem es eine Klasse MyClass im Namespace mein\zeug gibt, keinen Namenskonflikt, weil die Definition der Klasse MyClass sich in einer anderen Datei befindet. Das nächste Beispiel erzeugt hingegen einen fatal error wegen eines Namenskonflikts, weil MyClass in derselben Datei definiert wird, die auch den use-Ausdruck beinhaltet.
<?php
namespace mein\zeug;
use anderes\Ding as MyClass;
class MyClass {} // fatal error: Konflikt zwischen MyClass und import-Ausdruck
$a = new MyClass;
?>
PHP erlaubt das Verschachteln von Namespaces nicht.
<?php
namespace mein\zeug {
namespace verschachtelt {
class foo {}
}
}
?>
<?php
namespace mein\zeug\verschachtelt {
class foo {}
}
?>
Die einzigen Elemente, die von einem use-Ausdruck beeinflusst werden, sind Namespaces und Klassenamen. Um einen langen Konstanten- oder Funktionsnamen abzukürzen, kann dessen beinhaltender Namespace importiert werden.
<?php
namespace mein;
use sehr\langer\namespace\name;
$a = name\CONSTANT;
name\func();
?>
Es ist wichtig zu bemerken, dass ein Backslash in Strings als Escape-Zeichen verwendet wird und daher immer verdoppelt werden sollte, wenn er in einem String verwendet wird. Andernfalls besteht das Risiko ungewollter Auswirkungen:
Beispiel #9 Gefahren von Namespacenamen in Strings mit doppelten Anführungszeichen
<?php
$a = new "gefaehrlicher\name"; // \n ist in doppelten Anführungszeichen
// ein Zeilenumbruch!
$obj = new $a;
$a = new 'ueberhaupt\nicht\gefaehrlich'; // hier gibt es keine Probleme
$obj = new $a;
?>
Jeder Zugriff auf eine Konstante mit unqualifiziertem Namen, wie FOO, wird eine Notice erzeugen, welche erklärt, dass PHP angenommen hat, dass FOO der Wert der Konstante sei. Jede Konstante, qualifiziert oder vollständig qualifiziert, deren Name einen Backslash enthält, wird einen fatal error hervorrufen, wenn sie nicht gefunden wurde.
Beispiel #10 Undefinierte Konstanten
<?php
namespace bar;
$a = FOO; // notice - undefined constant "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
?>
Jeder Versuch, eine Konstante in einem Namespace zu definieren, die eine der speziellen, eingebauten Konstanten ist, wird einen fatal error hervorrufen.
Beispiel #11 Spezielle Konstanten
<?php
namespace bar;
const NULL = 0; // fatal error;
const true = 'stupid'; // ebenfalls fatal error;
// etc.
?>
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.
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!"
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 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.
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);
?>
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.
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'
?>
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(1, 2, 3) 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);
?>
Daneben besteht die Möglichkeit aus Funktionen heraus Werte mit return by-reference zurückzugeben.
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.
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
?>
Folgende Dinge können per Referenz übergeben werden:
Referenzen, zurückgegeben von einer Funktion, zum Beispiel:
<?php
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
?>
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
?>
Das Zurückgeben von Ergebnissen per Referenz aus Funktionen heraus kann manchmal recht nützlich sein, um herauszufinden, an welche Variable eine Referenz gebunden werden soll. Man sollte diese Funktionalität nicht aus Performancegründen benutzen, der Kern 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.
?>
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.
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);
?>
Wiederum sieht man die Analogie zwischen Unix und den Referenzen: Das Aufheben einer Referenz entspricht einem Aufruf von unlink unter Unix.
Viele Sprachelemente von PHP sind intern mit der Benutzung von Referenzen implementiert, daher gilt alles bisher gesagte auch für diese Konstrukte:
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.
In einer Objektmethode ist $this immer eine Referenz auf die aufrufende Objektinstanz.
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 — Superglobals sind Built-in-Variablen, die immer in allen Gültigkeitsbereichen verfügbar sind
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:
| Version | Beschreibung |
|---|---|
| 4.1.0 | Superglobals wurden in PHP eingeführt. |
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.
(PHP 4, PHP 5)
$GLOBALS — Referenziert alle Variablen, die im globalen Gültigkeitsbereich vorhanden sind
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.
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
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.
(PHP 4 >= 4.1.0, PHP 5)
$_SERVER -- $HTTP_SERVER_VARS [veraltet, nicht empfohlen] — Informationen über Server und Ausführungsumgebung
$_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.)
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.
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).
Hinweis: Beachten Sie bei der Verwendung von ISAPI unter IIS, dass der Wert auf off gesetzt wird, wenn der Request nicht mittels HTTPS erfolgte.
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().
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.
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.
| Version | Beschreibung |
|---|---|
| 4.1.0 | Einführung von $_SERVER als Ablösung der bis dahin existierenden $HTTP_SERVER_VARS. |
Beispiel #1 $_SERVER-Beispiel
<?php
echo $_SERVER['SERVER_NAME'];
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
www.example.com
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 4 >= 4.1.0, PHP 5)
$_GET -- $HTTP_GET_VARS [veraltet, nicht empfohlen] — HTTP GET-Variablen
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.)
| Version | Beschreibung |
|---|---|
| 4.1.0 | Einführung von $_GET als Ablösung des bis dahin existierenden $HTTP_GET_VARS. |
Beispiel #1 $_GET-Beispiel
<?php
echo 'Hallo ' . htmlspecialchars($_GET["name"]) . '!';
?>
Angenommen, der Benutzer gab ein http://example.com/?name=Hannes
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Hallo Hannes!
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:
Die GET-Variablen werden automatisch mit urldecode() behandelt.
(PHP 4 >= 4.1.0, PHP 5)
$_POST -- $HTTP_POST_VARS [veraltet, nicht empfohlen] — HTTP POST-Variablen
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.)
| Version | Beschreibung |
|---|---|
| 4.1.0 | Einführung von $_POST als Ablösung des bis dahin existierenden $HTTP_POST_VARS. |
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!
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 4 >= 4.1.0, PHP 5)
$_FILES -- $HTTP_POST_FILES [veraltet, nicht empfohlen] — HTTP Dateiupload-Variablen
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.)
| Version | Beschreibung |
|---|---|
| 4.1.0 | Einführung von $_FILES als Ablösung des bis dahin existierenden $HTTP_FILES_VARS. |
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 4 >= 4.1.0, PHP 5)
$_REQUEST — HTTP Request-Variablen
Ein assoziatives Array, das standardmäßig den Inhalt von $_GET, $_POST und $_COOKIE enthält.
| 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. |
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.
(PHP 4 >= 4.1.0, PHP 5)
$_SESSION -- $HTTP_SESSION_VARS [veraltet, nicht empfohlen] — Sessionvariablen
Ein assoziatives Array, das die Sessionvariablen enthält und dem aktuellen Skript zur Verfügung stellt. Lesen Sie den Abschnitt Sessionfunktionen 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.)
| Version | Beschreibung |
|---|---|
| 4.1.0 | Einführung von $_SESSION als Ablösung der bis dahin existierenden $HTTP_SESSION_VARS. |
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 4 >= 4.1.0, PHP 5)
$_ENV -- $HTTP_ENV_VARS [veraltet, nicht empfohlen] — Umgebungsvariablen
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.)
| Version | Beschreibung |
|---|---|
| 4.1.0 | Einführung von $_ENV als Ablösung des bis dahin existierenden $HTTP_ENV_VARS. |
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!
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 4, PHP 5)
$php_errormsg — Die vorangegangene Fehlermeldung
$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.
Wird ein benutzerdefinierter Errorhandler (set_error_handler())
verwendet, wird $php_errormsg nur dann gesetzt, wenn der
Errorhandler FALSE zurückgibt.
Beispiel #1 $php_errormsg-Beispiel
<?php
@strpos();
echo $php_errormsg;
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Wrong parameter count for strpos()
(PHP 4, PHP 5)
$HTTP_RAW_POST_DATA — Raw POST-Daten
$HTTP_RAW_POST_DATA enthält die originalen (raw) POST-Daten. Lesen Sie auch always_populate_raw_post_data
(PHP 4 >= 4.0.4, PHP 5)
$http_response_header — HTTP Response-Header
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. $http_response_header wird im lokalen Variablengeltungsbereich erstellt.
Beispiel #1 $http_response_header-Beispiel
<?php
function get_contents() {
file_get_contents("http://example.com");
var_dump($http_response_header);
}
get_contents();
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"
}
NULL
(PHP 4, PHP 5)
$argc — Die Anzahl der an das Skript übergebenen Argumente
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 nicht verfügbar, wenn register_argc_argv ausgeschaltet ist.
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)
(PHP 4, PHP 5)
$argv — Array der an das Skript übergebenen Argumente
Enthält ein Array aller an das Skript übergebenen Argumente, wenn dies auf der Kommandozeile ausgeführt wird.
Hinweis: Das erste Argument $argv[0] ist immer der Name der zum Aufrufen des Skripts genutzt wurde.
Hinweis: Diese Variable ist nicht verfügbar, wenn register_argc_argv ausgeschaltet ist.
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"
}
Siehe auch das Kapitel SPL-Exceptions.
(PHP 5 >= 5.1.0)
Exception ist die Basisklasse für alle Exceptions.
Die Exceptionmeldung.
Die Fehlernummer der Exception.
Der Name der Datei, in der die Exception aufgetreten ist (geworfen wurde).
Die Zeilennummer, in der die Exception aufgetreten ist (geworfen wurde).
(PHP 5 >= 5.1.0)
Exception::__construct — Erstellt die Exception
$message = ""
[, int $code = 0
[, Exception $previous = NULL
]]] )Erstellt die Exception.
message
Die auszugebende Beschreibung der Exception.
code
Die Fehlernummer der Exception.
previous
Die vorangegangene Exception, die für Exception-Verkettung verwendet werden soll.
| Version | Beschreibung |
|---|---|
| 5.3.0 |
Der Parameter previous wurde hinzugefügt.
|
(PHP 5 >= 5.1.0)
Exception::getMessage — Gibt die Exceptionbeschreibung zurück
Gibt die Exceptionbeschreibung zurück.
Diese Funktion hat keine Parameter.
Gibt die Exceptionbeschreibung als String zurück.
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
(PHP 5 >= 5.3.0)
Exception::getPrevious — Gibt die vorhergehende Exception zurück
Gibt die vorhergehende Exception (dritter Parameter von Exception::__construct()) zurück.
Diese Funktion hat keine Parameter.
Gibt die vorhergehende Exception zurück
falls vorhanden, anderenfalls NULL.
Beispiel #1 Exception::getPrevious() Beispiel
Ausgabeschleife über einen Exception-Verlauf
<?php
class MyCustomException extends Exception {}
function doStuff() {
try {
throw new InvalidArgumentException("Sie machen es nicht richtig!", 112);
} catch(Exception $e) {
throw new MyCustomException("Irgendetwas geschah", 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 Irgendetwas geschah (911) [MyCustomException] /home/bjori/ex.php:6 Sie machen es nicht richtig! (112) [InvalidArgumentException]
(PHP 5 >= 5.1.0)
Exception::getCode — Gibt die Fehlernummer der Exception zurück
Gibt die Fehlernummer der Exception zurück.
Diese Funktion hat keine Parameter.
Exception selbst gibt den Fehlercode als integer zurück. Von Exception erbende Unterklassen können jedoch auch einen anderen Typ zurückgeben. So gibt PDOException beispielsweise ein string zurück.
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
(PHP 5 >= 5.1.0)
Exception::getFile — Gibt den Namen der Datei zurück, in der die Exception aufgetreten ist
Gibt den Namen der Datei zurück, die die Exception ausgelöst hat.
Diese Funktion hat keine Parameter.
Gibt den Namen der Datei zurück, in der die Exception ausgelöst wurde.
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
(PHP 5 >= 5.1.0)
Exception::getLine — Gibt die Zeile zurück, in der die Exception auftrat
Gibt die Zeile zurück, in der die Exception ausgelöst wurde.
Diese Funktion hat keine Parameter.
Gibt die Zeile zurück, in der die Exception ausgelöst wurde.
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
(PHP 5 >= 5.1.0)
Exception::getTrace — Gibt den Stacktrace zurück
Gibt den Stacktrace der Exception zurück.
Diese Funktion hat keine Parameter.
Gibt den Stacktrace der Exception als Array zurück.
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) {
}
}
}
(PHP 5 >= 5.1.0)
Exception::getTraceAsString — Gibt den Stacktrace als String zurück
Gibt den Stacktrace als String zurück.
Diese Funktion hat keine Parameter.
Gibt den Stacktrace als String zurück.
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}
(PHP 5 >= 5.1.0)
Exception::__toString — Stringrepräsentation der Exception
Gibt die Stringrepräsentation der Exception zurück.
Diese Funktion hat keine Parameter.
Gibt die Stringrepräsentation der Exception zurück.
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}
(PHP 5 >= 5.1.0)
Exception::__clone — Klont die Exception
Versucht, die Exception zu klonen. Dies erzeugt einen Fatal Error.
Diese Funktion hat keine Parameter.
Es wird kein Wert zurückgegeben.
Exceptions sind nicht klonbar.
(PHP 5 >= 5.1.0)
Eine Error Exception.
$message
[, int $code
[, int $severity
[, string $filename
[, int $lineno
]]]]] )Die Schwere einer Exception
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($errstr, 0, $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
(PHP 5 >= 5.1.0)
ErrorException::__construct — Erstellt die Exception
$message
[, int $code
[, int $severity
[, string $filename
[, int $lineno
]]]]] )Erstellt die Exception.
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.
(PHP 5 >= 5.1.0)
ErrorException::getSeverity — Liefert die Schwere der Exception
Gibt die Schwere der Exception zurück.
Diese Funktion hat keine Parameter.
Gibt die Schwere der Exception zurück.
Beispiel #1 ErrorException::getSeverity()-Beispiel
<?php
try {
throw new ErrorException("Exception message", 0, 75);
} catch(ErrorException $e) {
echo "This exception severity is: " . $e->getSeverity();
}
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
This exception severity is: 75
Siehe auch SPL-Interfaces.
(No version information available, might only be in SVN)
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.
Dieses Interface besitzt keine Methoden, sein einziger Sinn ist es, als Basisinterface für alle traversierbaren Klassen zu dienen.
(PHP 5 >= 5.0.0)
Interface für externe Iteratoren oder Objekte, die selbstiterierend sind.
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"
(PHP 5 >= 5.0.0)
Iterator::current — Gibt das aktuelle Element zurück
Diese Funktion hat keine Parameter.
Kann Werte jeden Typs zurückgeben.
(PHP 5 >= 5.0.0)
Iterator::key — Gibt den Schlüssel des aktuellen Elements zurück
Gibt den Schlüssel des aktuellen Elements zurück.
Diese Funktion hat keine Parameter.
Gibt bei Erfolg einen Skalar zurück, im Fehlerfall wird NULL zurückgegeben.
Wirft im Fehlerfall eine Meldung vom Typ E_NOTICE.
(PHP 5 >= 5.0.0)
Iterator::next — Rückt den Zeiger auf das nächste Element vor
Verschiebt die aktuelle Position auf das nächste Element.
Hinweis:
Diese Methode wird nach jedem Durchlauf der foreach-Schleife aufgerufen.
Diese Funktion hat keine Parameter.
Jeder zurückgegebene Wert wird ignoriert.
(PHP 5 >= 5.0.0)
Iterator::rewind — Setzt den Iterator auf das erste Element zurück
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.
Diese Funktion hat keine Parameter.
Zurückgegebene Werte werden ignoriert.
(PHP 5 >= 5.0.0)
Iterator::valid — Prüft, ob die aktuelle Position zulässig ist
Diese Methode wird nach Iterator::rewind() und Iterator::next() aufgerufen, um zu prüfen, ob die aktuelle Position zulässig ist.
Diese Funktion hat keine Parameter.
Der Rückgabewert wird in den Typ boolean gecastet und dann
evaluiert.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 5 >= 5.0.0)
Interface, um einen externen Iterator zu erzeugen.
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"
(PHP 5 >= 5.0.0)
IteratorAggregate::getIterator — Holt einen externen Iterator
Gibt einen externen Iterator zurück.
Diese Funktion hat keine Parameter.
Eine Instanz eines Objektes, das Iterator oder Traversable implementiert.
Wirft im Fehlerfall eine Exception.
(PHP 5 >= 5.0.0)
Interface, um Objekte als Arrays ansprechen zu können
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) {
if (is_null($offset)) {
$this->container[] = $value;
} else {
$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"]);
$obj[] = 'Anhängen 1';
$obj[] = 'Anhängen 2';
$obj[] = 'Anhängen 3';
print_r($obj);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
bool(true)
int(2)
bool(false)
string(7) "Ein Wert"
obj Object
(
[container:obj:private] => Array
(
[eins] => 1
[drei] => 3
[zwei] => Ein Wert
[0] => Anhängen 1
[1] => Anhängen 2
[2] => Anhängen 3
)
)
(PHP 5 >= 5.0.0)
ArrayAccess::offsetExists — Prüft, ob ein Offset-Punkt existiert
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()
TRUEzurückliefert.
offset
Der zu untersuchende Offset-Punkt.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Hinweis:
Der Rückgabewert wird zu boolean gecastet, sofern sonst ein nicht-boolscher Wert zurückgegeben würde.
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)
(PHP 5 >= 5.0.0)
ArrayAccess::offsetGet — Gibt den Wert eines Offset-Punkts zurück
Gibt den Wert des angegebenen Offset-Punkts zurück.
Diese Methode wird ausgeführt, wenn geprüft wird, ob ein Offset-Punkt empty() ist.
offset
Der zu untersuchende Offset-Punkt.
Hinweis:
Beginnend mit PHP 5.3.4 kann ArrayAccess::offsetGet() per Referenz zurückgeben. Somit ist es möglich Array Offsets von Objekten welche mit ArrayAccess überladen wurden indirekt zu modifizieren.
Bei einer direkten Änderung wird der Wert eines Array Offsets komplett ersetzt (beispielsweise $obj[6] = 7). Bei einer indirekten Änderung wird nur ein Teil des Array Offsets geändert ($obj[6][7] = 7) oder das Array Offset einer Variablen per Referenz zugewiesen ($var =& $obj[6]). Auch Inkrementierung mit ++ und Dekrementierung mit -- sind derartig implementiert, dass sie indirekte Änderung erfordern.
Direkte Änderungen führen zu einem Aufruf von ArrayAccess::offsetSet(), wohingegen indirekte Änderungen in einem Aufruf von ArrayAccess::offsetGet() resultieren. In diesem Fall muss die Implementierung von ArrayAccess::offsetGet() in der Lage sein per Referenz zurückzugeben, ansonsten wird ein
E_NOTICEFehler generiert.
Kann Werte aller Typen zurückgeben.
(PHP 5 >= 5.0.0)
ArrayAccess::offsetSet — Zu setzender Offset-Punkt
Weist dem angegebenen Offset-Punkt einen Wert zu.
offset
Der Offset-Punkt, dem ein Wert zugewiesen werden soll.
value
Der zuzuweisende Wert.
Es wird kein Wert zurückgegeben.
Hinweis:
Der
offset-Parameter wird aufNULLgesetzt, wenn sonst kein anderer Wert verfügbar ist, siehe auch das folgende Beispiel:<?php
$arrayaccess[] = "Erster Wert";
$arrayaccess[] = "Zweiter Wert";
print_r($arrayaccess);
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array ( [0] => Erster Wert [1] => Zweiter Wert )
Hinweis:
Diese Funktion wird nicht aufgerufen, wenn einer Variable ein Array Offset per Referenz zugewiesen wird oder eine andere indirekte Änderungen eines Array Offsets stattfindet (wenn beispielsweise nur ein Sub-Offset oder eine Sub-Eigenschaft geändert wird). Stattdessen wird ArrayAccess::offsetGet() aufgerufen. Die Operation wird nur erfolgreich sein, wenn jene Methode per Referenz uzrückgibt, was erst seit PHP 5.3.4 möglich ist.
(PHP 5 >= 5.0.0)
ArrayAccess::offsetUnset — zu löschender Offset
Löscht einen Offset-Punkt.
Hinweis:
Diese Methode wird nicht aufgerufen, wenn ein Typecast auf (unset) durchgeführt wird.
offset
Der zu löschende Offset-Punkt.
Es wird kein Wert zurückgegeben.
(PHP 5 >= 5.1.0)
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.
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);
var_dump($ser);
$newobj = unserialize($ser);
var_dump($newobj->getData());
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
string(42) "C:3:"obj":27:{s:19:"Meine private-Daten";}"
string(15) "Meine private-Daten"
(PHP 5 >= 5.1.0)
Serializable::serialize — Stringrepräsentation eines Objekts
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.
Diese Funktion hat keine Parameter.
Gibt die Stringrepräsentation des Objekts oder NULL zurück.
Wirft Exception, wenn andere Typen als String oder
NULL zurückgegeben werden.
(PHP 5 >= 5.1.0)
Serializable::unserialize — Erstellt das Objekt
Wird beim Deserialisieren des Objekts aufgerufen.
Hinweis:
Diese Methode agiert wie der Konstruktor des Objekts. Die __construct()-Methode wird nach dieser Methode nicht aufgerufen.
serialized
Die das Objekt repräsentierende Zeichenkette.
Gibt den deserialisierten Originalwert zurück.
(No version information available, might only be in SVN)
Class used to represent anonymous functions.
Anonymous functions, implemented in PHP 5.3, yield objects of this type. This fact used to be considered an implementation detail, but it can now be relied upon. Starting with PHP 5.4, this class has methods that allow further control of the anonymous function after it has been created.
Besides the methods listed here, this class also has an __invoke method. This is for consistency with other classes that implement calling magic, as this method is not used for calling the function.
(No version information available, might only be in SVN)
Closure::__construct — Constructor that disallows instantiation
This method exists only to disallow instantiation of the Closure class. Objects of this class are created in the fashion described on the anonymous functions page.
Diese Funktion hat keine Parameter.
This method has no return value; it simply emits an error
(of type E_RECOVERABLE_ERROR).
(No version information available, might only be in SVN)
Closure::bind — Duplicates a closure with a specific bound object and class scope
$closure
, object $newthis
[, mixed $newscope
= 'static'
] )This method is a static version of Closure::bindTo(). See the documentation of that method for more information.
closure
The anonymous functions to bind.
newthis
The object to which the given anonymous function should be bound, or
NULL for the closure to be unbound.
newscope
The class scope to which associate the closure is to be associated, or 'static' to keep the current one. If an object is given, the type of the object will be used instead. This determines the visibility of protected and private methods of the bound object.
Returns a new Closure object Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Closure::bind() example
<?php
class A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A::$sfoo;
};
$cl2 = function() {
return $this->ifoo;
};
$bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "\n";
echo $bcl2(), "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
1 2
(No version information available, might only be in SVN)
Closure::bindTo — Duplicates the closure with a new bound object and class scope
Create and return a new anonymous function with the same body and bound variables as this one, but possibly with a different bound object and a new class scope.
The “bound object” determines the value $this will
have in the function body and the “class scope” represents a class
which determines which private and protected members the anonymous
function will be able to access. Namely, the members that will be
visible are the same as if the anonymous function were a method of
the class given as value of the newscope
parameter.
Static closures cannot have any bound object (the value of the parameter
newthis should be NULL), but this function can
nevertheless be used to change their class scope.
This function will ensure that for a non-static closure, having a bound
instance will imply being scoped and vice-versa. To this end,
non-static closures that are given a scope but a NULL instance are made
static and non-static non-scoped closures that are given a non-null
instance are scoped to an unspecified class.
Hinweis:
If you only want to duplicate the anonymous functions, you can use cloning instead.
newthis
The object to which the given anonymous function should be bound, or
NULL for the closure to be unbound.
newscope
The class scope to which associate the closure is to be associated, or 'static' to keep the current one. If an object is given, the type of the object will be used instead. This determines the visibility of protected and private methods of the bound object.
Returns the newly created Closure object
Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Closure::bindTo() example
<?php
class A {
function __construct($val) {
$this->val = $val;
}
function getClosure() {
//returns closure bound to this object and scope
return function() { return $this->val; };
}
}
$ob1 = new A(1);
$ob2 = new A(2);
$cl = $ob1->getClosure();
echo $cl(), "\n";
$cl = $cl->bindTo($ob2);
echo $cl(), "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
1 2
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 context options — Socket context option listing
Socket context options are available for all wrappers that work over sockets, like tcp, http and ftp.
| Version | Beschreibung |
|---|---|
| 5.1.0 | Added bindto. |
| 5.3.3 | Added backlog. |
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 option listing
Context options for http:// and https:// transports.
| 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.
|
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);
?>
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 — Liste der FTP-Kontextoptionen
Kontextoptionen für ftp:// und ftps://.
| Version | Beschreibung |
|---|---|
| 5.1.0 |
proxy wurde hinzugefügt.
|
| 5.0.0 |
overwrite und resume_pos
wurden hinzugefügt.
|
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 option listing
Context options for ssl:// and tls:// transports.
| Version | Beschreibung |
|---|---|
| 5.0.0 |
Added capture_peer_cert,
capture_peer_chain and
ciphers.
|
CURL Kontextoptionen — Liste der CURL Kontextoptionen
Die CURL Kontextoptionen sind verfügbar wenn die CURL-Erweiterun mit Hilfe der configure-Option --with-curlwrappers kompiliert wurde.
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 Kontextoptionen — Liste der Phar Kontextoptionen
Kontextoptionen des phar:// Wrappers.
Kontextparameter — Liste der Kontextparameter
Diese Parameter eines Kontextes können mit Hilfe der Funktion stream_context_set_params() gesetzt werden.
PHP bietet viele integrierte Wrapper für verscheidene Protokolle im URL-Stil auf die so mit Dateisystem-Funktionen wie fopen(), copy(), file_exists() und filesize() zugegriffen werden. Zusätzlich zu diesen eingebauten Wrappern ist es auch möglich eigene mit Hilfe der stream_wrapper_register() Funktion hinzuzufügen.
Hinweis: Die zur Beschreibung eines Wrappers genutzte URL-Syntax unterstützt nur URLs der Form schema://... mit zwei Schrägstrichen. Die schema:/ und schema: Varianten werden nicht unterstützt.
file:// — Accessing local filesystem
Filesystem is the default wrapper used with PHP and represents the local filesystem. When a relative path is specified (a path which does not begin with /, \, \\, or a Windows drive letter) the path provided will be applied against the current working directory. In many cases this is the directory in which the script resides unless it has been changed. Using the CLI sapi, this defaults to the directory from which the script was called.
With some functions, such as fopen() and file_get_contents(), include_path may be optionally searched for relative paths as well.
| Version | Beschreibung |
|---|---|
| 5.0.0 | Added file://. |
http:// -- https:// — Accessing HTTP(s) URLs
Allows read-only access to files/resources via HTTP 1.0, using the HTTP GET method. A Host: header is sent with the request to handle name-based virtual hosts. If you have configured a user_agent string using your php.ini file or the stream context, it will also be included in the request.
The stream allows access to the body of the resource; the headers are stored in the $http_response_header variable.
If it's important to know the URL of the resource where your document came from (after all redirects have been processed), you'll need to process the series of response headers returned by the stream.
The from directive will be used for the From: header if set and not overwritten by the Kontextoptionen und -parameter.
| Version | Beschreibung |
|---|---|
| 4.3.7 | Detect buggy IIS servers to avoid "SSL: Fatal Protocol Error" errors. |
| 4.3.0 | Added https://. |
| 4.0.5 | Added support for redirects. |
Beispiel #1 Detecting which URL we ended up on after redirects
<?php
$url = 'http://www.example.com/redirecting_page.php';
$fp = fopen($url, 'r');
$meta_data = stream_get_meta_data($fp);
foreach ($meta_data['wrapper_data'] as $response) {
/* Were we redirected? */
if (strtolower(substr($response, 0, 10)) == 'location: ') {
/* update $url with where we were redirected to */
$url = substr($response, 10);
}
}
?>
Beispiel #2 Sending custom headers with an HTTP request
Custom headers may be sent using context options. It is also possible to use this hack: Custom headers may be sent with an HTTP request by taking advantage of a side-effect in the handling of the user_agent INI setting. Set user_agent to any valid string (such as the default PHP/version setting) followed by a carriage-return/line-feed pair and any additional headers.
<?php
ini_set('user_agent', "PHP\r\nX-MyCustomHeader: Foo");
$fp = fopen('http://www.example.com/index.php', 'r');
?>
Results in the following request being sent:
GET /index.php HTTP/1.0 Host: www.example.com User-Agent: PHP X-MyCustomHeader: Foo
Hinweis: HTTPS is only supported when the openssl extension is enabled.
HTTP connections are read-only; writing data or copying files to an HTTP resource is not supported.
Sending POST and PUT requests, for example, can be done with the help of HTTP Contexts.
ftp:// -- ftps:// — Accessing FTP(s) URLs
Allows read access to existing files and creation of new files via FTP. If the server does not support passive mode ftp, the connection will fail.
You can open files for either reading or writing, but not both simultaneously. If the remote file already exists on the ftp server and you attempt to open it for writing but have not specified the context option overwrite, the connection will fail. If you need to overwrite existing files over ftp, specify the overwrite option in the context and open the file for writing. Alternatively, you can use the FTP extension.
If you have set the from directive in php.ini, then this value will be sent as the anonymous FTP password.
| Version | Beschreibung |
|---|---|
| 4.3.0 | Added ftps://. |
Hinweis:
FTPS is only supported when the openssl extension is enabled.
If the server does not support SSL, then the connection falls back to regular unencrypted ftp.
Hinweis: Appending
As of PHP 5.0.0 files may be appended via the ftp:// URL wrapper. In prior versions, attempting to append to a file via ftp:// will result in failure.
php:// — Accessing various I/O streams
PHP provides a number of miscellaneous I/O streams that allow access to PHP's own input and output streams, the standard input, output and error file descriptors, in-memory and disk-backed temporary file streams, and filters that can manipulate other file resources as they are read from and written to.
php://stdin, php://stdout and
php://stderr allow direct access to the corresponding
input or output stream of the PHP process. The stream references a
duplicate file descriptor, so if you open php://stdin
and later close it, you close only your copy of the descriptor-the actual
stream referenced by STDIN is unaffected. Note that
PHP exhibited buggy behavior in this regard until PHP 5.2.1. It is
recommended that you simply use the constants STDIN,
STDOUT and STDERR instead of
manually opening streams using these wrappers.
php://stdin is read-only, whereas php://stdout and php://stderr are write-only.
php://input is a read-only stream that allows you to read raw data from the request body. In the case of POST requests, it is preferable to use php://input instead of $HTTP_RAW_POST_DATA as it does not depend on special php.ini directives. Moreover, for those cases where $HTTP_RAW_POST_DATA is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data. php://input is not available with enctype="multipart/form-data".
Hinweis: A stream opened with php://input can only be read once; the stream does not support seek operations. However, depending on the SAPI implementation, it may be possible to open another php://input stream and restart reading. This is only possible if the request body data has been saved. Typically, this is the case for POST requests, but not other request methods, such as PUT or PROPFIND.
php://output is a write-only stream that allows you to write to the output buffer mechanism in the same way as print and echo.
php://fd allows direct access to the given file descriptor. For example, php://fd/3 refers to file descriptor 3.
php://memory and php://temp are read-write streams that allow temporary data to be stored in a file-like wrapper. The only difference between the two is that php://memory will always store its data in memory, whereas php://temp will use a temporary file once the amount of data stored hits a predefined limit (the default is 2 MB). The location of this temporary file is determined in the same way as the sys_get_temp_dir() function.
The memory limit of php://temp can be controlled by appending /maxmemory:NN, where NN is the maximum amount of data to keep in memory before using a temporary file, in bytes.
php://filter is a kind of meta-wrapper designed to permit the application of filters to a stream at the time of opening. This is useful with all-in-one file functions such as readfile(), file(), and file_get_contents() where there is otherwise no opportunity to apply a filter to the stream prior the contents being read.
The php://filter target takes the following parameters as part of its path. Please refer to the examples for specifics on using these parameters.
| Name | Description |
|---|---|
| resource=<stream to be filtered> | This parameter is required. It specifies the stream that you would like to filter. |
| read=<filter list to apply to read chain> | This parameter is optional. One or more filter names can be provided here, separated by the pipe character (|). |
| write=<filter list to apply to write chain> | This parameter is optional. One or more filter names can be provided here, separated by the pipe character (|). |
| <filter list to apply to both chains> | Any filter lists which are not prefixed by read= or write= will be applied to both the read and write chains as appropriate. |
| Version | Beschreibung |
|---|---|
| 5.3.6 | php://fd was added. |
| 5.1.0 | php://memory and php://temp were added. |
| 5.0.0 | php://filter was added. |
Beispiel #1 php://temp/maxmemory
This optional parameter allows setting the memory limit before php://temp starts using a temporary file.
<?php
// Set the limit to 5 MB.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
fputs($fp, "hello\n");
// Read what we have written.
rewind($fp);
echo stream_get_contents($fp);
?>
Beispiel #2 php://filter/resource=<stream to be filtered>
This parameter must be located at the end of your php://filter specification and should point to the stream which you want filtered.
<?php
/* This is equivalent to simply:
readfile("http://www.example.com");
since no filters are actually specified */
readfile("php://filter/resource=http://www.example.com");
?>
Beispiel #3 php://filter/read=<filter list to apply to read chain>
This parameter takes one or more filternames separated by the pipe character |.
<?php
/* This will output the contents of
www.example.com entirely in uppercase */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");
/* This will do the same as above
but will also ROT13 encode it */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>
Beispiel #4 php://filter/write=<filter list to apply to write chain>
This parameter takes one or more filternames separated by the pipe character |.
<?php
/* This will filter the string "Hello World"
through the rot13 filter, then write to
example.txt in the current directory */
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
?>
zlib:// -- bzip2:// -- zip:// — Compression Streams
zlib: PHP 4.0.4 - PHP 4.2.3 (systems with fopencookie only)
compress.zlib:// and compress.bzip2:// PHP 4.3.0 and up
zlib: works like gzopen(), except that the stream can be used with fread() and the other filesystem functions. This is deprecated as of PHP 4.3.0 due to ambiguities with filenames containing ':' characters; use compress.zlib:// instead.
compress.zlib:// and compress.bzip2:// are equivalent to gzopen() and bzopen() respectively, and operate even on systems that do not support fopencookie.
ZIP extension registers zip: wrapper.
data:// — Data (RFC 2397)
The data: (» RFC 2397) stream wrapper is available since PHP 5.2.0.
Beispiel #1 Print data:// contents
<?php
// prints "I love PHP"
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');
?>
Beispiel #2 Fetch the media type
<?php
$fp = fopen('data://text/plain;base64,', 'r');
$meta = stream_get_meta_data($fp);
// prints "text/plain"
echo $meta['mediatype'];
?>
glob:// — Find pathnames matching pattern
The glob: stream wrapper is available since PHP 5.3.0.
Beispiel #1 Basic usage
<?php
// Loop over all *.php files in ext/spl/examples/ directory
// and print the filename and its size
$it = new DirectoryIterator("glob://ext/spl/examples/*.php");
foreach($it as $f) {
printf("%s: %.1FK\n", $f->getFilename(), $f->getSize()/1024);
}
?>
tree.php: 1.0K findregex.php: 0.6K findfile.php: 0.7K dba_dump.php: 0.9K nocvsdir.php: 1.1K phar_from_dir.php: 1.0K ini_groups.php: 0.9K directorytree.php: 0.9K dba_array.php: 1.1K class_tree.php: 1.8K
phar:// — PHP Archive
The phar:// stream wrapper is available since PHP 5.3.0. See Phar stream wrapper for detailed description.
ssh2:// — Secure Shell 2
ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// PHP 4.3.0 and up (PECL)
Hinweis: This wrapper is not enabled by default
In order to use the ssh2.*:// wrappers you must install the » SSH2 extension available from » PECL.
In addition to accepting traditional URI login details, the ssh2 wrappers will also reuse open connections by passing the connection resource in the host portion of the URL.
Beispiel #1 Opening a stream from an active connection
<?php
$session = ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file($session, 'username', '/home/username/.ssh/id_rsa.pub',
'/home/username/.ssh/id_rsa', 'secret');
$stream = fopen("ssh2.tunnel://$session/remote.example.com:1234", 'r');
?>
rar:// — RAR
The wrapper takes the url encoded path to the RAR archive (relative or absolute), an optional asterik (*), an optional number sign (#) and an optional url encoded entry name, as stored in the archive. Specifying an entry name requires the number sign; a leading forward slash in the entry name is optional.
This wrapper can open both files and directories. When opening directories, the asterisk sign forces the directory entries names to be returned unencoded. If it's not specified, they will be returned url encoded – the reason for this is to allow the wrapper to be correctly used with built-in functionality like the RecursiveDirectoryIterator in the presence of file names that seem like url encoded data.
If the pound sign and the entry name part are not included, the root of the archive will be displayed. This differs from regular directories in that the resulting stream will not contain information such as the modification time, as the root directory is not stored in an individual entry in the archive. The usage of the wrapper with RecursiveDirectoryIterator requires the number sign to be included in the URL when accessing the root, so that the URLs of the children may be constructed correctly.
Hinweis: This wrapper is not enabled by default
In order to use the rar:// wrapper, you must install the » rar extension available from » PECL.
rar:// Available since PECL rar 3.0.0
Beispiel #1 Traversing a RAR archive
<?php
class MyRecDirIt extends RecursiveDirectoryIterator {
function current() {
return rawurldecode($this->getSubPathName()) .
(is_dir(parent::current())?" [DIR]":"");
}
}
$f = "rar://" . rawurlencode(dirname(__FILE__)) .
DIRECTORY_SEPARATOR . 'dirs_and_extra_headers.rar#';
$it = new RecursiveTreeIterator(new MyRecDirIt($f));
foreach ($it as $s) {
echo $s, "\n";
}
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
|-allow_everyone_ni [DIR]
|-file1.txt
|-file2_אּ.txt
|-with_streams.txt
\-אּ [DIR]
|-אּ\%2Fempty%2E [DIR]
| \-אּ\%2Fempty%2E\file7.txt
|-אּ\empty [DIR]
|-אּ\file3.txt
|-אּ\file4_אּ.txt
\-אּ\אּ_2 [DIR]
|-אּ\אּ_2\file5.txt
\-אּ\אּ_2\file6_אּ.txt
Beispiel #2 Opening an encrypted file (header encryption)
<?php
$stream = fopen("rar://" .
rawurlencode(dirname(__FILE__)) . DIRECTORY_SEPARATOR .
'encrypted_headers.rar' . '#encfile1.txt', "r", false,
stream_context_create(
array(
'rar' =>
array(
'open_password' => 'samplepassword'
)
)
)
);
var_dump(stream_get_contents($stream));
/* creation and last access date is opt-in in WinRAR, hence most
* files don't have them */
var_dump(fstat($stream));
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
string(26) "Encrypted file 1 contents."
Array
(
[0] => 0
[1] => 0
[2] => 33206
[3] => 1
[4] => 0
[5] => 0
[6] => 0
[7] => 26
[8] => 0
[9] => 1259550052
[10] => 0
[11] => -1
[12] => -1
[dev] => 0
[ino] => 0
[mode] => 33206
[nlink] => 1
[uid] => 0
[gid] => 0
[rdev] => 0
[size] => 26
[atime] => 0
[mtime] => 1259550052
[ctime] => 0
[blksize] => -1
[blocks] => -1
)
ogg:// — Audio streams
Files opened for reading via the ogg:// wrapper
are treated as compressed audio encoded using the OGG/Vorbis codec.
Similarly, files opened for writing or appending via the
ogg:// wrapper are writen as compressed audio data.
stream_get_meta_data(), when used on an OGG/Vorbis
file opened for reading will return various details about the stream
including the vendor tag, any included
comments, the number of
channels, the sampling rate,
and the encoding rate range described by:
bitrate_lower, bitrate_upper,
bitrate_nominal, and bitrate_window.
ogg:// PHP 4.3.0 and up (PECL)
Hinweis: This wrapper is not enabled by default
In order to use the ogg:// wrapper you must install the » OGG/Vorbis extension available from » PECL.
expect:// — Process Interaction Streams
Streams opened via the expect:// wrapper provide access to process'es stdio, stdout and stderr via PTY.
Hinweis: This wrapper is not enabled by default
In order to use the expect:// wrapper you must install the » Expect extension available from » PECL.
expect:// PHP 4.3.0 and up (PECL)
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.
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 eines einzigen Cookies 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.
PHP als CGI-Version 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ür 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:
Wenn der Server keine Inhalte hat, die durch ein 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-Skript 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).
Die Konfigurationsdirektive cgi.force_redirect 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. PHP älter als 4.2.0 nutzte stattdessen die --enable-force-cgi-redirect-Kompilierungsoption.n
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 direkten 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.
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 wie Passwörtern 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 Abschnitt 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 Heimatverzeichnis 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.
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 Zeile:
#!/usr/local/bin/php
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.
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.
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!";
?>
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!";?>
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($logstring, ENT_QUOTES);
?>
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.
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';
}
?>
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.
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.
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.
SSL/SSH schützt zwar die gerade auf dem Weg befindlichen Daten vom Client zum Server: SSL/SSH schützt 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 gespeicherte heikle 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 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.";
}
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);
// 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;
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);
' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --
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';";
// $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);
$query = "SELECT * FROM products
WHERE id LIKE '%a%'
exec master..xp_cmdshell 'net user test testpass /ADD'--";
$result = mssql_query($query);
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.
Obwohl es offensichtlich ist, dass ein Angreifer zumindest ein wenig Kenntnis der genutzten Datenbankarchitektur besitzen muss, um einen erfolgreichen Angriff durchzuführen, ist das Erlangen dieser Informationen oft sehr einfach. Wenn die Datenbank zum Beispiel Teil eines Open Source oder anderweitig öffentlich verfügbaren Paketes mit einer Standard Installation ist, dann ist diese Information vollkommen frei zugänglich. Diese Information kann auch durch Closed Source Code - selbst wenn dieser kodiert, verschleiert oder kompiliert ist - und sogar durch ihren ureigenen Code durch die Anzeige von Fehlermeldungen. Andere Methoden beinhalten die Nutzung typischer Tabellen und Spalten Namen. Ein Login Formular etwa, dass eine Tabelle 'users' mit den Spaltennamen 'id', 'username' und 'password' nutzt.
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.
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);
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.
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&showerrors=1&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");
}
?>
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet). 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");
}
?>
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;
}
?>
E_NOTICE angezeigt werden.
Sie können die On und Off Einstellungen von register_globals emulieren, näheres 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.
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:
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).
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
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.
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
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:
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
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()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
?>
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
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
Beispiel #3 Verwenden von HTML-Typen für PHP-Dateierweiterungen
# Lasse PHP-Code wie HTML aussehen AddType application/x-httpd-php .htm .html
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.
Man kann 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();
$schluessel = implode('|', array_keys($noetige_teile));
preg_match_all('@(' . $schluessel . ')=(?:([\'"])([^\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'] == 1 &&
$_POST['AlteAuth'] == $_SERVER['PHP_AUTH_USER'])) {
authentifizieren();
} else {
echo "<p>Willkommen: " . htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "<br />";
echo "Alt: " . htmlspecialchars($_REQUEST['AlteAuth']);
echo "<form action='' METHOD='post'>\n";
echo "<input type='hidden' name='Gesehen' value='1' />\n";
echo "<input type='hidden' name='AlteAuth' value=\"" . htmlspecialchars($_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.
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.
» 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 einfaches 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 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.
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.
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.
Der ursprüngliche Dateiname auf der Client Maschine.
Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat. Ein Beispiel wäre "image/gif".
Die Größe der hochgeladenen Datei in Bytes.
Der temporäre Dateiname, unter dem die hochgeladene Datei auf dem Server gespeichert wurde.
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 = $uploaddir. basename($_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.
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.
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.
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.
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.
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.
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.
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 Unterstützte Protokolle and 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 GD- und 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 ($datei, 1024);
/* 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.
PHP erhält intern einen Verbindungsstatus. Dieser kann drei Zustände annehmen:
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 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.
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().
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.
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
| Version | Beschreibung |
|---|---|
| 5.4.0 |
Removed from PHP, and generates a fatal E_CORE_ERROR
level error when enabled.
|
| 5.3.0 |
Deprecated, and E_DEPRECATED errors were added.
|
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| safe_mode | "0" | PHP_INI_SYSTEM | Removed in PHP 5.4.0. |
| safe_mode_gid | "0" | PHP_INI_SYSTEM | Available since PHP 4.1.0. Removed in PHP 5.4.0. |
| safe_mode_include_dir | NULL | PHP_INI_SYSTEM | Available since PHP 4.1.0. Removed in PHP 5.4.0. |
| safe_mode_exec_dir | "" | PHP_INI_SYSTEM | Removed in PHP 5.4.0. |
| safe_mode_allowed_env_vars | "PHP_" | PHP_INI_SYSTEM | Removed in PHP 5.4.0. |
| safe_mode_protected_env_vars | "LD_LIBRARY_PATH" | PHP_INI_SYSTEM | Removed in PHP 5.4.0. |
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.
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
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.
See also: open_basedir, disable_functions, disable_classes, 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
<?php
readfile('/etc/passwd');
?>
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>
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
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2
These PHP restrictions are not valid in executed binaries, of course.
This is a still probably incomplete and possibly incorrect listing of the functions limited by safe mode.
| 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. |
Seit PHP 4.3.0 unterstützt PHP eine CLI SAPI. Das Hauptaugenmerk dieser SAPI ist die Entwicklung von Kommandozeilenapplikationen. Es gibt einige Unterschiede zwischen der CLI SAPI und anderen SAPIs, welche in diesem Kapitel beschrieben werden. Es ist erwähnenswert, dass CLI und CGI verschiedene SAPIs sind, auch wenn sie viele Verhaltensweisen teilen.
Die CLI SAPI ist standardmäßig durch die --enable-cli Option aktiviert, kann jedoch durch Angabe der --disable-cli Option im ./configure Skript deaktiviert werden.
Der Name, der Pfad und das Vorhandensein der CLI/CGI Binaries hängt davon ab wie PHP auf dem System installiert wurde. 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 gespeichert. Sie werden bemerken, dass beide php heissen. Was während make install passiert, hängt davon ab wie PHP konfiguriert wurde. Wenn eine Modul-SAPI während der Konfiguration gewählt wurde, wie etwa apxs, oder die --disable-cgi Option genutzt wurde, wird die CLI während make install nach {PREFIX}/bin/php kopiert. Andernfalls wird das CGI Binary dorthin kopiert. Also wird, wenn beispielsweise --with--apxs in Ihrem configure-Kommando angegeben ist, wird die CLI während make install nach {PREFIX}/bin/php kopiert. Wenn Sie die Installation des CGI Binaries überschreiben 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 die CLI während make install nach {PREFIX}/bin/php kopiert wird.
Seit PHP 5 wird auf Windows das CLI Binary im Hauptordner als php.exe ausgeliefert. Die CGI Version wird als php-cgi.exe bereitgestellt. Zusätzlich wird php-win.exe ausgeliefert, wenn PHP mit --enable-cli-win32 konfiguriert wurde. Dieses Binary verhält sich genauso wie die CLI Version, bis auf die Tatsache, dass sie nichts ausgibt und somit keine Konsole zur Verfügung stellt.
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_SAPIan.
Hinweis:
Eine UNIX man Seite ist durch eingabe von man php in der Kommandozeile verfügbar.
Beachtenswerte Unterschiede der CLI SAPI zu anderen SAPIs:
Anders als bei der CGI SAPI werden keine Header ausgegeben.
Obwohl die CGI SAPI eine Option bietet, HTTP-Header zu unterdrücken, gibt es keine gleichwertige Option, sie in der 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 von der CLI SAPI außer Kraft gesetzt werden, weil sie in einer Kommandozeilenumgebung keinen Sinn ergeben.
| 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 normalerweise erwünscht, dass alle Ausgaben, die von print, echo und Konsorten kommen, sofort auf die Ausgabe geschrieben werden und nicht in einem Puffer gecacht werden. Sie können jedoch immer noch output buffering benutzen, wenn Sie die Standardausgabe aufschieben oder manipulieren wollen. |
| max_execution_time | 0 (unendlich) | Da die Anwendungsbereiche von Kommandozeilenanwendungen deutlich unterschiedlicher sind als die von Web-Applikationen und da diese oft lange Laufzeiten besitzen, wird die maximale Ausführungszeit auf unendlich gesetzt. Wegen der unendlichen Möglichkeiten, PHP in |
| register_argc_argv | TRUE |
Weil diese Einstellung auf Die PHP-Variablen $argc und $argv werden automatisch mit den entsprechenden Werten gefüllt, wenn die CLI SAPI benutzt wird. Diese Werte können auch in dem $_SERVER Array gefunden werden, beispielsweise: $_SERVER['argv']. |
| output_buffering | FALSE |
Auch wenn die php.ini Option fest auf |
| max_input_time | FALSE |
Die PHP CLI unterstützt GET, POST und File Uploads nicht. |
Hinweis:
Diese Direktiven können nicht mit einem anderen Wert aus der Konfigurationsdatei php.ini oder einer eigenen (falls angegeben) initialisiert werden. Diese Einschränkung ergibt sich dadurch, dass diese Standardwerte angewandt werden, nachdem alle Konfigurationsdateien gelesen 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).
Hinweis:
Es wird empfohlen ignore_user_abort für Kommandozeilenanwendungen zu setzen. Siehe ignore_user_abort() für weitere Informationen.
Um die Arbeit in der Kommandozeilenumgebung zu erleichtern, wurden einige Konstanten für Ein- und Ausgabestreams definiert.
Die CLI SAPI ändert das aktuelle Arbeitsverzeichnis nicht zu dem Verzeichnis des ausgeführten Skripts.
Beispiel #1 Beispiel, welches den Unterschied zu der CGI SAPI verdeutlicht:
<?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.
Nutzung der CLI SAPI führt zu folgender Ausgabe:
$ pwd /tmp $ php -f another_directory/test.php /tmp
Dies ermöglicht eine größere Flexibilität beim Erstellen von Kommandozeilenanwendungen in PHP.
Hinweis:
Die CGI SAPI unterstützt das Verhalten der CLI SAPI durch Angabe der Option -C beim Starten von der Kommandozeile.
Die Liste der Kommandozeilenoptionen, die das PHP-Binary bereitstellt, kann jederzeit abgerufen werden, indem PHP mit der -h Option gestartet wird:
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 <addr>:<port> Run with built-in web server.
-t <docroot> Specify document root <docroot> for built-in web server.
-s Output HTML syntax highlighted source.
-v Version number
-w Output 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>.
--rz <name> Show information about Zend extension <name>.
--ri <name> Show configuration for extension <name>.
| Option | Langform | Beschreibung |
|---|---|---|
| -a | --interactive |
Startet PHP im interaktiven Modus. Weitere Informationen siehe die Dokumentation für den Interaktiven Modus. |
| -b | --bindpath |
Bind Path für den externen FASTCGI Server Modus (nur CGI). |
| -C | --no-chdir |
Nicht in das Verzeichnis des Skripts wechseln (nur CGI). |
| -q | --no-header |
Quiet-mode. Unterdrücke die Ausgabe von HTTP Headern (nur CGI). |
| -T | --timing |
Messe die Ausführungszeit des Skriptes. Dies wird count Mal durchgeführt (nur CGI). |
| -c | --php-ini |
Mit dieser Option kann man entweder ein Verzichnis angeben, in welchem nach der php.ini gesucht werden soll, oder man kann eine eigene INI-Datei 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 php.ini Datei an den vorgegebenen Orten gesucht. |
| -n | --no-php-ini |
php.ini komplett ignorieren. |
| -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]
# 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. Das -f ist optional und kann weggelassen werden. Es genügt nur den Dateinamen anzugeben.
|
| -h und -? | --help und --usage | Gibt eine Liste von Kommandozeilenoptionen, sowie kurzen Beschreibungen aus. |
| -i | --info | Diese Kommandozeilenoption ruft phpinfo() auf und gibt das Ergebnis aus. Wenn PHP nicht korrekt funktioniert, ist es empfehlenswert, 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 des angegebenen PHP-Codes 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.
|
| -m | --modules |
Beispiel #1 Ausgabe des geladenen PHP und Zend Module $ 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 Code direkt von der Kommandozeile. Die PHP Tags <?php und ?> werden nicht benötigt und verursachen einen Parsefehler, wenn sie dennoch vorhanden sind.
|
| -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.
Beispiel #4 Nutzung der -B , -R und -E Optionen, 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 | --server |
Startet den eingebauten Webserver. Verfügbar seit PHP 5.4.0. |
| -t | --docroot | Gibt den Document Root für den eingebauten Webserver an. Verfügbar seit PHP 5.4.0. |
| -s | --syntax-highlight und --syntax-highlighting |
Den Quelltext mit farbiger Syntaxhervorhebung anzeigen. Diese Option benutzt den internen Mechanismus zum Parsen von Dateien, um eine HTML-Version mit Syntax-Highlighting auf die Standardausgabe zu schreiben. Beachten Sie, dass sie nur einen Block von <code> [...] </code> HTML-Tags erzeugt, jedoch keine HTML-Header.
|
| -v | --version |
Beispiel #5 Nutzung von -v , um den SAPI Namen, sowie die PHP und Zend Version zu bestimmen $ php -v PHP 5.3.1 (cli) (built: Dec 11 2009 19:55:07) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies |
| -w | --strip |
Den Quelltext mit entfernten Kommentaren und Leerzeichen anzeigen.
|
| -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 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 #6 --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 Namen der Parameter). Verfügbar seit PHP 5.1.2. Diese Option ist nur verfügbar, wenn PHP mit Reflection-Unterstützung kompiliert wurde.
Beispiel #7 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 #8 --rc Beispiel $ 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 Erweiterung (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 #9 --re Beispiel $ php --re json
Extension [ <persistent> extension #19 json version 1.2.1 ] {
- Functions {
Function [ <internal> function json_encode ] {
}
Function [ <internal> function json_decode ] {
}
}
}
|
| --rz | --rzendextension |
Zeigt Konfiguration der gegebenen Zend-Erweiterung an (entspricht der von phpinfo() zurückgegebenen Information). Verfügbar seit PHP 5.4.0. |
| --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 kann über den speziellen Erweiterungsnamen "main" ermittelt werden.
Beispiel #10 --ri Beispiel $ php --ri date date date/time support => enabled "Olson" Timezone Database Version => 2009.20 Timezone Database => internal Default timezone => Europe/Oslo Directive => Local Value => Master Value date.timezone => Europe/Oslo => Europe/Oslo date.default_latitude => 59.930972 => 59.930972 date.default_longitude => 10.776699 => 10.776699 date.sunset_zenith => 90.583333 => 90.583333 date.sunrise_zenith => 90.583333 => 90.583333 |
Hinweis:
Die Optionen -rBRFEH, --ini und --r[fcezi] sind nur für CLI verfügbar.
Es gibt drei verschiedene Wege PHP Code in der CLI SAPI auszuführen:
PHP mitteilen, eine bestimmte Datei auszuführen.
php my_script.php php -f my_script.php
Beide Wege (ob sie die Option -f benutzen oder nicht) führen die Datei my_script.php aus. Es gibt keine Einschränkungen darauf welche Dateien ausgeführt werden können; beispielsweise muss ihr PHP-Skript nicht auf .php enden.
Hinweis:
Wenn Sie Argumente an das Skript übergeben wollen, müssen Sie als erstes Argument -- übergeben, wenn Sie die -f Option benutzen.
Den auszuführenden PHP-Code direkt auf der Kommandozeile angeben.
$ php -r 'print_r(get_defined_constants());'
Es muss besonders Acht auf die Ersetzung von Kommandozeilenvariablen und Benutzung von Anführungszeichen gegeben werden.
Hinweis:
Achten Sie darauf, dass sie keine PHP tags übergeben. Die Option -r benötigt diese nicht und wirft einen Parser-Fehler falls sie dennoch benutzt werden.
Eingabe des PHP-Codes über die Standardeingabe (stdin).
Dies eröffnet die Möglichkeit PHP dynamisch zu generieren und anschließend an die Binary zu übergeben, wie in diesem (ausgedachten) Beispiel dargestellt:
$ some_application | some_filter | php | sort -u > final_output.txt
Wie jede Kommandozeilenanwendung nimmt das PHP-Binary etliche Argumente entgegen, aber auch das 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 erste Index (Null) enthält immer den Skriptnamen. Wenn der Code mittels der -r Option ausgeführt wurde, ist der Wert von $argv[0] ein Bindestrich (-). Selbiges gilt für Code, welcher über STDIN ausgeführt wird.
Die zweite registrierte globale Variable ist $argc, welche die Anzahl der Elemente im $argv Array enthält (nicht die Anzahl Argumente, die dem Skript übergeben wurden).
Solange die Argumente, welche dem Skript übergeben werden, nicht mit dem Zeichen - beginnen, gibt es nichts besonderes zu beachten. Ein Argument, welches mit - beginnt zu übergeben, wird jedoch Probleme bereiten, da PHP denkt, dass es das Argument selbst verarbeiten muss. Nutzen Sie das Argument-Trennzeichen --, um dies 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 zeigt die Optionen von PHP an
$ 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"
}
Es gibt auf Unix-Systemen jedoch einen weiteren 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 benutzen. Sobald Sie die Datei ausführbar gemacht haben (beispielsweise mittels 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 +x 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 ausführbare PHP-Datei kann benutzt werden, um PHP-Skripte vollkommen unabhängig von einem Webserver auszuführen. Auf Unix-Systemen, sollte die spezielle #! ("shebang") erste Zeile zu PHP-Skripten hinzugefügt werden, damit das System automatisch herausfinden kann, welches Programm zur Ausführung der Datei genutzt werden 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 erstellen, 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 #2 Ein Skript, das von der Kommandozeile aus ausgeführt werden soll (script.php)
#!/usr/bin/php
<?php
if ($argc != 2 || 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.
In dem obigen Programm wird zuerst überprüft, dass das notwendige Argument angeben ist (zuzugülich dem Skriptnamen, welcher auch gezählt wird). Wenn nicht, oder wenn das Argument --help , -help , -h oder -? was, wird eine Hilfe-Nachricht ausgegeben, welche $argv[0] nutzt, um den genutzten Skript-Namen auszugeben. Andernfalls wird das Argument ausgegeben, genauso wie es übergeben wurde.
Wenn Sie das obige Skript unter UNIX laufen lassen wollen, müssen Sie es zuerst ausführbar machen, und es danach einfach als script.php GebeDasHierAus oder script.php -h aufrufen. Unter Windows können Sie zu diesem Zweck eine Batchdatei erstellen:
Beispiel #3 Batchdatei zur Ausführung eines Kommandozeilen-Skripts in PHP (script.bat)
@echo OFF "C:\php\php.exe" script.php %*
Angenommen, Sie haben das Programm script.php genannt und die CLI php.exe hat den Pfad C:\php\php.exe so wird diese Batchdatei es mit allen übergebenen Argumenten aufrufen: script.bat GebeDasHierAus oder script.bat -h.
Siehe auch die Readline-Erweiterung für weitere Funktionen, um Kommandozeilenanwendungen zu verbessern.
Auf Windows kann PHP so konfiguiert werden, dass auch ausgeführt wird, wenn weder C:\php\php.exe angegeben wird, noch die .php Dateierweiterung genutzt wird. Siehe dazu die Dokumentation zur PHP Kommandozeile auf Microsoft Windows.
Die CLI SAPI definiert einige Konstanten für Ein- und Ausgabestreams, um das Erstellen von Kommandozeilenanwendungen zu erleichtern.
| Konstante | Beschreibung |
|---|---|
STDIN |
Ein schon geöffneter Stream auf stdin. Dies erspart das Öffnen mit
<?php
<?php |
STDOUT |
Ein schon geöffneter Stream auf stdout. Das erspart das Öffnen mit
<?php |
STDERR |
Ein schon geöffneter Stream auf stderr. Das erspart das Öffnen mit
<?php |
Angesichts des oben genannten, brauchen Sie beispielsweise nicht selbst einen Stream für stderr öffnen, sondern können einfach die Konstante anstelle der Ressource benutzen:
php -r 'fwrite(STDERR, "stderr\n");'
Hinweis:
Diese Konstanten sind nicht verfügbar, wenn ein PHP Skript von stdin eingelesen wird.
Seite PHP 5.1.0 bietet die CLI SAPI mit der -a Option eine eine interaktive Shell an, wenn PHP mit der --with-readline Option kompiliert wurde.
Mittels der interaktiven Shell können sie PHP code eingeben und direkt ausführen lassen.
Beispiel #1 Ausführung von Code auf der interaktiven Shell
$ php -a
Interactive shell
php > echo 5+8;
13
php > function addTwo($n)
php > {
php { return $n + 2;
php { }
php > var_dump(addtwo(2));
int(4)
php >
Die interaktive Shell bietet ebenfalls Tab-Autovervollständigung für Funktionen, Konstanten, Klassen, Variablen, statische Methoden und Klassenkonstanten.
Beispiel #2 Tab-Autovervollständigung
Zweimaliges Drücken der Tab-Taste im Falle mehrerer Möglichkeiten führt zu einer Auflistung dieser Möglichkeiten:
php > strp[TAB][TAB] strpbrk strpos strptime php > strp
Wenn es nur eine mögliche Vervollständigung gibt, führt ein einmaliges Drücken der Tab-Taste zur Vervollständigung der Zeile:
php > strpt[TAB]ime(
Autovervollständigung funktioniert auch für Namen, welche bereits während dieser interaktiven Session definiert wurden:
php > $fooThisIsAReallyLongVariableName = 42; php > $foo[TAB]ThisIsAReallyLongVariableName
Die interaktive Shell speichert den Verlauf von zuletzt eingegeben Zeilen. Auf diesen kann mittels der Pfeiltasten zugegriffen werden. Er wird in der ~/.php_history Datei gespeichert.
Seit PHP 5.4.0 bietet die CLI SAPI die php.ini Optionen cli.pager
und cli.prompt. Die cli.pager
Option erlaubt einem externen Programm (wie etwa less) als
Pager für die Ausgabe zu agieren, anstatt dass diese direkt ausgegeben wird.
Die cli.prompt Option erlaubt das Ändern der
php > Eingabeaufforderung.
Seit PHP 5.4.0 ist es auch möglich php.ini Optionen einfacher zu ändern.
Beispiel #3 Setzen von php.ini Optionen in der interaktiven Shell
Die cli.prompt Option:
php > #cli.prompt=hello world :> hello world :>
Mittels Backticks kann PHP Code in dem Präfix ausgeführt werden:
php > #cli.prompt=`echo date('H:i:s');` php >
15:49:35 php > echo 'hi';
hi
15:49:43 php > sleep(2);
15:49:45 php >
Setzen des Pagers auf less:
php > #cli.pager=less php > phpinfo(); (output displayed in less) php >
Die cli.prompt Option unterstützt einige
Escape-Sequenzen.
| Sequenzen | Beschreibung |
|---|---|
| \e | Wird benutzt um Farben zur Eingabeaufforderung hinzuzufügen. Ein Beispiel: \e[032m\v \e[031m\b \e[34m\> \e[0m |
| \v | Die PHP Version. |
| \b | Gibt an, in welchem Block PHP sich befindet. Zum Beispiel gibt /* an, dass man sich gerade in einem mehrzeiligen Kommentar befindet. Der äußerste Block ist php. |
| \> | Gibt das Eingabeaufforderungszeichen an. Standardmäßig ist dies >, ändert sich jedoch, wenn sich die Shell innerhalb eines nicht beendeten Blocks oder Strings befindet. Mögliche Buchstaben sind: ' " { ( > |
Hinweis:
Dateien, die mit auto_prepend_file und auto_append_file eingebunden wurden, werden in diesem Modus mit einigen Einschränkungen geparset - Funktionen müssen etwa vor dem Aufruf definiert werden.
Hinweis:
Automatisches Laden (autoload) ist im interaktiven PHP CLI Modus nicht verfügbar.
Seit PHP 5.4.0 bietet die CLI SAPI einen eingebauten Webserver.
Dieser Webserver ist nur für Entwicklungszwecke vorgesehen, nicht jedoch für den Produktiveinsatz.
URI Anfragen werden von dem aktuellen Arbeitsverzeichnis ausgehend ausgeliefert, sofern nicht die -t Option genutzt wurde um einen expliziten Document Root anzugeben.
Wenn eine URI Anfrage keine Datei angibt, wird entweder index.php oder index.html aus dem aufgerufenen Verzeichnis zurückgegeben. Wenn beide Dateien nicht existieren, wird ein 404 Response Code zurückgeben.
Wenn auf der Kommandozeile beim Starten des Webservers eine PHP-Datei
angegeben wird, wird diese als "Router" Skript für den Webserver verwendet.
Dieses Skript wird dann zu Beginn jedes HTTP Requests gestartet. Wenn dieses
Skript FALSE zurückgibt, dann wird die angefragte Ressource direkt
zurückgegeben. Andernfalls wird die Ausgabe des Skripts zurückgegeben.
Beispiel #1 Starten des Webservers
$ cd ~/public_html $ php -S localhost:8000
Die Kommandozeile wird ausgeben:
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011 Listening on localhost:8000 Document root is /home/me/public_html Press Ctrl-C to quit
Nach URI Anfragen für http://localhost:8000/ und http://localhost:8000/myscript.html wird die Kommandozeile in etwa so aussehen:
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011 Listening on localhost:8000 Document root is /home/me/public_html Press Ctrl-C to quit. [Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read [Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read [Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read [Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read [Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read
Beispiel #2 Starten mit einem expliziten Document Root
$ cd ~/public_html $ php -S localhost:8000 -t foo/
Die Kommandozeile wird ausgeben:
PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011 Listening on localhost:8000 Document root is /home/me/public_html/foo Press Ctrl-C to quit
Beispiel #3 Nutzung eines Router-Skripts
Anfragen für Bilder werden diese direkt ausliefern; Anfragen für HTML-Dateien, werden stattdessen "Willkommen zu PHP!" ausgeben.
<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"]))
return false; // Liefere die angefragte Ressource direkt aus
else {
echo "<p>Willkommen zu PHP!</p>";
}
?>
$ php -S localhost:8000 router.php
Nach mehreren URI Anfragen, wird das Terminal etwa so aussehen:
PHP 5.4.0 Development Server started at Thu Jul 21 10:53:19 2011 Listening on localhost:8000 Document root is /home/me/public_html Press Ctrl-C to quit. [Thu Jul 21 10:53:45 2011] ::1:55801 GET /mylogo.jpg - Request read [Thu Jul 21 10:53:52 2011] ::1:55803 GET /abc.html - Request read [Thu Jul 21 10:53:52 2011] ::1:55804 GET /favicon.ico - Request read
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| cli_server.color | "0" | PHP_INI_ALL | Verfügbar seit PHP 5.4.0. |
Hier eine kurze Erklärung der Konfigurationsoptionen:
cli_server.color
boolean
Gibt an, ob der eingebaute Web Server ANSI Color Codes für Ausgaben auf die Kommandozeile nutzen soll.
This section explains the merits of the new Garbage Collection (also known as GC) mechanism that is part of PHP 5.3.
A PHP variable is stored in a container called a "zval". A zval container contains, besides the variable's type and value, two additional bits of information. The first is called "is_ref" and is a boolean value indicating whether or not the variable is part of a "reference set". With this bit, PHP's engine knows how to differentiate between normal variables and references. Since PHP allows user-land references, as created by the & operator, a zval container also has an internal reference counting mechanism to optimize memory usage. This second piece of additional information, called "refcount", contains how many variable names (also called symbols) point to this one zval container. All symbols are stored in a symbol table, of which there is one per scope. There is a scope for the main script (i.e., the one requested through the browser), as well as one for every function or method.
A zval container is created when a new variable is created with a constant value, such as:
Beispiel #1 Creating a new zval container
<?php
$a = "new string";
?>
In this case, the new symbol name, a, is created in the current scope,
and a new variable container is created with the type string and the value
new string. The "is_ref" bit is by default set to FALSE because no
user-land reference has been created. The "refcount" is set to 1 as
there is only one symbol that makes use of this variable container. Note
that if "refcount" is 1, "is_ref" is always FALSE. If you have » Xdebug installed, you can display this
information by calling xdebug_debug_zval().
Beispiel #2 Displaying zval information
<?php
xdebug_debug_zval('a');
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
a: (refcount=1, is_ref=0)='new string'
Assigning this variable to another variable name will increase the refcount.
Beispiel #3 Increasing refcount of a zval
<?php
$a = "new string";
$b = $a;
xdebug_debug_zval( 'a' );
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
a: (refcount=2, is_ref=0)='new string'
The refcount is 2 here, because the same variable container is linked with both a and b. PHP is smart enough not to copy the actual variable container when it is not necessary. Variable containers get destroyed when the "refcount" reaches zero. The "refcount" gets decreased by one when any symbol linked to the variable container leaves the scope (e.g. when the function ends) or when unset() is called on a symbol. The following example shows this:
Beispiel #4 Decreasing zval refcount
<?php
$a = "new string";
$c = $b = $a;
xdebug_debug_zval( 'a' );
unset( $b, $c );
xdebug_debug_zval( 'a' );
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
a: (refcount=3, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string'
If we now call unset($a);, the variable container, including the type and value, will be removed from memory.
Things get a tad more complex with compound types such as arrays and objects. Instead of a scalar value, arrays and objects store their properties in a symbol table of their own. This means that the following example creates three zval containers:
Beispiel #5 Creating a array zval
<?php
$a = array( 'meaning' => 'life', 'number' => 42 );
xdebug_debug_zval( 'a' );
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
a: (refcount=1, is_ref=0)=array ( 'meaning' => (refcount=1, is_ref=0)='life', 'number' => (refcount=1, is_ref=0)=42 )
Or graphically
The three zval containers are: a, meaning, and number. Similar rules apply for increasing and decreasing "refcounts". Below, we add another element to the array, and set its value to the contents of an already existing element:
Beispiel #6 Adding already existing element to an array
<?php
$a = array( 'meaning' => 'life', 'number' => 42 );
$a['life'] = $a['meaning'];
xdebug_debug_zval( 'a' );
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
a: (refcount=1, is_ref=0)=array ( 'meaning' => (refcount=2, is_ref=0)='life', 'number' => (refcount=1, is_ref=0)=42, 'life' => (refcount=2, is_ref=0)='life' )
Or graphically
From the above Xdebug output, we see that both the old and new array elements now point to a zval container whose "refcount" is 2. Although Xdebug's output shows two zval containers with value 'life', they are the same one. The xdebug_debug_zval() function does not show this, but you could see it by also displaying the memory pointer.
Removing an element from the array is like removing a symbol from a scope. By doing so, the "refcount" of a container that an array element points to is decreased. Again, when the "refcount" reaches zero, the variable container is removed from memory. Again, an example to show this:
Beispiel #7 Removing an element from an array
<?php
$a = array( 'meaning' => 'life', 'number' => 42 );
$a['life'] = $a['meaning'];
unset( $a['meaning'], $a['number'] );
xdebug_debug_zval( 'a' );
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
a: (refcount=1, is_ref=0)=array ( 'life' => (refcount=1, is_ref=0)='life' )
Now, things get interesting if we add the array itself as an element of the array, which we do in the next example, in which we also sneak in a reference operator, since otherwise PHP would create a copy:
Beispiel #8 Adding the array itself as an element of it self
<?php
$a = array( 'one' );
$a[] =& $a;
xdebug_debug_zval( 'a' );
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
a: (refcount=2, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=2, is_ref=1)=... )
Or graphically
You can see that the array variable (a) as well as the second element (1) now point to a variable container that has a "refcount" of 2. The "..." in the display above shows that there is recursion involved, which, of course, in this case means that the "..." points back to the original array.
Just like before, unsetting a variable removes the symbol, and the reference count of the variable container it points to is decreased by one. So, if we unset variable $a after running the above code, the reference count of the variable container that $a and element "1" point to gets decreased by one, from "2" to "1". This can be represented as:
Beispiel #9 Unsetting $a
(refcount=1, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=1, is_ref=1)=... )
Or graphically
Although there is no longer a symbol in any scope pointing to this structure, it cannot be cleaned up because the array element "1" still points to this same array. Because there is no external symbol pointing to it, there is no way for a user to clean up this structure; thus you get a memory leak. Fortunately, PHP will clean up this data structure at the end of the request, but before then, this is taking up valuable space in memory. This situation happens often if you're implementing parsing algorithms or other things where you have a child point back at a "parent" element. The same situation can also happen with objects of course, where it actually is more likely to occur, as objects are always implicitly used by reference.
This might not be a problem if this only happens once or twice, but if there are thousands, or even millions, of these memory losses, this obviously starts being a problem. This is especially problematic in long running scripts, such as daemons where the request basically never ends, or in large sets of unit tests. The latter caused problems while running the unit tests for the Template component of the eZ Components library. In some cases, it would require over 2 GB of memory, which the test server didn't quite have.
Traditionally, reference counting memory mechanisms, such as that used previously by PHP, fail to address circular reference memory leaks. As of 5.3.0 PHP however implements the synchronous algorithm from the » Concurrent Cycle Collection in Reference Counted Systems paper which addresses that issue.
A full explanation of how the algorithm works would be slightly beyond the scope of this section, but the basics are explained here. First of all, we have to establish a few ground rules. If a refcount is increased, it's still in use and therefore, not garbage. If the refcount is decreased and hits zero, the zval can be freed. This means that garbage cycles can only be created when a refcount argument is decreased to a non-zero value. Secondly, in a garbage cycle, it is possible to discover which parts are garbage by checking whether it is possible to decrease their refcount by one, and then checking which of the zvals have a refcount of zero.
To avoid having to call the checking of garbage cycles with every possible decrease of a refcount, the algorithm instead puts all possible roots (zvals) in the "root buffer" (marking them "purple"). It also makes sure that each possible garbage root ends up in the buffer only once. Only when the root buffer is full does the collection mechanism start for all the different zvals inside. See step A in the figure above.
In step B, the algorithm runs a depth-first search on all possible roots to decrease by one the refcounts of each zval it finds, making sure not to decrease a refcount on the same zval twice (by marking them as "grey"). In step C, the algorithm again runs a depth-first search from each root node, to check the refcount of each zval again. If it finds that the refcount is zero, the zval is marked "white" (blue in the figure). If it's larger than zero, it reverts the decreasing of the refcount by one with a depth-first search from that point on, and they are marked "black" again. In the last step (D), the algorithm walks over the root buffer removing the zval roots from there, and meanwhile, checks which zvals have been marked "white" in the previous step. Every zval marked as "white" will be freed.
Now that you have a basic understanding of how the algorithm works, we will look back at how this integrates with PHP. By default, PHP's garbage collector is turned on. There is, however, a php.ini setting that allows you to change this: zend.enable_gc .
When the garbage collector is turned on, the cycle-finding algorithm as described above is executed whenever the root buffer runs full. The root buffer has a fixed size of 10,000 possible roots (although you can alter this by changing the GC_ROOT_BUFFER_MAX_ENTRIES constant in Zend/zend_gc.c in the PHP source code, and re-compiling PHP). When the garbage collector is turned off, the cycle-finding algorithm will never run. However, possible roots will always be recorded in the root buffer, no matter whether the garbage collection mechanism has been activated with this configuration setting.
If the root buffer becomes full with possible roots while the garbage collection mechanism is turned off, further possible roots will simply not be recorded. Those possible roots that are not recorded will never be analyzed by the algorithm. If they were part of a circular reference cycle, they would never be cleaned up and would create a memory leak.
The reason why possible roots are recorded even if the mechanism has been disabled is because it's faster to record possible roots than to have to check whether the mechanism is turned on every time a possible root could be found. The garbage collection and analysis mechanism itself, however, can take a considerable amount of time.
Besides changing the zend.enable_gc configuration setting, it is also possible to turn the garbage collecting mechanism on and off by calling gc_enable() or gc_disable() respectively. Calling those functions has the same effect as turning on or off the mechanism with the configuration setting. It is also possible to force the collection of cycles even if the possible root buffer is not full yet. For this, you can use the gc_collect_cycles() function. This function will return how many cycles were collected by the algorithm.
The rationale behind the ability to turn the mechanism on and off, and to initiate cycle collection yourself, is that some parts of your application could be highly time-sensitive. In those cases, you might not want the garbage collection mechanism to kick in. Of course, by turning off the garbage collection for certain parts of your application, you do risk creating memory leaks because some possible roots might not fit into the limited root buffer. Therefore, it is probably wise to call gc_collect_cycles() just before you call gc_disable() to free up the memory that could be lost through possible roots that are already recorded in the root buffer. This then leaves an empty buffer so that there is more space for storing possible roots while the cycle collecting mechanism is turned off.
We have already mentioned in the previous section that simply collecting the possible roots had a very tiny performance impact, but this is when you compare PHP 5.2 against PHP 5.3. Although the recording of possible roots compared to not recording them at all, like in PHP 5.2, is slower, other changes to the PHP runtime in PHP 5.3 prevented this particular performance loss from even showing.
There are two major areas in which performance is affected. The first area is reduced memory usage, and the second area is run-time delay when the garbage collection mechanism performs its memory cleanups. We will look at both of those issues.
First of all, the whole reason for implementing the garbage collection mechanism is to reduce memory usage by cleaning up circular-referenced variables as soon as the prerequisites are fulfilled. In PHP's implementation, this happens as soon as the root-buffer is full, or when the function gc_collect_cycles() is called. In the graph below, we display the memory usage of the script below, in both PHP 5.2 and PHP 5.3, excluding the base memory that PHP itself uses when starting up.
Beispiel #1 Memory usage example
<?php
class Foo
{
public $var = '3.1415962654';
}
$baseMemory = memory_get_usage();
for ( $i = 0; $i <= 100000; $i++ )
{
$a = new Foo;
$a->self = $a;
if ( $i % 500 === 0 )
{
echo sprintf( '%8d: ', $i ), memory_get_usage() - $baseMemory, "\n";
}
}
?>
In this very academic example, we are creating an object in which a property is set to point back to the object itself. When the $a variable in the script is re-assigned in the next iteration of the loop, a memory leak would typically occur. In this case, two zval-containers are leaked (the object zval, and the property zval), but only one possible root is found: the variable that was unset. When the root-buffer is full after 10,000 iterations (with a total of 10,000 possible roots), the garbage collection mechanism kicks in and frees the memory associated with those possible roots. This can very clearly be seen in the jagged memory-usage graph for PHP 5.3. After each 10,000 iterations, the mechanism kicks in and frees the memory associated with the circular referenced variables. The mechanism itself does not have to do a whole lot of work in this example, because the structure that is leaked is extremely simple. From the diagram, you see that the maximum memory usage in PHP 5.3 is about 9 Mb, whereas in PHP 5.2 the memory usage keeps increasing.
The second area where the garbage collection mechanism influences performance is the time taken when the garbage collection mechanism kicks in to free the "leaked" memory. In order to see how much this is, we slightly modify the previous script to allow for a larger number of iterations and the removal of the intermediate memory usage figures. The second script is here:
Beispiel #2 GC performance influences
<?php
class Foo
{
public $var = '3.1415962654';
}
for ( $i = 0; $i <= 1000000; $i++ )
{
$a = new Foo;
$a->self = $a;
}
echo memory_get_peak_usage(), "\n";
?>
We will run this script two times, once with the zend.enable_gc setting turned on, and once with it turned off:
Beispiel #3 Running the above script
time php -dzend.enable_gc=0 -dmemory_limit=-1 -n example2.php # and time php -dzend.enable_gc=1 -dmemory_limit=-1 -n example2.php
On my machine, the first command seems to take consistently about 10.7 seconds, whereas the second command takes about 11.4 seconds. This is a slowdown of about 7%. However, the maximum amount of memory used by the script is reduced by 98% from 931Mb to 10Mb. This benchmark is not very scientific, or even representative of real-life applications, but it does demonstrate the memory usage benefits that this garbage collection mechanism provides. The good thing is that the slowdown is always the same 7%, for this particular script, while the memory saving capabilities save more and more memory as more circular references are found during script execution.
It is possible to coax a little bit more information about how the garbage collection mechanism is run from within PHP. But in order to do so, you will have to re-compile PHP to enable the benchmark and data-collecting code. You will have to set the CFLAGS environment variable to -DGC_BENCH=1 prior to running ./configure with your desired options. The following sequence should do the trick:
Beispiel #4 Recompiling PHP to enable GC benchmarking
export CFLAGS=-DGC_BENCH=1 ./config.nice make clean make
When you run the above example code again with the newly built PHP binary, you will see the following being shown after PHP has finished execution:
Beispiel #5 GC statistics
GC Statistics
-------------
Runs: 110
Collected: 2072204
Root buffer length: 0
Root buffer peak: 10000
Possible Remove from Marked
Root Buffered buffer grey
-------- -------- ----------- ------
ZVAL 7175487 1491291 1241690 3611871
ZOBJ 28506264 1527980 677581 1025731
The most informative statistics are displayed in the first block. You can see here that the garbage collection mechanism ran 110 times, and in total, more than 2 million memory allocations were freed during those 110 runs. As soon as the garbage collection mechanism has run at least one time, the "Root buffer peak" is always 10000.
In general the garbage collector in PHP will only cause a slowdown when the cycle collecting algorithm actually runs, whereas in normal (smaller) scripts there should be no performance hit at all.
However, in the cases where the cycle collection mechanism does run for normal scripts, the memory reduction it will provide allows more of those scripts to run concurrently on your server, since not so much memory is used in total.
The benefits are most apparent for longer-running scripts, such as lengthy test suites or daemon scripts. Also, for » PHP-GTK applications that generally tend to run longer than scripts for the Web, the new mechanism should make quite a bit of a difference regarding memory leaks creeping in over time.
Siehe auch Extension-Liste/-Kategorisierung.
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Hinweis: Unter Windows benötigt APC ein existierenden 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 keine dieser Variablen gesetzt ist.
Hinweis: Für weiter in die Tiefe gehende technische Implementationsdetails nutzen Sie bitte die von den Entwicklern bereitgestellte » TECHNOTES Datei.
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.
When APC is compiled with mmap support (Memory Mapping), it will use only one memory segment, unlike when APC is built with SHM (SysV Shared Memory) support that uses multiple memory segments. MMAP does not have a maximum limit like SHM does in /proc/sys/kernel/shmmax. In general MMAP support is recommeded because it will reclaim the memory faster when the webserver is restarted and all in all reduces memory allocation impact at startup.
| Name | Standard | Veränderbar | 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 | "32M" | 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 | "1" | PHP_INI_SYSTEM | Available since APC 3.0.0. Prior to APC 3.1.4, the default value was "0" (disabled). |
| 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.use_request_time | "1" | PHP_INI_ALL | Available since APC 3.1.3. |
| 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.rfc1867_ttl | "3600" | PHP_INI_SYSTEM | Available since APC 3.1.1. |
| 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. |
| apc.preload_path | NULL | PHP_INI_SYSTEM | Available since APC 3.1.1. |
| apc.file_md5 | "0" | PHP_INI_SYSTEM | Available since APC 3.1.1. |
| apc.canonicalize | "1" | PHP_INI_SYSTEM | Available since APC 3.1.1. |
| apc.lazy_functions | 0 | PHP_INI_SYSTEM | Available since APC 3.1.3. |
| apc.lazy_classes | 0 | PHP_INI_SYSTEM | Available since APC 3.1.3. |
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.
This feature is EXPERIMENTAL. The behaviour of this directive, its name, and surrounding documentation may change without notice in a future release of APC. This feature should be used at your own risk.
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.
Note that the rate is only available once all file transfers are completed.
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.rfc1867_ttl
bool
TTL for rfc1867 entries.
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.
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.
apc.canonicalize
bool
If on, then relative paths are canonicalized in no-stat mode. If set, then files included via stream wrappers can not be cached as realpath() does not support stream wrappers.
apc.preload_path
string
apc.use_request_time
bool
Use the SAPI request start time for TTL.
apc.file_md5
bool
Records a md5 hash of files.
apc.lazy_functions
integer
Enables lazy loading for functions.
apc.lazy_classes
integer
Enables lazy loading for classes.
Diese Erweiterung definiert keine Ressource-Typen.
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.
APC_BIN_VERIFY_CRC32
(integer)
APC_BIN_VERIFY_MD5
(integer)
APC_ITER_ALL
(integer)
APC_ITER_ATIME
(integer)
APC_ITER_CTIME
(integer)
APC_ITER_DEVICE
(integer)
APC_ITER_DTIME
(integer)
APC_ITER_FILENAME
(integer)
APC_ITER_INODE
(integer)
APC_ITER_KEY
(integer)
APC_ITER_MD5
(integer)
APC_ITER_MEM_SIZE
(integer)
APC_ITER_MTIME
(integer)
APC_ITER_NONE
(integer)
APC_ITER_NUM_HITS
(integer)
APC_ITER_REFCOUNT
(integer)
APC_ITER_TTL
(integer)
APC_ITER_TYPE
(integer)
APC_ITER_VALUE
(integer)
APC_LIST_ACTIVE
(integer)
APC_LIST_DELETED
(integer)
(PECL apc >= 3.0.13)
apc_add — Cache a new variable in the data store
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).
key
Store the variable using this name. keys 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.).
values
Names in key, variables in value.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Second syntax returns array with error keys.
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"
(PECL apc >= 3.1.4)
apc_bin_dump — Get a binary dump of the given files and user variables
$files
[, array $user_vars
]] )
Returns a binary dump of the given files and user variables from the APC cache.
A NULL for files or user_vars signals a dump of every entry, whereas array() will dump
nothing.
Returns a binary dump of the given files and user variables from the APC cache,
FALSE if APC is not enabled, or NULL if an unknown error is encountered.
(PECL apc >= 3.1.4)
apc_bin_dumpfile — Output a binary dump of cached files and user variables to a file
$files
, array $user_vars
, string $filename
[, int $flags = 0
[, resource $context
]] )Outputs a binary dump of the given files and user variables from the APC cache to the named file.
files
The file names being dumped.
user_vars
The user variables being dumped.
filename
The filename where the dump is being saved.
flags
Flags passed to the filename stream. See the
file_put_contents() documentation for details.
context
The context passed to the filename stream. See the
file_put_contents() documentation for details.
The number of bytes written to the file, otherwise
FALSE if APC is not enabled, filename is an invalid file name,
filename can't be opened, the file dump can't be completed
(e.g., the hard drive is out of disk space), or an unknown error was encountered.
(PECL apc >= 3.1.4)
apc_bin_load — Load a binary dump into the APC file/user cache
$data
[, int $flags = 0
] )Loads the given binary dump into the APC file/user cache.
data
The binary dump being loaded, likely from apc_bin_dump().
flags
Either APC_BIN_VERIFY_CRC32, APC_BIN_VERIFY_MD5,
or both.
Returns TRUE if the binary dump data was loaded
with success, otherwise FALSE is returned. FALSE is returned if APC
is not enabled, or if the data is not a valid APC
binary dump (e.g., unexpected size).
Beispiel #1 apc_bin_load() example
<?php
$data = apc_bin_dump(NULL, NULL);
apc_bin_load($data, APC_BIN_VERIFY_MD5 | APC_BIN_VERIFY_CRC32);
?>
(PECL apc >= 3.1.4)
apc_bin_loadfile — Load a binary dump from a file into the APC file/user cache
$filename
[, resource $context
[, int $flags
]] )Loads a binary dump from a file into the APC file/user cache.
filename
The file name containing the dump, likely from apc_bin_dumpfile().
context
The files context.
flags
Either APC_BIN_VERIFY_CRC32, APC_BIN_VERIFY_MD5,
or both.
Returns TRUE on success, otherwise FALSE Reasons it may return FALSE include
APC is not enabled, filename is an invalid file name or empty,
filename can't be opened, the file dump can't be completed, or
if the data is not a valid APC binary dump (e.g., unexpected
size).
(PECL apc >= 2.0.0)
apc_cache_info — Retrieves cached information from APC's data store
$cache_type
[, bool $limited = false
]] )Retrieves cached information and meta-data from APC's data store.
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.
Array of cached data (and meta-data)Im Fehlerfall wird FALSE zurückgegeben.
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.
| Version | Beschreibung |
|---|---|
| 3.0.11 |
The limited parameter was introduced.
|
| 3.0.16 |
The "filehits" option for the
cache_type parameter was introduced.
|
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)
)
(PECL apc >= 3.1.1)
apc_cas — Updates an old value with a new value
$key
, int $old
, int $new
)
apc_cas() updates an already existing integer value if the
old parameter matches the currently stored value
with the value of the new parameter.
key
The key of the value being updated.
old
The old value (the value currently stored).
new
The new value to update to.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 apc_cas() example
<?php
apc_store('foobar', 2);
echo '$foobar = 2', PHP_EOL;
echo '$foobar == 1 ? 2 : 1 = ', (apc_cas('foobar', 1, 2) ? 'ok' : 'fail'), PHP_EOL;
echo '$foobar == 2 ? 1 : 2 = ', (apc_cas('foobar', 2, 1) ? 'ok' : 'fail'), PHP_EOL;
echo '$foobar = ', apc_fetch('foobar'), PHP_EOL;
echo '$f__bar == 1 ? 2 : 1 = ', (apc_cas('f__bar', 1, 2) ? 'ok' : 'fail'), PHP_EOL;
apc_store('perfection', 'xyz');
echo '$perfection == 2 ? 1 : 2 = ', (apc_cas('perfection', 2, 1) ? 'ok' : 'epic fail'), PHP_EOL;
echo '$foobar = ', apc_fetch('foobar'), PHP_EOL;
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
$foobar = 2 $foobar == 1 ? 2 : 1 = fail $foobar == 2 ? 1 : 2 = ok $foobar = 1 $f__bar == 1 ? 2 : 1 = fail $perfection == 2 ? 1 : 2 = epic fail $foobar = 1
(PECL apc >= 2.0.0)
apc_clear_cache — Clears the APC cache
$cache_type
] )Clears the user/system cache.
cache_type
If cache_type is "user", the
user cache will be cleared; otherwise, the system cache (cached files)
will be cleared.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL apc >= 3.0.13)
apc_compile_file — Speichert eine Datei im Bytecode Cache unter Umgehung aller Filter.
Speichert eine Date im Bytecode Cache unter Umgehung aller Filter.
filename
Absoluter oder relativer Pfad zu einer PHP Datei die kompiliert und im Bytecode Cache abgelegt werden soll.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL apc >= 3.1.1)
apc_dec — Decrease a stored number
$key
[, int $step = 1
[, bool &$success
]] )Decreases a stored integer value.
key
The key of the value being decreased.
step
The step, or value to decrease.
success
Optionally pass the success or fail boolean value to this referenced variable.
Returns the current value of key's value on success,
Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 apc_dec() example
<?php
echo "Let's do something with success", PHP_EOL;
apc_store('anumber', 42);
echo apc_fetch('anumber'), PHP_EOL;
echo apc_dec('anumber'), PHP_EOL;
echo apc_dec('anumber', 10), PHP_EOL;
echo apc_dec('anumber', 10, $success), PHP_EOL;
var_dump($success);
echo "Now, let's fail", PHP_EOL, PHP_EOL;
apc_store('astring', 'foo');
$ret = apc_dec('astring', 1, $fail);
var_dump($ret);
var_dump($fail);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Let's do something with success 42 41 31 21 bool(true) Now, let's fail bool(false) bool(false)
(PECL apc >= 3.0.0)
apc_define_constants — Defines a set of constants for retrieval and mass-definition
$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
constantsparameter, effectively clearing the stored value(s).
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 apc_define_constants() example
<?php
$constants = array(
'ONE' => 1,
'TWO' => 2,
'THREE' => 3,
);
apc_define_constants('numbers', $constants);
echo ONE, TWO, THREE;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
123
(PECL apc >= 3.1.1)
apc_delete_file — Deletes files from the opcode cache
keys
The files to be deleted. Accepts a string, array of strings, or an APCIterator object.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Or if keys is an array, then
an empty array is returned on success, or an array of failed files
is returned.
Beispiel #1 apc_delete_file() example
<?php
$filename = 'file.php';
if (apc_compile_file($filename)) {
if (apc_delete_file($filename)) {
echo "Successfully deleted file $filename from APC cache.", PHP_EOL;
}
}
if (apc_compile_file($filename)) {
if ($good = apc_delete_file(array($filename, 'donotexist.php'))) {
var_dump($good);
}
}
$bad = apc_delete_file('donotexist.php');
var_dump($bad);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Successfully deleted file file.php from APC cache.
[Mon May 24 09:30:33 2010] [apc-warning] Could not stat file donotexist.php, unable to delete from cache. in /tmp/test.php on line 13.
array(1) {
[0]=>
string(14) "donotexist.php"
}
[Mon May 24 09:30:33 2010] [apc-warning] Could not stat file donotexist.php, unable to delete from cache. in /tmp/test.php on line 18.
bool(false)
(PECL apc >= 3.0.0)
apc_delete — Removes a stored variable from the cache
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 A apc_delete() example
<?php
$bar = 'BAR';
apc_store('foo', $bar);
apc_delete('foo');
// this is obviously useless in this form
?>
(PECL apc >= 3.1.4)
apc_exists — Checks if APC key exists
Returns TRUE if the key exists, otherwise FALSE Or if an
array was passed to keys, then
an array is returned that contains all existing keys, or an empty
array if none exist.
Beispiel #1 apc_exists() example
<?php
$fruit = 'apple';
$veggie = 'carrot';
apc_store('foo', $fruit);
apc_store('bar', $veggie);
if (apc_exists('foo')) {
echo "Foo exists: ";
echo apc_fetch('foo');
} else {
echo "Foo does not exist";
}
echo PHP_EOL;
if (apc_exists('baz')) {
echo "Baz exists.";
} else {
echo "Baz does not exist";
}
echo PHP_EOL;
$ret = apc_exists(array('foo', 'donotexist', 'bar'));
var_dump($ret);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Foo exists: apple
Baz does not exist
array(2) {
["foo"]=>
bool(true)
["bar"]=>
bool(true)
}
(PECL apc >= 3.0.0)
apc_fetch — Fetch a stored variable from the cache
Fetchs a stored variable from the cache.
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.
The stored variable or array of variables on success; FALSE on failure
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"
| Version | Beschreibung |
|---|---|
| 3.0.17 |
The success parameter was added.
|
(PECL apc >= 3.1.1)
apc_inc — Increase a stored number
$key
[, int $step = 1
[, bool &$success
]] )Increases a stored number.
key
The key of the value being increased.
step
The step, or value to increase.
success
Optionally pass the success or fail boolean value to this referenced variable.
Returns the current value of key's value on success,
Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 apc_inc() example
<?php
echo "Let's do something with success", PHP_EOL;
apc_store('anumber', 42);
echo apc_fetch('anumber'), PHP_EOL;
echo apc_inc('anumber'), PHP_EOL;
echo apc_inc('anumber', 10), PHP_EOL;
echo apc_inc('anumber', 10, $success), PHP_EOL;
var_dump($success);
echo "Now, let's fail", PHP_EOL, PHP_EOL;
apc_store('astring', 'foo');
$ret = apc_inc('astring', 1, $fail);
var_dump($ret);
var_dump($fail);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
42 43 53 63 bool(true) Now, let's fail bool(false) bool(false)
(PECL apc >= 3.0.0)
apc_load_constants — Loads a set of constants from the cache
$key
[, bool $case_sensitive = true
] )Loads a set of constants from the cache.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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 ONE, TWO, THREE;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
123
(PECL apc >= 2.0.0)
apc_sma_info — Retrieves APC's Shared Memory Allocation information
$limited = false
] )Retrieves APC's Shared Memory Allocation information.
limited
When set to FALSE (default) apc_sma_info() will
return a detailed information about each segment.
Array of Shared Memory Allocation data; FALSE on failure.
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
)
)
)
)
(PECL apc >= 3.0.0)
apc_store — Cache a variable in the data store
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).
key
Store the variable using this name. keys 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.).
values
Names in key, variables in value.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Second syntax returns array with error keys.
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"
(PECL apc >= 3.1.1)
The APCIterator class makes it easier to iterate over large APC caches. This is helpful as it allows iterating over large caches in steps, while grabbing a defined number of entries per lock instance, so it frees the cache locks for other activities rather than hold up the entire cache to grab 100 (the default) entries. Also, using regular expression matching is more efficient as it's been moved to the C level.
$cache
[, mixed $search = null
[, int $format
[, int $chunk_size = 100
[, int $list
]]]] )(PECL apc >= 3.1.1)
APCIterator::__construct — Constructs an APCIterator iterator object
$cache
[, mixed $search = null
[, int $format
[, int $chunk_size = 100
[, int $list
]]]] )Constructs an APCIterator object.
cache
The cache type, which will be user or file.
search
A PCRE regular expression that
matches against APC key names, either as a string for
a single regular expression, or as an array of regular
expressions. Or, optionally pass in NULL to skip the search.
format
The desired format, as configured with one ore more of the APC_ITER_* constants.
chunk_size
The chunk size. Must be a value greater than 0. The default value is 100.
list
The type to list. Either pass in APC_LIST_ACTIVE
or APC_LIST_DELETED.
An APCIterator object on success,
or NULL on failure.
Beispiel #1 A APCIterator::__construct() example
<?php
foreach (new APCIterator('user', '/^counter\./') as $counter) {
echo "$counter[key]: $counter[value]\n";
apc_dec($counter['key'], $counter['value']);
}
?>
(PECL apc >= 3.1.1)
APCIterator::current — Get current item
Gets the current item from the APCIterator stack.
Diese Funktion hat keine Parameter.
Returns the current item on success, or FALSE if no
more items or exist, or on failure.
(PECL apc >= 3.1.1)
APCIterator::getTotalCount — Get total count
Get the total count.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Diese Funktion hat keine Parameter.
The total count.
(PECL apc >= 3.1.1)
APCIterator::getTotalHits — Get total cache hits
Gets the total number of cache hits.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Diese Funktion hat keine Parameter.
The number of hits on success, or FALSE on failure.
(PECL apc >= 3.1.1)
APCIterator::getTotalSize — Get total cache size
Gets the total cache size.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Diese Funktion hat keine Parameter.
The total cache size.
(PECL apc >= 3.1.1)
APCIterator::key — Get iterator key
Gets the current iterator key.
Diese Funktion hat keine Parameter.
Returns the key on success, or FALSE upon failure.
(PECL apc >= 3.1.1)
APCIterator::next — Move pointer to next item
Moves the iterator pointer to the next element.
Diese Funktion hat keine Parameter.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL apc >= 3.1.1)
APCIterator::rewind — Rewinds iterator
Rewinds back the iterator to the first element.
Diese Funktion hat keine Parameter.
Es wird kein Wert zurückgegeben.
(PECL apc >= 3.1.1)
APCIterator::valid — Checks if current position is valid
Checks if the current iterator position is valid.
Diese Funktion hat keine Parameter.
Returns TRUE if the current iterator position is valid, otherwise FALSE.
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.
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).
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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/apd.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
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)
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.
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| apd.dumpdir | NULL | PHP_INI_ALL | |
| apd.statement_tracing | "0" | PHP_INI_ALL | Available since apd 0.9. |
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.
Diese Erweiterung definiert keine Ressource-Typen.
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.
| 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 |
As the first line of your PHP script, call the apd_set_pprof_trace() function to start the trace:
<?php
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.
Now run your script. The dump output will be written to apd.dumpdir/pprof_pid.ext.
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
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.
To generate a calltree file that you can import into the KCacheGrind profile analysis application, issue the pprof2calltree comand.
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.
(PECL apd >= 0.2)
apd_breakpoint — Stops the interpreter and waits on a CR from the socket
$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.
debug_levelEin 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
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
(PECL apd 0.2-0.4)
apd_callstack — Returns the current call stack as an array
Returns the current call stack as an array
An array containing the current call stack.
Beispiel #1 apd_callstack() example
<?php
print_r(apd_callstack());
?>
(PECL apd 0.2-0.4)
apd_clunk — Throw a warning and a callstack
$warning
[, string $delimiter
] )Behaves like perl's Carp::cluck. Throw a warning and a callstack.
warning
The warning to throw.
delimiter
The delimiter. Default to <BR />.
Es wird kein Wert zurückgegeben.
Beispiel #1 apd_clunk() example
<?php
apd_clunk("Some Warning", "<br/>");
?>
(PECL apd >= 0.2)
apd_continue — Restarts the interpreter
$debug_level
)Usually sent via the socket to restart the interpreter.
debug_levelEin 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
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 apd_continue() example
<?php
apd_continue(0);
?>
(PECL apd 0.2-0.4)
apd_croak — Throw an error, a callstack and then exit
$warning
[, string $delimiter
] )Behaves like perl's Carp::croak. Throw an error, a callstack and then exit.
warning
The warning to throw.
delimiter
The delimiter. Default to <BR />.
Es wird kein Wert zurückgegeben.
Beispiel #1 apd_croak() example
<?php
apd_croak("Some Warning","<P>");
?>
(Unknown)
apd_dump_function_table — Outputs the current function table
Outputs the current function table.
Es wird kein Wert zurückgegeben.
Beispiel #1 apd_dump_function_table() example
<?php
apd_dump_function_table();
?>
(PECL apd 0.2-0.4)
apd_dump_persistent_resources — Return all persistent resources as an array
Return all persistent resources as an array.
An array containing the current call stack.
Beispiel #1 apd_dump_persistent_resources() example
<?php
print_r(apd_dump_persistent_resources());
?>
(PECL apd 0.2-0.4)
apd_dump_regular_resources — Return all current regular resources as an array
Return all current regular resources as an array.
An array containing the current regular resources.
Beispiel #1 apd_dump_regular_resources() example
<?php
print_r(apd_dump_regular_resources());
?>
(PECL apd >= 0.2)
apd_echo — Echo to the debugging socket
$output
)Usually sent via the socket to request information about the running script.
output
The debugged variable.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 apd_echo() example
<?php
apd_echo($i);
?>
(PECL apd 0.2)
apd_get_active_symbols — Get an array of the current variables names in the local scope
Returns the names of all the variables defined in the active scope, (not their values).
A multidimensional array with all the variables.
Beispiel #1 apd_get_active_symbols() example
<?php
apd_echo(apd_get_active_symbols());
?>
(PECL apd >= 0.2)
apd_set_pprof_trace — Starts the session debugging
$dump_directory
[, string $fragment = "pprof"
]] )Starts debugging to pprof_{process_id} in the dump directory.
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
Returns path of the destination file.
Beispiel #1 apd_set_pprof_trace() example
<?php
apd_set_pprof_trace();
?>
(PECL apd >= 0.2)
apd_set_session_trace_socket — Starts the remote session debugging
$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.
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_levelEin 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
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 apd_set_session_trace_socket() example
<?php
apd_set_session_trace_socket("127.0.0.1",APD_AF_INET,7112,0);
?>
(PECL apd 0.2-0.4)
apd_set_session_trace — Starts the session debugging
$debug_level
[, string $dump_directory
] )Starts debugging to apd_dump_{process_id} in the dump directory.
debug_levelEin 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.
Es wird kein Wert zurückgegeben.
Beispiel #1 apd_set_session_trace() example
<?php
apd_set_session_trace(99);
?>
(PECL apd 0.2-0.4)
apd_set_session — Changes or sets the current debugging level
$debug_level
)This can be used to increase or decrease debugging in a different area of your application.
debug_levelEin 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
Es wird kein Wert zurückgegeben.
Beispiel #1 apd_set_session() example
<?php
apd_set_session(9);
?>
(PECL apd >= 0.2)
override_function — Overrides built-in functions
$function_name
, string $function_args
, string $function_code
)Overrides built-in functions by replacing them in the symbol table.
function_name
The function to override.
function_args
The function arguments, as a comma 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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 override_function() example
<?php
override_function('test', '$a,$b', 'echo "DOING TEST"; return $a * $b;');
?>
(PECL apd >= 0.2)
rename_function — Renames orig_name to new_name in the global function table
$original_name
, string $new_name
)Renames a orig_name to new_name in the global function table. Useful for temporarily overriding built-in functions.
original_name
The original function name.
new_name
The new name for the original_name function.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 rename_function() example
<?php
rename_function('mysql_connect', 'debug_mysql_connect' );
?>
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:
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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/bcompiler.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
Diese Erweiterung definiert keine Ressource-Typen.
Diese Erweiterung definiert keine Konstanten.
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.
(PECL bcompiler >= 0.4)
bcompiler_load_exe — Reads and creates classes from a bcompiler exe file
$filename
)Reads data from a bcompiler exe file and creates classes from the bytecodes.
filename
The exe file path, as a string.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 bcompiler_load_exe() example
<?php
bcompiler_load_exe("/tmp/example.exe");
print_r(get_defined_classes());
?>
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.
(PECL bcompiler >= 0.4)
bcompiler_load — Reads and creates classes from a bz compressed file
$filename
)Reads data from a bzcompressed file and creates classes from the bytecodes.
filename
The bzcompressed file path, as a string.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 bcompiler_load() example
<?php
bcompiler_load("/tmp/example");
print_r(get_defined_classes());
?>
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.
(PECL bcompiler >= 0.4)
bcompiler_parse_class — Reads the bytecodes of a class and calls back to a user function
$class
, string $callback
)Reads the bytecodes of a class and calls back to a user function.
class
The class name, as a string.
callback
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 bcompiler_parse_class() example
<?php
function readByteCodes($data) {
print_r($data);
}
bcompiler_parse_class("DB","readByteCodes");
?>
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.
(PECL bcompiler >= 0.4)
bcompiler_read — Reads and creates classes from a filehandle
$filehandle
)Reads data from a open file handle and creates classes from the bytecodes.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 bcompiler_read() example
<?php
$fh = fopen("/tmp/example","r");
bcompiler_read($fh);
fclose($fh);
print_r(get_defined_classes());
?>
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.
(PECL bcompiler >= 0.4)
bcompiler_write_class — Writes a defined class as bytecodes
$filehandle
, string $className
[, string $extends
] )Reads the bytecodes from PHP for an existing class, and writes them to the open file handle.
filehandle
A file handle as returned by fopen().
className
The class name, as a string.
extends
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
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.
(PECL bcompiler >= 0.5)
bcompiler_write_constant — Writes a defined constant as bytecodes
$filehandle
, string $constantName
)Reads the bytecodes from PHP for an existing constant, and writes them to the open file handle.
filehandle
A file handle as returned by fopen().
constantName
The name of the defined constant, as a string.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
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.
(PECL bcompiler >= 0.6)
bcompiler_write_file — Writes a php source file as bytecodes
$filehandle
, string $filename
)This function complies specified source file into bytecodes, and writes them to the open file handle.
filehandle
A file handle as returned by fopen().
filename
The source file path, as a string.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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";
*/
?>
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.
(PECL bcompiler >= 0.5)
bcompiler_write_function — Writes a defined function as bytecodes
$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).
filehandle
A file handle as returned by fopen().
functionName
The function name, as a string.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
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.
(PECL bcompiler >= 0.5)
bcompiler_write_functions_from_file — Writes all functions defined in a file as bytecodes
$filehandle
, string $fileName
)Searches for all functions declared in the given file, and writes their correspondent bytecodes to the open file handle.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
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.
(PECL bcompiler >= 0.3)
bcompiler_write_header — Writes the bcompiler header
$filehandle
[, string $write_ver
] )Writes the header part of a bcompiler file.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
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.
(PECL bcompiler >= 0.5)
bcompiler_write_included_filename — Writes an included file as bytecodes
$filehandle
, string $filename
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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.
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
Für diese Funktionen ist keine Installation erforderlich, diese gehören zum Grundbestand von PHP.
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | 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 |
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_NOTICEduring 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_STRICTis available. AsE_STRICTis not included withinE_ALLyou have to explicitly enable this kind of error level. EnablingE_STRICTduring 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 ofE_ALLconsider using a larger value to cover all bit fields from now and well into the future, a numeric value like 2147483647 (includes all errors, not justE_ALL).
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 On (the default), this parameter will show a
report of memory leaks detected by the Zend memory manager. This report
will be send to stderr on Posix platforms. On Windows, it will be send
to the debugger using OutputDebugString(), and can be viewed with tools
like » DbgView.
This parameter only has effect in a debug build, 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.
Diese Erweiterung definiert keine Ressource-Typen.
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.
| 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, aber vor PHP 5.4.0 nicht in E_ALL enthalten |
| 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.
|
Seit 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. | Seit 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.
|
Seit PHP 5.3.0 |
| 32767 |
E_ALL
(integer)
|
Alle Fehler und Warnungen die unterstützt werden, mit Ausnahme
von E_STRICT.
|
32767 in PHP 5.4.x, 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 '|', '~', '!', '^' und '&' verstanden wird.
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 if 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_ERROR, E_USER_WARNING, E_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($err, 3, "/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(2, 3, "foo");
$b = array(5.5, 4.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";
?>
Siehe auch syslog().
(PHP 4 >= 4.3.0, PHP 5)
debug_backtrace — Erzeugt Daten zur Ablaufverfolgung
$options = DEBUG_BACKTRACE_PROVIDE_OBJECT
[, int $limit = 0
]] )debug_backtrace() erzeugt Daten zur Ablaufverfolgung.
options
Ab 5.3.6 ist akzeptiert dieser Parameter eine Bitmaske mit den folgenden Optionen:
| DEBUG_BACKTRACE_PROVIDE_OBJECT | Ob der "object" Index befüllt werden soll. |
| DEBUG_BACKTRACE_IGNORE_ARGS | Ob der "args" Index, welcher alle Funktions- oder Methodenargumente enthält, ausgelassen werden soll um Arbeitsspeicher zu sparen. |
TRUE und FALSE, welche
dem Setzen oder nicht Setzen von DEBUG_BACKTRACE_PROVIDE_OBJECT entsprachen.
limit
Ab PHP 5.4.0 kann dieser Parameter benutzt werden, um die Anzahl an zurückgegebenen
Stack Frames zu limitieren. Standardmäßig (limit=0)
werden alle Stack Frames zurückgegeben.
Gibt ein assoziatives Array zurück. Als zurückgegebene Arrayelemente von debug_backtrace() sind möglich:
| 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. |
| Version | Beschreibung |
|---|---|
| 5.4.0 |
Der Parameter limit wurde hinzugefügt.
|
| 5.3.6 |
Der Parameter provide_object wurde durch
options ersetzt und DEBUG_BACKTRACE_IGNORE_ARGS
wurde als zusätzliche Option hinzugefügt.
|
| 5.2.5 |
Der optionale Parameter provide_object wurde
hinzugefügt.
|
| 5.1.1 | Aktuelles object als möglichen Rückgabewert hinzugefügt. |
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"
}
}
(PHP 5)
debug_print_backtrace — Gibt die Daten für eine Ablaufverfolgung aus
$options = 0
[, int $limit = 0
]] )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.
options
Beginnend mit PHP 5.3.6 kann über diesen Parameter eine Bitmaske mit folgenden möglichen Optionen übergeben werden:
| DEBUG_BACKTRACE_IGNORE_ARGS | Gibt an ob der "args" Index aller Funktions- und Methoden- Argumente weggelassen werden soll (um z.B. Speicher zu sparen). |
limit
Beginnend mit PHP 5.4.0 kann hiermit die Anzahl der auszugebenden
Aufrufebenen begrenzt werden. Der Vorgabewert
(limit=0)
führt zur Ausgabe aller Aufrufe.
Es wird kein Wert zurückgegeben.
| Version | Beschreibung |
|---|---|
| 5.4.0 |
Der optionale Parameter limit wurde hinzugefügt.
|
| 5.3.6 |
Der optionale Parameter options wurde hinzugefügt.
|
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]
(PHP 5 >= 5.2.0)
error_get_last — Liefert den zuletzt aufgetretenen Fehler
Liefert Informationen über den zuletzt aufgetretenen Fehler
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.
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
)
display_errors Direktivehtml_errorsxmlrpc_errors(PHP 4, PHP 5)
error_log — Sendet eine Fehlermeldung irgendwo hin
$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.
message
Die Fehlermeldung, die protokolliert werden soll.
message_type
Sagt, wohin der Fehler gehen soll. Folgende Meldungstypen sind möglich:
| 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().
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 5.2.7 |
Der mögliche Wert 4 wurde zum Parameter message_type
hinzugefügt.
|
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");
?>
(PHP 4, PHP 5)
error_reporting — Gibt an, welche PHP-Fehlermeldungen gemeldet werden
$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.
Wenn das optionale level Argument nicht übergeben wird,
gibt error_reporting() das aktuelle Error Level zurück.
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 verfügbaren Konstanten und die Bedeutungen der jeweiligen Error Level sind im Abschnitt Vordefinierte Konstanten beschrieben.
Gibt den bisherigen error_reporting Wert zurück
oder das aktuelle Level, wenn level nicht übergeben wurde.
| Version | Beschreibung |
|---|---|
| 5.4.0 | E_STRICT ist nun in E_ALL enthalten. |
| 5.3.0 |
E_DEPRECATED und E_USER_DEPRECATED
wurden hinzugefügt.
|
| 5.2.0 | E_RECOVERABLE_ERROR wurde hinzugefügt. |
| 5.0.0 | E_STRICT wurde hinzugefügt (ist aber nicht Teil von E_ALL). |
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 (siehe Changelog)
error_reporting(E_ALL);
// Melde alle PHP Fehler
error_reporting(-1);
// Dies entspricht error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
?>
Der Großteil der E_STRICT Fehler werden zur Compile-Zeit
generiert und werden somit nicht angezeigt, wenn E_STRICT zur
Laufzeit zu error_reporting
hinzugefügt wird (und auch andersrum).
Durch Übergeben des Wertes -1 werden alle möglichen Fehler angezeigt,
auch wenn neue Level in zukünftigen PHP-Versionen hinzugefügt werden. Die
E_ALL Konstante verhält sich seit PHP 5.4 ebenfalls so.
(PHP 4 >= 4.0.1, PHP 5)
restore_error_handler — Rekonstruiert die zuvor benutzte Fehlerbehandlungsfunktion
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.)
Diese Funktion gibt immer TRUE zurück.
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.
Hinweis:
Calling restore_error_handler() from the error_handler function is ignored.
(PHP 5)
restore_exception_handler — Stellt den vorherigen Exceptionhandler wieder her
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).
Diese Funktion gibt immer TRUE zurück.
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 ...
(PHP 4 >= 4.0.1, PHP 5)
set_error_handler — Bestimmt eine benutzerdefinierte Funktion zur Fehlerbehandlung
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.
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:
$errno
, string $errstr
[, string $errfile
[, int $errline
[, array $errcontext
]]] )errno
errno enthält den
Schweregrad des ausgelösten Fehlers als Integer.
errstr
errstr enthält die
Fehlermeldung als String.
errfile
errfile ist optional. Er
enthält den Namen der Datei, in der der Fehler verursacht wurde,
als String.
errline
errline ist optional. Er
enthält die Zeilennummer, in der der Fehler verursacht wurde, als
Integer.
errcontext
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.
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.
| 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.
|
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(2, 3, "foo", 5.5, 43.3, 21.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($a, M_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 />
(PHP 5)
set_exception_handler — Installiert einen benutzerdefinierten Exceptionhandler
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.
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.
Gibt den Namen des zuvor definierten Exceptionhandlers zurück
oder NULL bei Fehlern oder wenn kein vorheriger Exceptionhandler
installiert war.
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";
?>
(PHP 4 >= 4.0.1, PHP 5)
trigger_error — Erzeugt eine benutzerdefinierte Fehlermeldung/Warnung/Benachrichtigung
$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.
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.
Die Funktion gibt FALSE zurück wenn ein falscher
error_type übergeben wurde,
sonst TRUE
Beispiel #1 trigger_error() Beispiel
Siehe auch set_error_handler() für ein ausführlicheres Beispiel.
<?php
if ($divisor == 0) {
trigger_error("Kann nicht durch 0 teilen", E_USER_ERROR);
}
?>
HTML-Entities in der error_msg werden
nicht automatisch escaped. Wenn die Fehlermeldung in einem
Browser ausgegeben werden soll so sollten Sie diese in diesem
Fall selbst mit htmlentities() vorverarbeiten.
Diese Funktion ist ein Alias für: trigger_error().
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.).
PHP version 5.2.0 or greater.
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
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| 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 |
Hier eine kurze Erklärung der Konfigurationsoptionen:
Diese Erweiterung definiert keine Ressource-Typen.
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.
PHP version 5.1.0 or greater.
The included gengraph.php file utilizes the » graphviz library, however, this is not required.
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
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| inclued.enabled | Off | PHP_INI_SYSTEM | |
| inclued.dumpdir | NULL |
PHP_INI_SYSTEM |
Hier eine kurze Erklärung der Konfigurationsoptionen:
inclued.enabled
bool
Whether or not to enable inclued.
inclued.dumpdir
string
Location (path) to the directory that stores inclued files. If set, each PHP request will create a file. These files are serialized versions of what inclued_get_data() would produce, so may be unserialized with unserialize().
Because every request creates a file, this directory may fill up fast!
Diese Erweiterung definiert keine Ressource-Typen.
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.
This example demonstrates the process of implementing inclued into an existing application, and viewing the results.
Beispiel #1 Getting the data within the PHP application itself (function)
<?php
// File to store the inclued information
$fp = fopen('/tmp/wp.ser', 'w');
if ($fp) {
$clue = inclued_get_data();
if ($clue) {
fwrite($fp, serialize($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.ser -o wp.dot # Next, create the image $ dot -Tpng -o inclued.png wp.dot
Beispiel #3 Listing data via inclued dumps (configuration)
When using the inclued.dumpdir directive, files (include clues) are dumped with every request. Here's one way to list those files, and unserialize() them.
<?php
$path = ini_get('inclued.dumpdir');
if ($path && is_dir($path)) {
echo "Path: $path", PHP_EOL;
$inclues = new GlobIterator($path . DIRECTORY_SEPARATOR . 'inclued*');
if ($inclues->count() === 0) {
echo 'No clues today', PHP_EOL;
exit;
}
foreach ($inclues as $inclue) {
echo 'Inclued file: ', $inclue->getFilename(), PHP_EOL;
$data = file_get_contents($inclue->getPathname());
if ($data) {
$inc = unserialize($data);
echo ' -- filename: ', $inc['request']['SCRIPT_FILENAME'], PHP_EOL;
echo ' -- number of includes: ', count($inc['includes']), PHP_EOL;
}
echo PHP_EOL;
}
} else {
echo 'I am totally clueless today.', PHP_EOL;
}
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
PATH: /tmp/inclued Inclued file: inclued.56521.1 -- filename: /Users/philip/test.php -- number of includes: 1 Inclued file: inclued.56563.1 -- filename: /tmp/none.php -- number of includes: 0 Inclued file: inclued.56636.1 -- filename: /tmp/three.php -- number of includes: 3
(PECL inclued >= 0.1.0)
inclued_get_data — Get the inclued data
Get the inclued data.
Diese Funktion hat keine Parameter.
The inclued data.
Beispiel #1 inclued_get_data() example
See the inclued examples section for ways to create 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
)
)
)
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.
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar |
|---|---|---|
| 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 |
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.
Diese Erweiterung definiert keine Ressource-Typen.
Diese Erweiterung definiert keine Konstanten.
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
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 implicit_flush in Ihrer php.ini auf OFF gesetzt ist, anderenfalls werden Ausgaben auch nach Aufruf von ob_start() noch an den Browser weitergegeben.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
Für diese Funktionen ist keine Installation erforderlich, diese gehören zum Grundbestand von PHP.
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| 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. |
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().
Diese Erweiterung definiert keine Ressource-Typen.
Diese Erweiterung definiert keine Konstanten.
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.)
Siehe auch header() und setcookie().
(PHP 4, PHP 5)
flush — Leert (sendet) den Ausgabepuffer
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. Es hat auch keinen Einfluss auf mit ob_start() erstellte Ausgabebuffer. Daher müssen Sie sowohl ob_flush() als auch flush() aufrufen, um die Ausgabebuffer zu leeren.
Einige Webserver, besonders auf Windows (Win32), puffern ihre Scriptausgaben weiterhin bis zum Scriptende bevor sie sie zum Browser übertragen.
Auch Apache-Module wie mod_gzip puffern zum Teil Ausgaben und verhindern so, dass 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 empfangen und zeigen Tabellen erst nach dem Empfang des </table> Tags der äußersten Tabelle.
Einige Versionen des Microsoft 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 Skriptende auf solchen Browsern zu erzwingen.
Es wird kein Wert zurückgegeben.
(PHP 4 >= 4.2.0, PHP 5)
ob_clean — Löscht den Ausgabepuffer
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().
Es wird kein Wert zurückgegeben.
(PHP 4, PHP 5)
ob_end_clean — Löscht den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
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.
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).
Im Fehlerfall generiert die Funktion eine E_NOTICE
Meldung.
| Version | Beschreibung |
|---|---|
| 4.2.0 | Der Boolean-Rückgabewert wurde hinzugefügt. |
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();
?>
(PHP 4, PHP 5)
ob_end_flush — Leert (schickt/sendet) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. 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).
Wenn die Funktion fehlschlägt, generiert sie eine
E_NOTICE.
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());
?>
(PHP 4 >= 4.2.0, PHP 5)
ob_flush — Leert (sendet) den Ausgabepuffer
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.
Es wird kein Wert zurückgegeben.
(PHP 4 >= 4.3.0, PHP 5)
ob_get_clean — Get current buffer contents and delete current output buffer
Gets the current buffer contents and delete current output buffer.
ob_get_clean() essentially executes both ob_get_contents() and ob_end_clean().
Returns the contents of the output buffer and end output buffering.
If output buffering isn't active then FALSE is returned.
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"
(PHP 4, PHP 5)
ob_get_contents — Gibt den Inhalt des Ausgabe-Puffers zurück
Gibt den Inhalt des Ausgabepuffers ohne Löschung zurück.
ob_get_contents() gibt den Inhalt des
Ausgabepuffers zurück ohne ihn zu löschen oder
FALSE, wenn die Ausgabe-Pufferung nicht aktiv ist.
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"
(PHP 4 >= 4.3.0, PHP 5)
ob_get_flush — Flush the output buffer, return it as a string and turn off output buffering
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.
Returns the output buffer or FALSE if no buffering is active.
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
(
)
(PHP 4 >= 4.0.2, PHP 5)
ob_get_length — Return the length of the output buffer
This will return the length of the contents in the output buffer.
Returns the length of the output buffer contents or FALSE if no
buffering is active.
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
(PHP 4 >= 4.2.0, PHP 5)
ob_get_level — Anzahl der aktiven Ausgabepuffer
ob_get_level() liefert die Anzahl der zur Zeit gleichzeitig (übereinanderliegend) aktiven Ausgabepuffer oder 0 wenn keine Ausgabepufferung genutzt wird.
Gibt die Anzahle der aktiven Ausgabepuffer zurück. Wenn keine Ausgabepufferung aktiv ist wird 0 zurückgegeben.
(PHP 4 >= 4.2.0, PHP 5)
ob_get_status — Get status of output buffers
$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.
full_status
TRUE to return all active output buffer levels. If FALSE or not
set, only the top level output buffer is returned.
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
)
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:
(PHP 4 >= 4.0.4, PHP 5)
ob_gzhandler — ob_start callback function to gzip output buffer
$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.
buffer
mode
| Version | Beschreibung |
|---|---|
| 4.0.5 |
The mode parameter was added.
|
Beispiel #1 ob_gzhandler() example
<?php
ob_start("ob_gzhandler");
?>
<html>
<body>
<p>This should be a compressed page.</p>
</body>
</html>
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().
(PHP 4, PHP 5)
ob_implicit_flush — Schaltet die implizite Ausgabe ein bzw. aus
$flag = true
] )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.
flag
TRUE schaltet implizite Ausgabe ein, FALSE schaltet sie aus.
Es wird kein Wert zurückgegeben.
(PHP 4 >= 4.3.0, PHP 5)
ob_list_handlers — List all output handlers in use
Lists all output handlers in use.
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".
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
)
(PHP 4, PHP 5)
ob_start — Ausgabepufferung aktivieren
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_callbackWerten noch nichtFALSEzurück.
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ückwechseln.
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().
(PHP 4 >= 4.3.0, PHP 5)
output_add_rewrite_var — Setzt URL-Rewrite-Variablen
$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().
(PHP 4 >= 4.3.0, PHP 5)
output_reset_rewrite_vars — Reset URL rewriter values
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()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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>
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.
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.
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
Diese Erweiterung definiert keine Ressource-Typen.
Diese Erweiterung definiert keine Konstanten.
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->x = 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->a = array($val);
var_dump($o->a[0]->prop);
?>
(PHP 4 >= 4.3.0)
overload — Aktivieren des Überladens von Eigenschaften und Methodenaufrufen für eine Klasse
$class_name
)
Die overload()-Funktion aktiviert das Überladen von
Eigenschaften und Methodenaufrufen für eine Klasse, die von
class_name bestimmt wird.
class_name
Der Name der zu überladenden Klasse als String
Es wird kein Wert zurückgegeben.
Sie finden ein Beispiel im Einführungsabschnitt zu dieser Extension.
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
Für diese Funktionen ist keine Installation erforderlich, diese gehören zum Grundbestand von PHP.
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| 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 | Dieses veraltete Feature wird in der Zukunft sicherlich entfernt. |
| 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 und PHP 5.2.3. |
| max_input_vars | 1000 | PHP_INI_PERDIR | Verfügbar seit PHP 5.3.9. |
| magic_quotes_gpc | "1" | PHP_INI_PERDIR | PHP_INI_ALL ab PHP <= 4.2.3. Entfernt in PHP 5.4.0. |
| magic_quotes_runtime | "0" | PHP_INI_ALL | Entfernt in PHP 5.4.0. |
| zend.enable_gc | "1" | PHP_INI_ALL | Verfügbar ab PHP 5.3.0. |
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. Die Zeit wird gemessen, wenn die Daten auf dem Server empfangen bis zum Start der Skriptausführung.
max_input_nesting_level
integer
Legt die maximale Verschachtelungtiefe für Eingabevariablen (z.B. $_GET, $_POST ...) fest.
max_input_vars
integer
Wie viele Eingabe-Variablen maximal angenommen werden. Diese Direktive verhindert
die Nutzung von Hashtable Kollisionen für eine Denial of Service Attacke. Wenn
mehr Eingabe-Variablen gesendet werden, als mit dieser Direktive erlaubt, wird
ein Fehler der Stufe E_WARNING geworfen und weitere
Eingabe-Variablen werden nicht angenommen. Dieses Limit wird für mehrdimensionale
Eingabe-Arrays für jede Nesting-Ebene einzeln berechnet.
magic_quotes_gpc
boolean
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
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.
Hinweis:
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
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
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.
Funktionen die von magic_quotes_runtime betroffen sind
(ohne die Funktionen aus PECL):
zend.enable_gc
boolean
Aktiviert bzw. deaktiviert die Speicherbereinigung zirkulär abhängiger Referenzen.
Diese Erweiterung definiert keine Ressource-Typen.
Die aufgelisteten Konstanten stehen immer zur Verfügung, da sie zum Grundbestand von PHP gehören.
| 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. |
| 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. |
(PHP 4, PHP 5)
assert_options — Setzt oder liefert die Assert-Optionen
assert_options() ermöglicht es, die verschiedenene assert() Optionen zu setzen, oder abzufragen, welche Optionen gesetzt sind.
| 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.
(PHP 4, PHP 5)
assert —
Prüft ab, ob eine Bedingung oder Abfrage FALSE ist
$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_ACTIVE, 1);
assert_options (ASSERT_WARNING, 0);
assert_options (ASSERT_QUIET_EVAL, 1);
// 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 ("")');
?>
(PHP 4, PHP 5)
dl — Lädt eine PHP-Erweiterung (Extension) zur Laufzeit
$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 wird FALSE zurückgegeben. 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:
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().
(PHP 4, PHP 5)
extension_loaded — Prüft ob eine Extension geladen ist
$name
)Prüft ob eine Extension geladen ist.
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]
Gibt TRUE zurück wenn die Extension mit dem gewünschten Namen
geladen ist, sonst FALSE.
Beispiel #1 extension_loaded() Beispiel
<?php
if (!extension_loaded('gd')) {
if (!dl('gd.so')) {
exit;
}
}
?>
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!.
(PHP 5 >= 5.3.0)
gc_collect_cycles — Forces collection of any existing garbage cycles
Forces collection of any existing garbage cycles.
Diese Funktion hat keine Parameter.
Returns number of collected cycles.
(PHP 5 >= 5.3.0)
gc_disable — Deactivates the circular reference collector
Deactivates the circular reference collector, setting zend.enable_gc to 0.
Diese Funktion hat keine Parameter.
Es wird kein Wert zurückgegeben.
(PHP 5 >= 5.3.0)
gc_enable — Activates the circular reference collector
Activates the circular reference collector, setting zend.enable_gc to 1.
Diese Funktion hat keine Parameter.
Es wird kein Wert zurückgegeben.
(PHP 5 >= 5.3.0)
gc_enabled — Returns status of the circular reference collector
Returns status of the circular reference collector.
Diese Funktion hat keine Parameter.
Returns TRUE if the garbage collector is enabled, FALSE otherwise.
Beispiel #1 A gc_enabled() example
<?php
if(gc_enabled()) gc_collect_cycles();
?>
(PHP 4, PHP 5)
get_cfg_var — Ermittelt den Wert einer Konfigurationsoption
$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.
option
Der Name der Konfigurationsvariable.
Gibt den aktuellen Wert der mit option
angegebenen Konfigurationsvariable zurück. Tritt ein Fehler
auf so wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 5.3.0 | get_cfg_var() kann nun auch "array" Konfigurationsvariablen zurückgeben. |
(PHP 4, PHP 5)
get_current_user — Liefert den Benutzernamen des Besitzers des aktuellen PHP-Skripts
Liefert den Namen des Benutzers, welcher der Besitzer der aktuell ausgeführten PHP-Skriptdatei ist.
Liefert den Benutzernamen als String.
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
(PHP 4 >= 4.1.0, PHP 5)
get_defined_constants — Returns an associative array with the names of all the constants and their values
$categorize = false
] )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.
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
(
[Core] => 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
)
)
| Version | Beschreibung |
|---|---|
| 5.3.1 | Windows only: Core constants are categorized under Core, previously mhash. |
| 5.3.0 | Core constants are categorized under Core, previously internal. On Windows, the Core Constants are categorized under mhash. |
| 5.2.11 |
The categorize parameter now operates appropriately.
Previously, the categorize parameter was interpreted
as !is_null($categorize), making any value other than NULL
force the constants to be categorized.
|
| 5.0.0 |
The categorize parameter was added.
|
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
)
(PHP 4, PHP 5)
get_extension_funcs — Liefert die Namen der Funktionen einer Extension
$module_name
)Diese Funktion gibt die Namen aller in der gegebenen Extension definierten Funktionen zurück.
module_name
Der Extensionname.
Hinweis:
Der Name muss klein geschrieben werden.
Gibt ein Array mit den Namen aller Funktionen zurück
oder FALSE wenn keine Extension mit dem Namen
module_name geladen ist.
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
)
(PHP 4 >= 4.3.0, PHP 5)
get_include_path — Gets the current include_path configuration option
Gets the current include_path configuration option value.
Returns the path, as a string.
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');
?>
(PHP 4, PHP 5)
get_included_files — Liefert ein Array mit den Namen der includierten Dateien
Gibt die Namen aller Dateien zurück die mit include, include_once, require oder require_once eingebunden wurden.
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.
| 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. |
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
Hinweis:
Dateien die über die auto_prepend_file Konfigurationsdirektive eingebunden werden sind nicht Teil des Ergebnisarrays.
(PHP 4, PHP 5)
get_loaded_extensions — Liefert ein Array mit den Namen aller einkompilierten und geladenen Extensions
$zend_extensions = false
] )Diese Funktion gibt die Namen aller in den PHP Interpreter einkompilierten und geladenen Extensions aus.
zend_extensions
Legt fest ob nur Zend Extensions zurückgegeben werden sollen.
Vorgabewert ist FALSE d.h. es werden nur reguläre Extensions
zurückgegeben.
Gibt ein Array mit den Namen aller Extensions zurück.
| Version | Beschreibung |
|---|---|
| 5.2.4 |
Der optionale Parameter zend_extensions wurde hinzugefügt.
|
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 )
(PHP 4, PHP 5)
get_magic_quotes_gpc — Zeigt die aktuelle Konfiguration von magic quotes gpc
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().
(PHP 4, PHP 5)
get_magic_quotes_runtime — Zeigt die aktuelle Konfiguration von magic_quotes_runtime
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().
Diese Funktion ist ein Alias für: get_included_files().
(PHP 4, PHP 5)
getenv — Liefert den Wert einer Umgebungsvariable
$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 » RFC 3875 im Abschnitt 4.1 "Request Meta-Variables" nachlesen.
varname
Der Variablenname
Gibt den Wert der Umgebungsvariable varname
zurück oder FALSE, wenn die Umgebungsvariable
varname nicht existiert.
Beispiel #1 getenv()-Beispiel
<?php
// nutzen Sie getenv() ...
$ip = getenv('REMOTE_ADDR');
// ... oder einfache die superglobalen Arrays ($_SERVER oder $_ENV)
$ip = $_SERVER['REMOTE_ADDR'];
?>
(PHP 4, PHP 5)
getlastmod — Uhrzeit der letzten Änderung eines Scripts
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().
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.
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());
?>
(PHP 4 >= 4.1.0, PHP 5)
getmygid — Get PHP script owner's GID
Gets the group ID of the current script.
Returns the group ID of the current script, or FALSE on error.
(PHP 4, PHP 5)
getmyinode — Ermittelt den Inode eines Skripts
Ermittelt den Inode der aktuell ausgeführten Skriptdatei.
Gibt die Inode-Nummer der aktuellen Skriptdatei als Integer
zurück oder FALSE bei fehlern.
Hinweis: Diese Funktion ist auf Windows-Plattformen nicht implementiert.
(PHP 4, PHP 5)
getmypid — Prozess-Id eines Scripts
Liefert die Prozess-ID unter der das Skript ausgeführt wird.
Liefert die Prozess-ID unter der das Skript ausgeführt wird,
oder FALSE bei Fehlern
Prozess-IDs sind nicht eindeutig, sie sind daher eine schwache Entropiequelle. Wir raten davon ab sich in sicherheitsrelevanten Bereichen auf Prozess-IDs zu verlassen.
(PHP 4, PHP 5)
getmyuid — Zeigt die User-ID des Besitzers eines PHP-Scripts
Liefert die User-ID des Besitzers des aktuellen Scripts
Liefert die User-ID des aktuellen Scripts oder FALSE bei einem Fehler.
(PHP 4 >= 4.3.0, PHP 5)
getopt — Gets options from the command line argument list
$options
[, array $longopts
] )Parses options passed to the script.
options
longopts
The options parameter may contain the following
elements:
Hinweis: Optional values do not accept " " (space) as a separator.
Hinweis:
The format for the
optionsandlongoptsis almost the same, the only difference is thatlongoptstakes an array of options (where each element is the option) whereasoptionstakes a string (where each character is the option).
This function will return an array of option / argument pairs or FALSE on
failure.
Hinweis:
The parsing of options will end at the first non-option found, anything that follows is discarded.
| 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 |
Parameter longopts is available on all systems.
|
| 5.3.0 | This function is no longer system dependent, and now works on Windows, too. |
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)
}
(PHP 4, PHP 5)
getrusage — Zeigt den aktuellen Ressourcenverbrauch an
$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)
Diese Funktion ist ein Alias für: ini_set().
(PHP 4 >= 4.2.0, PHP 5)
ini_get_all — Gets all configuration options
$extension
[, bool $details = true
]] )Returns all the registered configuration options.
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).
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.
| Version | Beschreibung |
|---|---|
| 5.3.0 |
Added details.
|
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(null, false)); // 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
...
)
(PHP 4, PHP 5)
ini_get — Gets the value of a configuration option
$varname
)Returns the value of the configuration option on success.
varname
The configuration option name.
Returns the value of the configuration option as a string on success, or an
empty string for null values. Returns FALSE if the
configuration option doesn't exist.
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
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.
(PHP 4, PHP 5)
ini_restore — Restores the value of a configuration option
$varname
)Restores a given configuration option to its original value.
varname
The configuration option name.
Es wird kein Wert zurückgegeben.
Beispiel #1 ini_restore() example
<?php
$setting = 'y2k_compliance';
echo 'Current value for \'' . $setting . '\': ' . ini_get($setting), PHP_EOL;
ini_set($setting, ini_get($setting) ? 0 : 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
(PHP 4, PHP 5)
ini_set — Sets the value of a configuration option
$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.
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.
Returns the old value on success, FALSE on failure.
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');
?>
Diese Funktion ist ein Alias für: set_magic_quotes_runtime()
main — Dummy for main()
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.
| 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 |
(PHP 5 >= 5.2.0)
memory_get_peak_usage — Returns the peak of memory allocated by PHP
$real_usage = false
] )Returns the peak of memory, in bytes, that's been allocated to your PHP script.
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.
Returns the memory peak in bytes.
| 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.
|
(PHP 4 >= 4.3.2, PHP 5)
memory_get_usage — Returns the amount of memory allocated to PHP
$real_usage = false
] )Returns the amount of memory, in bytes, that's currently being allocated to your PHP script.
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.
Returns the memory amount in bytes.
| 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.
|
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
?>
(PHP 5 >= 5.2.4)
php_ini_loaded_file — Retrieve a path to the loaded php.ini file
Check if a php.ini file is loaded, and retrieve its path.
Diese Funktion hat keine Parameter.
The loaded php.ini path, or FALSE if one is not loaded.
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
(PHP 4 >= 4.3.0, PHP 5)
php_ini_scanned_files — Return a list of .ini files parsed from the additional ini dir
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.
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().
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";
}
}
}
?>
(PHP 4, PHP 5)
php_logo_guid — Die GUID des PHP-Logos
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.
Gibt PHPE9568F34-D428-11d2-A769-00AA001ACF42 zurück.
Beispiel #1 php_logo_guid()-Beispiel
<?php
echo '<img src="' . $_SERVER['PHP_SELF'] .
'?=' . php_logo_guid() . '" alt="PHP Logo !" />';
?>
(PHP 4 >= 4.0.1, PHP 5)
php_sapi_name — Gibt das genutzte Interface zwischen PHP und dem Webserver zurück
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.
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.
Beispiel #1 php_sapi_name() Beispiel
Dieses Beispiel prüft auf die Teilzeichenkette cgi da es auch cgi-fcgi sein kann.
<?php
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == 'cgi') {
echo "Sie benutzen CGI PHP\n";
} else {
echo "Sie benutzen nicht CGI PHP\n";
}
?>
Hinweis: Ein alternativer Ansatz
Die PHP Konstante
PHP_SAPIhat den gleichen Wert, wie php_sapi_name().
Die definierte SAPI muss nicht naheliegend sein, denn zum Beispiel anstatt als apache kann sie als apache2handler oder apache2filter definiert sein.
(PHP 4 >= 4.0.2, PHP 5)
php_uname — Returns information about the operating system PHP is running on
$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.
mode
mode is a single character that defines what
information is returned:
Returns the description, as a string.
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_OS, 0, 3)) === '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; // ;
?>
(PHP 4, PHP 5)
phpcredits — Prints out the credits for PHP
$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.
flag
To generate a custom credits page, you may want to use the
flag parameter.
| 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 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 |
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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>
(PHP 4, PHP 5)
phpinfo — Gibt Informationen zur PHP-Konfiguration aus
$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.
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.
| 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. |
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
| 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. |
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);
?>
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.
(PHP 4, PHP 5)
phpversion — Liefert die aktuelle PHP-Version
$extension
] )
Liefert die Versionsnummer der gerade laufenden PHP-Version oder
der angegebenen extension als String.
extension
Ein optionaler Extensionname
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.
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');
?>
Hinweis:
Die PHP Version kann auch über die vordefinierte Konstante
PHP_VERSIONermittelt werden.
(PHP 4, PHP 5)
putenv — Setzt den Wert einer Umgebungsvariablen.
$setting
)
Setzt setting als Umgebungsvariable.
Beispiel #1 Setzen einer Umgebungsvariablen
putenv ("UNIQID=$uniqid");
(PHP 4 >= 4.3.0, PHP 5)
restore_include_path — Restores the value of the include_path configuration option
Restores the include_path configuration option back to its original master value as set in php.ini
Es wird kein Wert zurückgegeben.
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
?>
(PHP 4 >= 4.3.0, PHP 5)
set_include_path — Sets the include_path configuration option
$new_include_path
)Sets the include_path configuration option for the duration of the script.
Returns the old include_path on
successIm Fehlerfall wird FALSE zurückgegeben..
Beispiel #1 set_include_path() example
<?php
// Works as of PHP 4.3.0
set_include_path('/usr/lib/pear');
// Works in all PHP versions
ini_set('include_path', '/usr/lib/pear');
?>
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);
?>
(PHP 4, PHP 5)
set_magic_quotes_runtime — Setzt magic_quotes_runtime
$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().
(PHP 4, PHP 5)
set_time_limit — Legt die maximale Ausführungszeit fest
$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.
seconds
Die maximale Ausführungszeit in Sekunden, oder 0 wenn die Ausführungszeit nicht limitiert werden soll.
Es wird kein Wert zurückgegeben.
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.
(PHP 5 >= 5.2.1)
sys_get_temp_dir — Returns directory path used for temporary files
Returns the path of the directory PHP stores temporary files in by default.
Returns the path of the temporary directory.
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
(PHP 4 >= 4.1.0, PHP 5)
version_compare — Vergleicht zwei Versionsnummern im PHP-Stil
version_compare() vergleicht zwei den PHP-Versionen angeglichenen Versionsnummern. Dies ist beispielsweise nützlich, wenn Code nur unter bestimmten Versionen von PHP funktionieren soll.
Zuerst ersetzt die Funktion _, - und + durch einen Punkt . in den Versionsangaben und setzt vor und nach jeder Kette aus nicht-numerischen Zeichen Punkte ein, sodass beispielsweise '4.3.2RC1' zu '4.3.2.RC.1' wird. Dann wird diese Zeichenkette an den Punkten aufgespalten wie wenn man explode('.', $ver) benutzen würde. Anschließend werden von links nach rechts die Teile verglichen. Wenn ein Teil spezielle Zeichen enthält, werden diese nach der folgenden Reihenfolge behandelt: jede Zeichenkette, die nicht in dieser Liste vorkommt < dev < alpha = a < beta = b < RC = rc < # < pl = p. Auf diese Weise können nicht nur Versionen verschiedener Tiefe wie '4.1' und '4.1.2' sondern auch alle anderen Versionen verglichen werden, die sich auf bestimmte Entwicklungsstadien von PHP beziehen.
version1
Erste Versionsnummer.
version2
Zweite Versionsnummer.
operator
Wenn der freiwillige Parameter operator
angegeben ist, wird auf ein bestimmtes Verhältnis geprüft.
Mögliche Operatoren sind: <,
lt, <=,
le, >,
gt, >=,
ge, ==,
=, eq,
!=, <>,
ne.
Dieser Parameter berücksicht Groß- und Kleinschreibung, die Werte sollten alle kleingeschrieben werden.
Standardmäßig gibt version_compare() -1 zurück, wenn die erste Version kleiner ist als die zweite, 0, wenn die Versionen gleich sind und 1, wenn die zweite Version kleiner ist.
Wenn der optionale Parameter operator übergeben
wurde, gibt die Funktion TRUE oder FALSE zurück, je nach dem, ob
das mit dem Operator definierte Verhältnis der Wahrheit entspricht
oder nicht.
Das untenstehende Beispiel benutzt die Konstante PHP_VERSION,
die die Version des aktuell ausführenden PHP-Interpreters enthält.
Beispiel #1 version_compare()-Beispiele
<?php
if (version_compare(PHP_VERSION, '6.0.0') >= 0) {
echo 'Ich bin mindestens PHP 6.0.0, und zwar: ' . PHP_VERSION . "\n";
}
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
echo 'Ich bin mindestens PHP 5.3.0, nämlich: ' . PHP_VERSION . "\n";
}
if (version_compare(PHP_VERSION, '5.0.0', '>=')) {
echo 'Ich bin PHP 5. Meine Versionsnummer lautet: ' . PHP_VERSION . "\n";
}
if (version_compare(PHP_VERSION, '5.0.0', '<')) {
echo 'Ich bin PHP 4. Meine Versionsnummer lautet: ' . PHP_VERSION . "\n";
}
?>
Hinweis:
Die Konstante
PHP_VERSIONenthält die aktuelle PHP-Version
Hinweis:
Vorveröffentlichte Versionen wie 5.3.0-dev werden als kleiner erkannt als ihre finalen Veröffentlichungen wie 5.3.0.
(PHP 4, PHP 5)
zend_logo_guid — Die GUID des Zend Logos
Diese Funktion gibt die ID des eingebauten Zend Logos zurück die zur Darstellung dieses Logos benutzt werden kann.
Gibt PHPE9568F35-D428-11d2-A769-00AA001ACF42 zurück.
Beispiel #1 zend_logo_guid() Beispiel
<?php
echo '<img src="' . $_SERVER['PHP_SELF'] .
'?=' . zend_logo_guid() . '" alt="Zend Logo !" />';
?>
(PHP 5)
zend_thread_id — Returns a unique identifier for the current thread
Die Funktion liefert eine eindeutige ID für den aktuellen Thread.
Gibt die Thread-ID als Integer zurück.
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
Hinweis:
Diese Funktion ist nur verfügbar, wenn PHP mit ZTS- (Zend Thread Safety) und Debug- (--enable-debug) -Unterstützung kompiliert wurde.
(PHP 4, PHP 5)
zend_version — Liefert die aktuelle Version der Zend Engine
Liefert die Versionsnummer der aktuell laufenden Zend Engine als String. Zend Engine.
Liefert die Versionsnummer der Zend Engine als String.
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
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.
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_CLASS_METHODS
(integer)
RUNKIT_IMPORT_CLASS_CONSTS
(integer)
RUNKIT_IMPORT_CLASS_PROPS
(integer)
RUNKIT_IMPORT_CLASSES
(integer)
RUNKIT_IMPORT_CLASS_*
constants.
RUNKIT_IMPORT_OVERRIDE
(integer)
RUNKIT_ACC_PUBLIC
(integer)
RUNKIT_ACC_PROTECTED
(integer)
RUNKIT_ACC_PRIVATE
(integer)
CLASSKIT_ACC_PUBLIC
(integer)
CLASSKIT_ACC_PROTECTED
(integer)
CLASSKIT_ACC_PRIVATE
(integer)
CLASSKIT_AGGREGATE_OVERRIDE
(integer)
RUNKIT_VERSION
(string)
CLASSKIT_VERSION
(string)
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.
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.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| runkit.superglobal | "" | PHP_INI_PERDIR | |
| runkit.internal_override | "0" | PHP_INI_SYSTEM |
Hier eine kurze Erklärung der Konfigurationsoptionen:
runkit.superglobal
string
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
Diese Erweiterung definiert keine Ressource-Typen.
(PECL runkit >= 0.7.0)
Runkit_Sandbox — Runkit Sandbox Class -- PHP Virtual Machine
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.
$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);
?>
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)
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
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.
| 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. |
(PECL runkit >= 0.7.0)
Runkit_Sandbox_Parent — Runkit Anti-Sandbox Class
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;
?>
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"
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.
(PECL runkit >= 0.7.0)
runkit_class_adopt — Convert a base class to an inherited class, add ancestral methods when appropriate
$classname
, string $parentname
)
classname
Name of class to be adopted
parentname
Parent class which child class is extending
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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
(PECL runkit >= 0.7.0)
runkit_class_emancipate — Convert an inherited class to a base class, removes any method whose scope is ancestral
$classname
)
classname
Name of class to emancipate
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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
(PECL runkit >= 0.7.0)
runkit_constant_add — Similar to define(), but allows defining in class definitions as well
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL runkit >= 0.7.0)
runkit_constant_redefine — Redefine an already defined constant
constname
Constant to redefine. Either string indicating global constant, or classname::constname indicating class constant.
newvalue
New value to assign to constant.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL runkit >= 0.7.0)
runkit_constant_remove — Remove/Delete an already defined constant
$constname
)
constname
Name of constant to remove. Either a string indicating a global constant, or classname::constname indicating a class constant.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL runkit >= 0.7.0)
runkit_function_add — Add a new function, similar to create_function()
$funcname
, string $arglist
, string $code
)
funcname
Name of function to be created
arglist
Comma separated argument list
code
Code making up the function
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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
(PECL runkit >= 0.7.0)
runkit_function_copy — Copy a function to a new function name
$funcname
, string $targetname
)
funcname
Name of existing function
targetname
Name of new function to copy definition to
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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
(PECL runkit >= 0.7.0)
runkit_function_redefine — Replace a function definition with a new implementation
$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.
funcname
Name of function to redefine
arglist
New list of arguments to be accepted by function
code
New code implementation
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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
(PECL runkit >= 0.7.0)
runkit_function_remove — Remove a function definition
$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.
funcname
Name of function to be deleted
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL runkit >= 0.7.0)
runkit_function_rename — Change a function's name
$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.
funcname
Current function name
newname
New function name
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL runkit >= 0.7.0)
runkit_import — Process a PHP file importing function and class definitions, overwriting where appropriate
$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.
filename
Filename to import function and class definitions from
flags
Bitwise OR of the RUNKIT_IMPORT_* family of constants.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL runkit >= 0.7.0)
runkit_lint_file — Check the PHP syntax of the specified file
$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.
filename
File containing PHP Code to be lint checked
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL runkit >= 0.7.0)
runkit_lint — Check the PHP syntax of the specified php code
$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.
code
PHP Code to be lint checked
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL runkit >= 0.7.0)
runkit_method_add — Dynamically adds a new method to a given class
$classname
, string $methodname
, string $args
, string $code
[, int $flags = RUNKIT_ACC_PUBLIC
] )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.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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(12, 4);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
16
(PECL runkit >= 0.7.0)
runkit_method_copy — Copies a method from class to another
$dClass
, string $dMethod
, string $sClass
[, string $sMethod
] )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.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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!
(PECL runkit >= 0.7.0)
runkit_method_redefine — Dynamically changes the code of the given method
$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.
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.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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!
(PECL runkit >= 0.7.0)
runkit_method_remove — Dynamically removes the given method
$classname
, string $methodname
)Hinweis: Diese Funktion kann nicht genutzt werden, um die aktuell ausgeführte (oder verkette) Methode zu manipulieren.
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.
classname
The class in which to remove the method
methodname
The name of the method to remove
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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
(PECL runkit >= 0.7.0)
runkit_method_rename — Dynamically changes the name of the given method
$classname
, string $methodname
, string $newname
)Hinweis: Diese Funktion kann nicht genutzt werden, um die aktuell ausgeführte (oder verkette) Methode zu manipulieren.
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.
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
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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!
(PECL runkit >= 0.8.0)
runkit_return_value_used — Determines if the current functions return value will be used
Returns TRUE if the function's return value is used by the calling scope,
otherwise FALSE
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)
(PECL runkit >= 0.7.0)
runkit_sandbox_output_handler — Specify a function to capture and/or process output from a runkit sandbox
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.
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.
Returns the name of the previously defined output handler callback, or
FALSE if no handler was previously defined.
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.
(PECL runkit >= 0.7.0)
runkit_superglobals — Return numerically indexed array of registered superglobals
Returns a numerically indexed array of the currently registered superglobals. i.e. _GET, _POST, _REQUEST, _COOKIE, _SESSION, _SERVER, _ENV, _FILES
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.
PHP version 5.2.0 or greater.
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
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| scream.enabled | Off | PHP_INI_ALL |
Hier eine kurze Erklärung der Konfigurationsoptionen:
scream.enabled
int
Whether or not to enable scream.
Diese Erweiterung definiert keine Ressource-Typen.
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.
Weak references provide a non-intrusive gateway to ephemeral objects. Unlike normal (strong) references, weak references do not prevent the garbage collector from freeing that object. For this reason, an object may be destroyed even though a weak reference to that object still exists. In such conditions, the weak reference seamlessly becomes invalid.
Beispiel #1 Weakref usage example
<?php
class MyClass {
public function __destruct() {
echo "Destroying object!\n";
}
}
$o1 = new MyClass;
$r1 = new Weakref($o1);
if ($r1->valid()) {
echo "Object still exists!\n";
var_dump($r1->get());
} else {
echo "Object is dead!\n";
}
unset($o1);
if ($r1->valid()) {
echo "Object still exists!\n";
var_dump($r1->get());
} else {
echo "Object is dead!\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Object still exists!
object(MyClass)#1 (0) {
}
Destroying object!
Object is dead!
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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/weakref.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Diese Erweiterung definiert keine Ressource-Typen.
(PECL weakref >= 0.1.0)
The WeakRef class provides a gateway to objects without preventing the garbage collector from freeing those objects. It also provides a way to turn a weak reference into a strong one.
Beispiel #1 WeakRef usage example
<?php
class MyClass {
public function __destruct() {
echo "Destroying object!\n";
}
}
$o1 = new MyClass;
$r1 = new WeakRef($o1);
if ($r1->valid()) {
echo "Object still exists!\n";
var_dump($r1->get());
} else {
echo "Object is dead!\n";
}
unset($o1);
if ($r1->valid()) {
echo "Object still exists!\n";
var_dump($r1->get());
} else {
echo "Object is dead!\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Object still exists!
object(MyClass)#1 (0) {
}
Destroying object!
Object is dead!
(PECL weakref >= 0.1.0)
Weakref::acquire — Acquires a strong reference on that object
Acquires a strong reference on that object, virtually turning the weak reference into a strong one.
Diese Funktion hat keine Parameter.
Returns TRUE if the reference was valid and could be turned into a strong
reference, FALSE otherwise.
Beispiel #1 Weakref::acquire() example
<?php
class MyClass {
public function __destruct() {
echo "Destroying object!\n";
}
}
$o1 = new MyClass;
$r1 = new Weakref($o1);
$r1->acquire();
echo "Unsetting o1...\n";
unset($o1);
$o2 = $r1->get();
$r1->release();
echo "Unsetting o2...\n";
unset($o2);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Unsetting o1... Unsetting o2... Destroying object!
Beispiel #2 Nested acquire/release example
<?php
class MyClass {
public function __destruct() {
echo "Destroying object!\n";
}
}
$o1 = new MyClass;
$r1 = new Weakref($o1);
echo "Acquiring...\n";
$r1->acquire();
echo " Unsetting...\n";
unset($o1);
echo " Acquiring...\n";
$r1->acquire();
echo " Acquiring...\n";
$r1->acquire();
echo " Releasing...\n";
$r1->release();
echo " Releasing...\n";
$r1->release();
echo "Releasing...\n";
$r1->release();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Acquiring...
Unsetting...
Acquiring...
Acquiring...
Releasing...
Releasing...
Releasing...
Destroying object!
(PECL weakref >= 0.1.0)
Weakref::__construct — Constructs a new weak reference
$object
] )Constructs a new weak reference.
object
The object to reference.
Es wird kein Wert zurückgegeben.
Beispiel #1 Weakref::__construct() example
<?php
class MyClass {
public function __destruct() {
echo "Destroying object!\n";
}
}
$o1 = new MyClass;
$r1 = new Weakref($o1);
if ($r1->valid()) {
echo "Object still exists!\n";
var_dump($r1->get());
} else {
echo "Object is dead!\n";
}
unset($o1);
if ($r1->valid()) {
echo "Object still exists!\n";
var_dump($r1->get());
} else {
echo "Object is dead!\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Object still exists!
object(MyClass)#1 (0) {
}
Destroying object!
Object is dead!
(PECL weakref >= 0.1.0)
Weakref::get — Returns the object pointed to by the weak reference
Returns the object pointed to by the weak reference.
Diese Funktion hat keine Parameter.
Returns the object if the reference is still valid, NULL otherwise.
(PECL weakref >= 0.1.0)
Weakref::release — Releases a previously acquired reference
Releases a previously acquired reference. Potentially turning a strong reference back into a weak reference.
Diese Funktion hat keine Parameter.
Returns TRUE if the reference was previously acquired and thus could be
released, FALSE otherwise.
Beispiel #1 Weakref::release() example
<?php
class MyClass {
public function __destruct() {
echo "Destroying object!\n";
}
}
$o1 = new MyClass;
$r1 = new Weakref($o1);
$r1->acquire();
echo "Unsetting o1...\n";
unset($o1);
$o2 = $r1->get();
$r1->release();
echo "Unsetting o2...\n";
unset($o2);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Unsetting o1... Unsetting o2... Destroying object!
(PECL weakref >= 0.1.0)
Weakref::valid — Checks whether the object referenced still exists
Checks whether the object referenced still exists.
Diese Funktion hat keine Parameter.
Returns TRUE if the object still exists and is thus still accessible via
Weakref::get(), FALSE otherwise.
(PECL weakref >= 0.2.0)
Beispiel #1 Weakmap usage example
<?php
$wm = new WeakMap();
$o = new StdClass;
class A {
public function __destruct() {
echo "Dead!\n";
}
}
$wm[$o] = new A;
var_dump(count($wm));
echo "Unsetting..\n";
unset($o);
echo "Done\n";
var_dump(count($wm));
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
int(1) Unsetting.. Dead! Done int(0)
(PECL weakref >= 0.2.0)
WeakMap::__construct — Constructs a new map
Constructs a new map.
Diese Funktion hat keine Parameter.
Es wird kein Wert zurückgegeben.
(PECL weakref >= 0.2.0)
WeakMap::count — Counts the number of live entries in the map
Counts the number of live entries in the map.
Diese Funktion hat keine Parameter.
Returns the number of live entries in the map.
(PECL weakref >= 0.2.0)
WeakMap::current — Returns the current value under iteration
Returns the current value being iterated on in the map.
Diese Funktion hat keine Parameter.
The value currently being iterated on.
(PECL weakref >= 0.2.0)
WeakMap::key — Returns the current key under iteration.
Returns the object serving as key in the map, at the current iterating position.
Diese Funktion hat keine Parameter.
The object key currently being iterated.
(PECL weakref >= 0.2.0)
WeakMap::next — Advances to the next map element
Advances to the next map element.
Diese Funktion hat keine Parameter.
Es wird kein Wert zurückgegeben.
(PECL weakref >= 0.2.0)
WeakMap::offsetExists — Checks whether a certain object is in the map
$object
)Checks whether the passed object is referenced in the map.
object
Object to check for.
Returns TRUE if the object is contained in the map, FALSE otherwise.
(PECL weakref >= 0.2.0)
WeakMap::offsetGet — Returns the value pointed to by a certain object
Returns the value pointed to by a certain object.
object
Some object contained as key in the map.
Returns the value associated to the object passed as argument, NULL
otherwise.
(PECL weakref >= 0.2.0)
WeakMap::offsetSet — Updates the map with a new key-value pair
Updates the map with a new key-value pair. If the key already existed in the map, the old value is replaced with the new.
object
The object serving as key of the key-value pair.
value
The arbitrary data serving as value of the key-value pair.
Es wird kein Wert zurückgegeben.
(PECL weakref >= 0.2.0)
WeakMap::offsetUnset — Removes an entry from the map
$object
)Removes an entry from the map.
object
The key object to remove from the map.
Es wird kein Wert zurückgegeben.
(PECL weakref >= 0.2.0)
WeakMap::rewind — Rewinds the iterator to the beginning of the map
Rewinds the iterator to the beginning of the map.
Diese Funktion hat keine Parameter.
Es wird kein Wert zurückgegeben.
(PECL weakref >= 0.2.0)
WeakMap::valid — Returns whether the iterator is still on a valid map element
Returns whether the iterator is still on a valid map element.
Diese Funktion hat keine Parameter.
Returns TRUE if the iterator is on a valid element that can be
accessed, FALSE otherwise.
Windows Cache Extension for PHP is a PHP accelerator that is used to increase the speed of PHP applications running on Windows and Windows Server. Once the Windows Cache Extension for PHP is enabled and loaded by the PHP engine, PHP applications can take advantage of the functionality without any code modifications.
The Windows Cache Extension includes 5 different types of caches. The following describes the purpose of each cache type and the benefits it provides.
PHP Opcode Cache - PHP is a script processing engine, which reads an input stream of data that contains text and/or PHP instructions and produces another stream of data, most commonly in the HTML format. This means that on a web server the PHP engine reads, parses, compiles and executes a PHP script each time that it is requested by a Web client. The reading, parsing and compilation operations put additional load on the web server's CPU and file system and thus affect the overall performance of a PHP web application. The PHP bytecode (opcode) cache is used to store the compiled script bytecode in shared memory so that it can be re-used by PHP engine for subsequent executions of the same script.
File Cache - Even with the PHP opcode cache enabled, the PHP engine has to accesses the script files on a file system. When PHP scripts are stored on a remote UNC file share, the file operations introduce a significant performance overhead. The Windows Cache Extension for PHP includes a file cache that is used to store the content of the PHP script files in shared memory, which reduces the amount of file system operations performed by PHP engine.
Resolve File Path Cache - PHP scripts very often include or operate with files by using relative file paths. Every file path has to be normalized to an absolute file path by the PHP engine. When a PHP application uses many PHP files and accesses them by relative paths, the operation of resolving the paths may negatively impact the application's performance. The Windows Cache Extension for PHP provides a Resolve File Path cache, which is used to store the mappings between relative and absolute file paths, thereby reducing the number of path resolutions that the PHP engine has to perform.
User Cache (available since version 1.1.0) - PHP scripts can take advantage of the shared memory cache by using the user cache API's. PHP objects and variables can be stored in the user cache and then re-used on subsequent requests. This can be used to improve performance of PHP scripts and to share the data across multiple PHP processes.
Session Handler (available since version 1.1.0) - The WinCache session handler can be used to store the PHP session data in the shared memory cache. This avoids file system operations for reading and writing session data, which improves performance when large amount of data is stored in PHP session.
The extension is currently supported only on the following configurations:
Windows OS:
PHP:
Hinweis: The WinCache Extension can only be used when IIS is configured to run PHP via FastCGI.
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/wincache.
There are two packages for this extension: one package is for PHP versions 5.2.X, and the other package is for PHP 5.3.X. Select the package that is appropriate for the PHP version being used.
To install and enable the extension, follow these steps:
Unpack the package into some temporary location.
Copy the php_wincache.dll file into the PHP extensions folder. Typically this folder is called "ext" and it is located in the same folder with all PHP binary files. For example: C:\Program Files\PHP\ext.
Using a text editor, open the php.ini file, which is usually located in the same folder where all PHP binary files are. For example: C:\Program Files\PHP\php.ini.
Add the following line at the end of the php.ini file: extension = php_wincache.dll.
Save and close the php.ini file.
Recycle the IIS Application Pools for PHP to pick up the configuration changes. To check that the extension has been enabled, create a file called phpinfo.php with a PHP code that calls phpinfo function.
Save the phpinfo.php file in the root folder of a IIS web site that uses PHP, then open a browser and make a request to http://localhost/phpinfo.php. Search within the returned web page for a section called wincache. If the extension is enabled, then the phpinfo output will list the configuration settings provided by the WinCache.
Hinweis: Do not forget to remove phpinfo.php file from the web site's root folder after verifying that extension has been enabled.
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
The following table lists and explains the configuration settings provided by the WinCache extension:
| Name | Standard | Minimum | Maximum | Veränderbar | Changelog |
|---|---|---|---|---|---|
| wincache.fcenabled | "1" | "0" | "1" | PHP_INI_ALL | Available since WinCache 1.0.0 |
| wincache.fcenabledfilter | "NULL" | "NULL" | "NULL" | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.fcachesize | "24" | "5" | "255" | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.fcndetect | "1" | "0" | "1" | PHP_INI_SYSTEM | Available since WinCache 1.1.0 |
| wincache.maxfilesize | "256" | "10" | "2048" | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.ocenabled | "1" | "0" | "1" | PHP_INI_ALL | Available since WinCache 1.0.0 |
| wincache.ocenabledfilter | "NULL" | "NULL" | "NULL" | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.ocachesize | "96" | "15" | "255" | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.filecount | "4096" | "1024" | "16384" | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.chkinterval | "30" | "0" | "300" | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.ttlmax | "1200" | "0" | "7200" | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.enablecli | 0 | 0 | 1 | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.ignorelist | NULL | NULL | NULL | PHP_INI_ALL | Available since WinCache 1.0.0 |
| wincache.namesalt | NULL | NULL | NULL | PHP_INI_SYSTEM | Available since WinCache 1.0.0 |
| wincache.ucenabled | 1 | 0 | 1 | PHP_INI_SYSTEM | Available since WinCache 1.1.0 |
| wincache.ucachesize | 8 | 5 | 85 | PHP_INI_SYSTEM | Available since WinCache 1.1.0 |
| wincache.scachesize | 8 | 5 | 85 | PHP_INI_SYSTEM | Available since WinCache 1.1.0 |
| wincache.rerouteini | NULL | NULL | NULL | PHP_INI_SYSTEM | Available since WinCache 1.2.0 |
Hier eine kurze Erklärung der Konfigurationsoptionen:
wincache.fcenabled
boolean
wincache.fcenabledfilter
string
wincache.fcachesize
integer
wincache.fcndetect
boolean
wincache.maxfilesize
integer
wincache.ocenabled
boolean
wincache.ocenabledfilter
string
wincache.ocachesize
integer
wincache.filecount
integer
wincache.chkinterval
integer
wincache.ttlmax
integer
wincache.enablecli
boolean
wincache.ignorelist
string
Defines a list of files that should not be cached by the extension. The files list is specified by using file names only, separated by the pipe symbol - "|".
Beispiel #1 wincache.ignorelist example
wincache.ignorelist = "index.php|misc.php|admin.php"
wincache.namesalt
string
wincache.ucenabled
boolean
wincache.ucachesize
integer
wincache.scachesize
integer
wincache.rerouteini
string
The installation package for WinCache includes a PHP script, wincache.php, that can be used to obtain cache information and statistics.
If the WinCache extension was installed via the Microsoft Web Platform Installer, then this script is located in %SystemDrive%\Program Files\IIS\Windows Cache for PHP\. On a 64-bit version of the Windows Server operating system, the script is located in %SystemDrive%\Program Files (x86)\IIS\Windows Cache for PHP. If the extension was installed manually, then the wincache.php will be located in the same folder from which the content of the installation package was extracted.
To use wincache.php, copy it into a root folder of a Web site or into any subfolder. To protect the script, open it in any text editor and replace the values for USERNAME and PASSWORD constants. If any other IIS authentication is enabled on the server, then follow the instructions in the comments:
Beispiel #1 Authentication configuration for wincache.php
<?php
/**
* ======================== CONFIGURATION SETTINGS ==============================
* If you do not want to use authentication for this page, set USE_AUTHENTICATION to 0.
* If you use authentication then replace the default password.
*/
define('USE_AUTHENTICATION', 1);
define('USERNAME', 'wincache');
define('PASSWORD', 'wincache');
/**
* The Basic PHP authentication will work only when IIS is configured to support
* Anonymous Authentication' and nothing else. If IIS is configured to support/use
* any other kind of authentication like Basic/Negotiate/Digest etc, this will not work.
* In that case use the array below to define the names of users in your
* domain/network/workgroup which you want to grant access to.
*/
$user_allowed = array('DOMAIN\user1', 'DOMAIN\user2', 'DOMAIN\user3');
/**
* If the array contains string 'all', then all the users authenticated by IIS
* will have access to the page. Uncomment the below line and comment above line
* to grant access to all users who gets authenticated by IIS.
*/
/* $user_allowed = array('all'); */
/** ===================== END OF CONFIGURATION SETTINGS ========================== */
?>
Hinweis: Always protect the wincache.php script by using either the built-in authentication or the server's authentication mechanism. Leaving this script unprotected may compromise the security of your web application and web server.
The WinCache session handler (available since WinCache 1.1.0) can be used to configure PHP to store the session data in shared memory session cache. Using shared memory instead of the default file session storage helps improve performance of PHP applications that store large amount of data in session objects. Wincache session cache uses file-backed shared memory, which ensures that the session data is not lost during recycling of IIS application pools.
To configure PHP to use WinCache session handler set the php.ini setting session.save_handler to wincache. By default the Windows temporary file location is used for storing the session data. To change the location of the session file use session.save_path directive.
Beispiel #1 Enabling WinCache session handler
session.save_handler = wincache session.save_path = C:\inetpub\temp\session\
The WinCache functions reroutes (available since WinCache 1.2.0) can be used to replace built-in PHP functions with their equivalents that are optimized for a particular purpose. WinCache extension includes Windows-optimized implementation of PHP file functions that may improve performance of PHP applications in cases when PHP has to access files on network shares. The optimized implementation is provided for the following functions:
To configure WinCache to use the functions reroutes use the file reroute.ini that is included in WinCache installation package. Copy this file into the same directory where php.ini file is located. After that add the wincache.rerouteini setting in php.ini and specify an absolute or relative path to the reroute.ini file.
Beispiel #1 Enabling WinCache functions reroutes
wincache.rerouteini = C:\PHP\reroute.ini
Hinweis: If WinCache functions reroutes are enabled it is recommended to increase the WinCache file cache size. This can be done by using wincache.fcachesize setting.
The reroute.ini file contains the mappings between the native PHP functions and their equivalents in WinCache. Each line in the file defines a mapping by using the following syntax:
<PHP function name>:[<number of function parameters>]=<wincache function name>
The example of the file is shown below. In this example the calls to PHP function file_get_contents() will be replaced with calls to wincache_file_get_contents() only if the number of parameters passed to the function is less than or equals to 2. Specifying the number of parameters is useful when replacement function does not handle all the function's parameters.
Beispiel #2 Reroute.ini file content
[FunctionRerouteList] file_exists=wincache_file_exists file_get_contents:2=wincache_file_get_contents readfile:2=wincache_readfile is_readable=wincache_is_readable is_writable=wincache_is_writable is_writeable=wincache_is_writable is_file=wincache_is_file is_dir=wincache_is_dir realpath=wincache_realpath filesize=wincache_filesize
Diese Erweiterung definiert keine Ressource-Typen.
Diese Erweiterung definiert keine Konstanten.
(PECL wincache >= 1.0.0)
wincache_fcache_fileinfo — Retrieves information about files cached in the file cache
$summaryonly = false
] )Retrieves information about file cache content and its usage.
summaryonly
Controls whether the returned array will contain information about individual cache entries along with the file cache summary.
Array of meta data about file cache Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
file_entries - an array that contains the information about all the cached files:
Beispiel #1 A wincache_fcache_fileinfo() example
<pre>
<?php
print_r(wincache_fcache_fileinfo());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
( [total_cache_uptime] => 3234
[total_file_count] => 5
[total_hit_count] => 0
[total_miss_count] => 1
[file_entries] => Array
(
[1] => Array
(
[file_name] => c:\inetpub\wwwroot\checkcache.php
[add_time] => 1
[use_time] => 0
[last_check] => 1
[hit_count] => 1
[file_size] => 2435
)
[2] => Array (...iterates for each cached file)
)
)
(PECL wincache >= 1.0.0)
wincache_fcache_meminfo — Retrieves information about file cache memory usage
Retrieves information about memory usage by file cache.
Array of meta data about file cache memory usage Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
Beispiel #1 A wincache_fcache_meminfo() example
<pre>
<?php
print_r(wincache_fcache_meminfo());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[memory_total] => 134217728
[memory_free] => 131339120
[num_used_blks] => 361
[num_free_blks] => 3
[memory_overhead] => 5856
)
(PECL wincache >= 1.1.0)
wincache_lock — Acquires an exclusive lock on a given key
$key
[, bool $isglobal = false
] )Obtains an exclusive lock on a given key. The execution of the current script will be blocked until the lock can be obtained. Once the lock is obtained, the other scripts that try to request the lock by using the same key will be blocked, until the current script releases the lock by using wincache_unlock().
Using of the wincache_lock() and wincache_unlock() can cause deadlocks when executing PHP scripts in a multi-process environment like FastCGI. Do not use these functions unless you are absolutely sure you need to use them. For the majority of the operations on the user cache it is not necessary to use these functions.
key
Name of the key in the cache to get the lock on.
isglobal
Controls whether the scope of the lock is system-wide or local. Local locks are scoped to the application pool in IIS FastCGI case or to all php processes that have the same parent process identifier.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Using wincache_lock()
<?php
$fp = fopen("/tmp/lock.txt", "r+");
if (wincache_lock(“lock_txt_lock”)) { // do an exclusive lock
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here\n");
wincache_unlock(“lock_txt_lock”); // release the lock
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
?>
(PECL wincache >= 1.0.0)
wincache_ocache_fileinfo — Retrieves information about files cached in the opcode cache
$summaryonly = false
] )Retrieves information about opcode cache content and its usage.
summaryonly
Controls whether the returned array will contain information about individual cache entries along with the opcode cache summary.
Array of meta data about opcode cache Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
file_entries - an array that contains the information about all the cached files:
Beispiel #1 A wincache_ocache_fileinfo() example
<pre>
<?php
print_r(wincache_ocache_fileinfo());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[total_cache_uptime] => 17357
[total_file_count] => 121
[total_hit_count] => 36562
[total_miss_count] => 201
[file_entries] => Array
(
[1] => Array
(
[file_name] => c:\inetpub\wwwroot\checkcache.php
[add_time] => 17356
[use_time] => 7
[last_check] => 10
[hit_count] => 454
[function_count] => 0
[class_count] => 1
)
[2] => Array (...iterates for each cached file)
)
)
(PECL wincache >= 1.0.0)
wincache_ocache_meminfo — Retrieves information about opcode cache memory usage
Retrieves information about memory usage by opcode cache.
Array of meta data about opcode cache memory usage Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
Beispiel #1 A wincache_ocache_meminfo() example
<pre>
<?php
print_r(wincache_ocache_meminfo());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[memory_total] => 134217728
[memory_free] => 112106972
[num_used_blks] => 15469
[num_free_blks] => 4
[memory_overhead] => 247600
)
(PECL wincache >= 1.0.0)
wincache_refresh_if_changed — Refreshes the cache entries for the cached files
$files
] )Refreshes the cache entries for the files, whose names were passed in the input argument. If no argument is specified then refreshes all the entries in the cache.
files
An array of file names for files that need to be refreshed. An absolute or relative file paths can be used.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
WinCache performs regular checks on the cached files to ensure that if any file has changed then the corresponding entry in the cache is updated. By default this check is performed every 30 seconds. If, for example, a PHP script updates another PHP script where the application's configuration settings are stored, then it may happen that after the configuration settings have been saved to a file, the application is still using old settings for some time until the cache is refreshed. In those cases it may be preferrable to refresh the cache right after the file has been changed. The following example shows how this can be done.
Beispiel #1 A wincache_refresh_if_changed() example
<?php
$filename = 'C:\inetpub\wwwroot\config.php';
$handle = fopen($filename, 'w+');
if ($handle === FALSE) die('Failed to open file '.$filename.' for writing');
fwrite($handle, '<?php $setting=something; ?>');
fclose($handle);
wincache_refresh_if_changed(array($filename));
?>
(PECL wincache >= 1.0.0)
wincache_rplist_fileinfo — Retrieves information about resolve file path cache
$summaryonly = false
] )Retrieves information about cached mappings between relative file paths and corresponding absolute file paths.
Array of meta data about the resolve file path cache Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
rplist_entries - an array that contains the information about all the cached file paths:
Beispiel #1 A wincache_rplist_fileinfo() example
<pre>
<?php
print_r(wincache_rplist_fileinfo());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[total_file_count] => 5
[rplist_entries] => Array
(
[1] => Array
(
[resolve_path] => checkcache.php
[subkey_data] => c:\inetpub\wwwroot|c:\inetpub\wwwroot\checkcache.php
)
[2] => Array (...iterates for each cached file)
)
)
(PECL wincache >= 1.0.0)
wincache_rplist_meminfo — Retrieves information about memory usage by the resolve file path cache
Retrieves information about memory usage by resolve file path cache.
Array of meta data that describes memory usage by resolve file path cache. Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
Beispiel #1 A wincache_rplist_meminfo() example
<pre>
<?php
print_r(wincache_rplist_meminfo());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[memory_total] => 9437184
[memory_free] => 9416744
[num_used_blks] => 23
[num_free_blks] => 1
[memory_overhead] => 416
)
(PECL wincache >= 1.1.0)
wincache_scache_info — Retrieves information about files cached in the session cache
$summaryonly = false
] )Retrieves information about session cache content and its usage.
summaryonly
Controls whether the returned array will contain information about individual cache entries along with the session cache summary.
Array of meta data about session cache Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
scache_entries - an array that contains the information about all the cached items:
Beispiel #1 A wincache_scache_info() example
<pre>
<?php
print_r(wincache_scache_info());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[total_cache_uptime] => 17357
[total_file_count] => 121
[total_hit_count] => 36562
[total_miss_count] => 201
[scache_entries] => Array
(
[1] => Array
(
[file_name] => c:\inetpub\wwwroot\checkcache.php
[add_time] => 17356
[use_time] => 7
[last_check] => 10
[hit_count] => 454
[function_count] => 0
[class_count] => 1
)
[2] => Array (...iterates for each cached file)
)
)
(PECL wincache >= 1.1.0)
wincache_scache_meminfo — Retrieves information about session cache memory usage
Retrieves information about memory usage by session cache.
Array of meta data about session cache memory usage Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
Beispiel #1 A wincache_scache_meminfo() example
<pre>
<?php
print_r(wincache_scache_meminfo());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[memory_total] => 5242880
[memory_free] => 5215056
[num_used_blks] => 6
[num_free_blks] => 3
[memory_overhead] => 176
)
(PECL wincache >= 1.1.0)
wincache_ucache_add — Adds a variable in user cache only if variable does not already exist in the cache
Adds a variable in user cache, only if this variable doesn't already exist in the cache. The added variable remains in the user cache unless its time to live expires or it is deleted by using wincache_ucache_delete() or wincache_ucache_clear() functions.
key
Store the variable using this key name. If a variable with same key is already present the function
will fail and return FALSE. key is case sensitive. To override the value even if
key is present use wincache_ucache_set() function instad.
key can also take array of name => value pairs where names will be used as keys.
This can be used to add multiple values in the cache in one operation, thus avoiding race condition.
value
Value of a variable to store. Value supports all data types except resources, such as file handles.
This paramter is ignored if first argument is an array. A general guidance is to pass NULL
as value while using array as key. If value is an
object, or an array containing objects, then the objects will be serialized. See
__sleep() for details on serializing objects.
values
Associative array of keys and values.
ttl
Time for the variable to live in the cache in seconds. After the value specified in ttl has passed
the stored variable will be deleted from the cache. This parameter takes a default value of 0 which means
the variable will stay in the cache unless explicitly deleted by using wincache_ucache_delete()
or wincache_ucache_clear() functions.
If key is string, the function returns TRUE on success and FALSE on failure.
If key is an array, the function returns:
FALSE;
Beispiel #1 wincache_ucache_add() with key as a string
<?php
$bar = 'BAR';
var_dump(wincache_ucache_add('foo', $bar));
var_dump(wincache_ucache_add('foo', $bar));
var_dump(wincache_ucache_get('foo'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(false) string(3) "BAR"
Beispiel #2 wincache_ucache_add() with key as an array
<?php
$colors_array = array('green' => '5', 'Blue' => '6', 'yellow' => '7', 'cyan' => '8');
var_dump(wincache_ucache_add($colors_array));
var_dump(wincache_ucache_add($colors_array));
var_dump(wincache_ucache_get('Blue'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(0) { }
array(4) {
["green"]=> int(-1)
["Blue"]=> int(-1)
["yellow"]=> int(-1)
["cyan"]=> int(-1)
}
string(1) "6"
(PECL wincache >= 1.1.0)
wincache_ucache_cas — Compares the variable with old value and assigns new value to it
$key
, int $old_value
, int $new_value
)
Compares the variable associated with the key with old_value
and if it matches then assigns the new_value to it.
key
The key that is used to store the variable in the cache.
key is case sensitive.
old_value
Old value of the variable pointed by key in the user cache.
The value should be of type long, otherwise the function returns
FALSE.
new_value
New value which will get assigned to variable pointer by key if a
match is found. The value should be of type long, otherwise
the function returns FALSE.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Using wincache_ucache_cas()
<?php
wincache_ucache_set('counter', 2922);
var_dump(wincache_ucache_cas('counter', 2922, 1));
var_dump(wincache_ucache_get('counter'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) int(1)
(PECL wincache >= 1.1.0)
wincache_ucache_clear — Deletes entire content of the user cache
Clears/deletes all the values stored in the user cache.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 using wincache_ucache_clear()
<?php
wincache_ucache_set('green', 1);
wincache_ucache_set('red', 2);
wincache_ucache_set('orange', 4);
wincache_ucache_set('blue', 8);
wincache_ucache_set('cyan', 16);
$array1 = array('green', 'red', 'orange', 'blue', 'cyan');
var_dump(wincache_ucache_get($array1));
var_dump(wincache_ucache_clear());
var_dump(wincache_ucache_get($array1));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(5) { ["green"]=> int(1)
["red"]=> int(2)
["orange"]=> int(4)
["blue"]=> int(8)
["cyan"]=> int(16) }
bool(true)
bool(false)
(PECL wincache >= 1.1.0)
wincache_ucache_dec — Decrements the value associated with the key
Decrements the value associated with the key by 1 or as specified
by dec_by.
key
The key that was used to store the variable in the cache.
key is case sensitive.
dec_by
The value by which the variable associated with the key will get decremented.
If the argument is a floating point number it will be truncated to nearest integer. The variable
associated with the key should be of type long, otherwise
the function fails and returns FALSE.
success
Will be set to TRUE on success and FALSE on failure.
Returns the decremented value on success and FALSE on failure.
Beispiel #1 Using wincache_ucache_dec()
<?php
wincache_ucache_set('counter', 1);
var_dump(wincache_ucache_dec('counter', 2923, $success));
var_dump($success);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
int(2922) bool(true)
(PECL wincache >= 1.1.0)
wincache_ucache_delete — Deletes variables from the user cache
Deletes the elements in the user cache pointed by key.
key
The key that was used to store the variable in the cache.
key is case sensitive. key can be an
array of keys.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
If key is an array then the function returns FALSE
if every element of the array fails to get deleted from the user cache, otherwise returns an
array which consists of all the keys that are deleted.
Beispiel #1 Using wincache_ucache_delete() with key as a string
<?php
wincache_ucache_set('foo', 'bar');
var_dump(wincache_ucache_delete('foo'));
var_dump(wincache_ucache_exists('foo'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(false)
Beispiel #2 Usingwincache_ucache_delete() with key as an array
<?php
$array1 = array('green' => '5', 'blue' => '6', 'yellow' => '7', 'cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('green', 'blue', 'yellow', 'cyan');
var_dump(wincache_ucache_delete($array2));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(4) { [0]=> string(5) "green"
[1]=> string(4) "Blue"
[2]=> string(6) "yellow"
[3]=> string(4) "cyan" }
Beispiel #3 Using wincache_ucache_delete() with key as an array where some elements cannot be deleted
<?php
$array1 = array('green' => '5', 'blue' => '6', 'yellow' => '7', 'cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('orange', 'red', 'yellow', 'cyan');
var_dump(wincache_ucache_delete($array2));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(2) { [0]=> string(6) "yellow"
[1]=> string(4) "cyan" }
(PECL wincache >= 1.1.0)
wincache_ucache_exists — Checks if a variable exists in the user cache
$key
)
Checks if a variable with the key exists in the user cache or not.
key
The key that was used to store the variable in the cache.
key is case sensitive.
Returns TRUE if variable with the key exitsts,
otherwise returns FALSE.
Beispiel #1 Using wincache_ucache_exists()
<?php
if (!wincache_ucache_exists('green'))
wincache_ucache_set('green', 1);
var_dump(wincache_ucache_exists('green'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true)
(PECL wincache >= 1.1.0)
wincache_ucache_get — Gets a variable stored in the user cache
Gets a variable stored in the user cache.
key
The key that was used to store the variable in the cache.
key is case sensitive. key can be an
array of keys. In this case the return value will be an array of values of each element
in the key array. If an object, or an array containing objects,
is returned, then the objects will be unserialized. See
__wakeup() for details on unserializing objects.
success
Will be set to TRUE on success and FALSE on failure.
If key is a string, the function returns the value of the variable stored with that key.
The success is set to TRUE on success and
to FALSE on failure.
The key is an array, the parameter success
is always set to TRUE. The returned array (name => value pairs) will
contain only those name => value pairs for which the get operation in user cache was
successful. If none of the keys in the key array finds a match in the user cache
an empty array will be returned.
Beispiel #1 wincache_ucache_get() with key as a string
<?php
wincache_ucache_add('color', 'blue');
var_dump(wincache_ucache_get('color', $success));
var_dump($success);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(4) "blue" bool(true)
Beispiel #2 wincache_ucache_get() with key as an array
<?php
$array1 = array('green' => '5', 'Blue' => '6', 'yellow' => '7', 'cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('green', 'Blue', 'yellow', 'cyan');
var_dump(wincache_ucache_get($array2, $success));
var_dump($success);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(4) { ["green"]=> string(1) "5"
["Blue"]=> string(1) "6"
["yellow"]=> string(1) "7"
["cyan"]=> string(1) "8" }
bool(true)
(PECL wincache >= 1.1.0)
wincache_ucache_inc — Increments the value associated with the key
Increments the value associated with the key by 1 or as specified
by inc_by.
key
The key that was used to store the variable in the cache.
key is case sensitive.
inc_by
The value by which the variable associated with the key will get incremented.
If the argument is a floating point number it will be truncated to nearest integer. The variable
associated with the key should be of type long, otherwise
the function fails and returns FALSE.
success
Will be set to TRUE on success and FALSE on failure.
Returns the incremented value on success and FALSE on failure.
Beispiel #1 Using wincache_ucache_inc()
<?php
wincache_ucache_set('counter', 1);
var_dump(wincache_ucache_inc('counter', 2921, $success));
var_dump($success);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
int(2922) bool(true)
(PECL wincache >= 1.1.0)
wincache_ucache_info — Retrieves information about data stored in the user cache
$summaryonly = false
[, string $key
]] )Retrieves information about data stored in the user cache.
summaryonly
Controls whether the returned array will contain information about individual cache entries along with the user cache summary.
key
The key of an entry in the user cache. If specified then the returned array will contain information
only about that cache entry. If not specified and summaryonly is set to
FALSE then the returned array will contain information about all entries in the cache.
Array of meta data about user cache Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
ucache_entries - an array that contains the information about all the cached items:
Beispiel #1 Using wincache_ucache_info()
<?php
wincache_ucache_get('green');
wincache_ucache_set('green', 2922);
wincache_ucache_get('green');
wincache_ucache_get('green');
wincache_ucache_get('green');
print_r(wincache_ucache_info());
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
( ["total_cache_uptime"] => int(0)
["is_local_cache"] => bool(false)
["total_item_count"] => int(1)
["total_hit_count"] => int(3)
["total_miss_count"] => int(1)
["ucache_entries"] => Array(1)
( [1] => Array(6)
(
["key_name"] => string(5) "green"
["value_type"] => string(4) "long"
["is_session"] => int(0)
["ttl_seconds"] => int(0)
["age_seconds"] => int(0)
["hitcount"] => int(3)
)
)
)
(PECL wincache >= 1.1.0)
wincache_ucache_meminfo — Retrieves information about user cache memory usage
Retrieves information about memory usage by user cache.
Array of meta data about user cache memory usage Im Fehlerfall wird FALSE zurückgegeben.
The array returned by this function contains the following elements:
Beispiel #1 A wincache_ucache_meminfo() example
<pre>
<?php
print_r(wincache_ucache_meminfo());
?>
</pre>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[memory_total] => 5242880
[memory_free] => 5215056
[num_used_blks] => 6
[num_free_blks] => 3
[memory_overhead] => 176
)
(PECL wincache >= 1.1.0)
wincache_ucache_set — Adds a variable in user cache and overwrites a variable if it already exists in the cache
Adds a variable in user cache. Overwrites a variable if it already exists in the cache. The added or updated variable remains in the user cache unless its time to live expires or it is deleted by using wincache_ucache_delete() or wincache_ucache_clear() functions.
key
Store the variable using this key name. If a variable with same
key is already present the function will overwrite the previous
value with the new one. key is case sensitive.
key can also take array of name => value pairs where names will be used as
keys. This can be used to add multiple values in the cache in one operation, thus avoiding
race condition.
value
Value of a variable to store. Value supports all data types except resources, such as file handles.
This paramter is ignored if first argument is an array. A general guidance is to pass NULL
as value while using array as key. If value is an
object, or an array containing objects, then the objects will be serialized. See
__sleep() for details on serializing objects.
values
Associative array of keys and values.
ttl
Time for the variable to live in the cache in seconds. After the value specified in ttl has passed
the stored variable will be deleted from the cache. This parameter takes a default value of 0 which means
the variable will stay in the cache unless explicitly deleted by using wincache_ucache_delete()
or wincache_ucache_clear() functions.
If key is string, the function returns TRUE on success and FALSE on failure.
If key is an array, the function returns:
FALSE;
Beispiel #1 wincache_ucache_set() with key as a string
<?php
$bar = 'BAR';
var_dump(wincache_ucache_set('foo', $bar));
var_dump(wincache_ucache_get('foo'));
$bar1 = 'BAR1';
var_dump(wincache_ucache_set('foo', $bar1));
var_dump(wincache_ucache_get('foo'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) string(3) "BAR" bool(true) string(3) "BAR1"
Beispiel #2 wincache_ucache_set() with key as an array
<?php
$colors_array = array('green' => '5', 'Blue' => '6', 'yellow' => '7', 'cyan' => '8');
var_dump(wincache_ucache_set($colors_array));
var_dump(wincache_ucache_set($colors_array));
var_dump(wincache_ucache_get('Blue'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(0) {}
array(0) {}
string(1) "6"
(PECL wincache >= 1.1.0)
wincache_unlock — Releases an exclusive lock on a given key
$key
)Releases an exclusive lock that was obtained on a given key by using wincache_lock(). If any other process was blocked waiting for the lock on this key, that process will be able to obtain the lock.
Using of the wincache_lock() and wincache_unlock() can cause deadlocks when executing PHP scripts in a multi-process environment like FastCGI. Do not use these functions unless you are absolutely sure you need to use them. For the majority of the operations on the user cache it is not necessary to use these functions.
key
Name of the key in the cache to release the lock on.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Using wincache_unlock()
<?php
$fp = fopen("/tmp/lock.txt", "r+");
if (wincache_lock(“lock_txt_lock”)) { // do an exclusive lock
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here\n");
wincache_unlock(“lock_txt_lock”); // release the lock
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
?>
Building WinCache extension will require:
For completing first two steps, follow the step-by-step guide for how to » build PHP on Windows.
For getting the WinCache source code follow the instructions described in Downloading PECL extensions.
The following steps describe how to compile and build WinCache on Windows OS:
Open a command prompt which is used to build PHP
Go to the root folder where PHP sources are present
Run the command:
cscript.exe win32\build\buildconf.js
Run the command:
configure.bat --help
Run the command:
configure.js [all options used to build PHP] --enable-wincache
Run the command:
nmake
The following steps describe how to verify that WinCache has been built correctly:
Go to the folder where the PHP binaries are built
Run the command:
php.exe -n -d extension=php_wincache.dll -re wincache
XHProf is a light-weight hierarchical and instrumentation based profiler. During the data collection phase, it keeps track of call counts and inclusive metrics for arcs in the dynamic callgraph of a program. It computes exclusive metrics in the reporting/post processing phase, such as wall (elapsed) time, CPU time and memory usage. A functions profile can be broken down by callers or callees. XHProf handles recursive functions by detecting cycles in the callgraph at data collection time itself and avoiding the cycles by giving unique depth qualified names for the recursive invocations.
XHProf includes a simple HTML based user interface (written in PHP). The browser based UI for viewing profiler results makes it easy to view results or to share results with peers. A callgraph image view is also supported.
XHProf reports can often be helpful in understanding the structure of the code being executed. The hierarchical nature of the reports can be used to determine, for example, what chain of calls led to a particular function getting called.
XHProf supports ability to compare two runs (a.k.a. "diff" reports) or aggregate data from multiple runs. Diff and aggregate reports, much like single run reports, offer "flat" as well as "hierarchical" views of the profile.
Additional documentation can be found via the » facebook xhprof website.
Although not required, xhprof includes an interface that's written in PHP. It's used to save and display the profiled data in a usable way, where viewing is done via a web browser. So, a PHP enabled web server will likely make the xhprof experience more useful.
There's also a fork of the GUI interface at » http://github.com/preinheimer/xhprof
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/xhprof
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| xhprof.output_dir | "" | PHP_INI_ALL |
Hier eine kurze Erklärung der Konfigurationsoptionen:
xhprof.output_dir
string
Directory used by the default implementation of the iXHProfRuns interface (namely, the XHProfRuns_Default class) for storing XHProf runs.
Diese Erweiterung definiert keine Ressource-Typen.
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.
Beispiel #1 Xhprof example with the optional GUI
This example starts and stops the profiler, then uses the bundled GUI interface to save and parse the results. In other words, the code from the extension itself ends at the call to xhprof_disable().
<?php
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
for ($i = 0; $i <= 1000; $i++) {
$a = $i * $i;
}
$xhprof_data = xhprof_disable();
$XHPROF_ROOT = "/tools/xhprof/";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing");
echo "http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
http://localhost/xhprof/xhprof_html/index.php?run=t11_4bdf44d21121f&source=xhprof_testing
(PECL xhprof >= 0.9.0)
xhprof_disable — Stops xhprof profiler
Stops the profiler, and returns xhprof data from the run.
Diese Funktion hat keine Parameter.
An array of xhprof data, from the run.
Beispiel #1 xhprof_disable() example
<?php
xhprof_enable();
$foo = strlen("foo bar");
$xhprof_data = xhprof_disable();
print_r($xhprof_data);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Array
(
[main()==>strlen] => Array
(
[ct] => 1
[wt] => 279
)
[main()==>xhprof_disable] => Array
(
[ct] => 1
[wt] => 9
)
[main()] => Array
(
[ct] => 1
[wt] => 610
)
)
(PECL xhprof >= 0.9.0)
xhprof_enable — Start xhprof profiler
$flags = 0
[, array $options
]] )Start xhprof profiling.
flags
Optional flags to add additional information to the profiling. See the
XHprof constants for further
information about these flags, e.g., XHPROF_FLAGS_MEMORY
to enable memory profiling.
options
An array of optional options, namely, the 'ignored_functions' option to pass in functions to be ignored during profiling.
NULL
| Version | Beschreibung |
|---|---|
| 0.9.2 |
The optional options parameter was added.
|
Beispiel #1 xhprof_enable() examples
<?php
// 1. elapsed time + memory + CPU profiling; and ignore built-in (internal) functions
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
// 2. elapsed time profiling; ignore call_user_func* during profiling
xhprof_enable(
0,
array('ignored_functions' => array('call_user_func',
'call_user_func_array')));
// 3. elapsed time + memory profiling; ignore call_user_func* during profiling
xhprof_enable(
XHPROF_FLAGS_MEMORY,
array('ignored_functions' => array('call_user_func',
'call_user_func_array')));
?>
(PECL xhprof >= 0.9.0)
xhprof_sample_disable — Stops xhprof sample profiler
Stops the sample mode xhprof profiler, and
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Diese Funktion hat keine Parameter.
An array of xhprof sample data, from the run.
Beispiel #1 xhprof_sample_disable() example
<?php
xhprof_sample_enable();
for ($i = 0; $i <= 10000; $i++) {
$a = strlen($i);
$b = $i * $a;
$c = rand();
}
$xhprof_data = xhprof_sample_disable();
print_r($xhprof_data);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Array
(
[1272935300.800000] => main()
[1272935300.900000] => main()
)
(PECL xhprof >= 0.9.0)
xhprof_sample_enable — Description
Starts profiling in sample mode, which is a lighter weight version of xhprof_enable(). The sampling interval is 0.1 seconds, and samples record the full function call stack. The main use case is when lower overhead is required when doing performance monitoring and diagnostics.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Diese Funktion hat keine Parameter.
NULL
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
Diese Erweiterung definiert keine Ressource-Typen.
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)
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)
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)
ID3_V2_1 bei der Arbeit
mit ID3 V2.1 tags.
ID3_V2_2
(integer)
ID3_V2_2 bei der Arbeit
mit ID3v2.2 Tags.
ID3_V2_3
(integer)
ID3_V2_3 bei der Arbeit
mit ID3v2.3 Tags.
ID3_V2_4
(integer)
ID3_V2_4 bei der Arbeit
mit ID3v2.4 Tags.
ID3_BEST
(integer)
ID3_BEST, wenn Sie
die id3-Funktionen bestimmen lassen wollen, welche
Tag-Version verwendet werden soll.
(PECL id3 >= 0.2)
id3_get_frame_long_name — Ermittelt den ausführlichen Namen eines ID3v2-Frames
$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().
(PECL id3 >= 0.2)
id3_get_frame_short_name — Ermittelt den kurzen Namen eines ID3v2-Frames
$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().
(PECL id3 >= 0.1)
id3_get_genre_id — Ermitteln der ID für ein Genre
$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().
(PECL id3 >= 0.1)
id3_get_genre_list — Ermitteln aller möglichen Genres
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().
(PECL id3 >= 0.1)
id3_get_genre_name — Ermitteln eine Genrenamen anhand einer Genre-Id
$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().
(PECL id3 >= 0.1)
id3_get_tag — Ermitteln aller Informationen in einem ID3-Tag
$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().
(PECL id3 >= 0.1)
id3_get_version — Version eines ID3-Tags feststellen
$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().
(PECL id3 >= 0.1)
id3_remove_tag — Entfernen eines vorhandenen ID3-Tags
$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().
(PECL id3 >= 0.1)
id3_set_tag — Manipulation der Informationen in einem ID3-Tag
$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", $data, ID3_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 | 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().
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.
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.
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/ktaglib.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
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)
KTaglib_MPEG_Header::Version2
(integer)
KTaglib_MPEG_Header::Version2_5
(integer)
KTaglib_ID3v2_AttachedPictureFrame::Other
(integer)
KTaglib_ID3v2_AttachedPictureFrame::FileIcon
(integer)
KTaglib_ID3v2_AttachedPictureFrame::OtherFileIcon
(integer)
KTaglib_ID3v2_AttachedPictureFrame::FrontCover
(integer)
KTaglib_ID3v2_AttachedPictureFrame::BackCover
(integer)
KTaglib_ID3v2_AttachedPictureFrame::LeafletPage
(integer)
KTaglib_ID3v2_AttachedPictureFrame::Media
(integer)
KTaglib_ID3v2_AttachedPictureFrame::LeadArtist
(integer)
KTaglib_ID3v2_AttachedPictureFrame::Artist
(integer)
KTaglib_ID3v2_AttachedPictureFrame::Conductor
(integer)
KTaglib_ID3v2_AttachedPictureFrame::Band
(integer)
KTaglib_ID3v2_AttachedPictureFrame::Composer
(integer)
KTaglib_ID3v2_AttachedPictureFrame::Lyricist
(integer)
KTaglib_ID3v2_AttachedPictureFrame::RecordingLocation
(integer)
KTaglib_ID3v2_AttachedPictureFrame::DuringRecording
(integer)
KTaglib_ID3v2_AttachedPictureFrame::DuringPerformance
(integer)
KTaglib_ID3v2_AttachedPictureFrame::MovieScreenCapture
(integer)
KTaglib_ID3v2_AttachedPictureFrame::ColouredFish
(integer)
KTaglib_ID3v2_AttachedPictureFrame::Illustration
(integer)
KTaglib_ID3v2_AttachedPictureFrame::BandLogo
(integer)
(No version information available, might only be in SVN)
Represents an MPEG file. MPEG files can have ID3v1, ID3v2 tags and audio properties.
(0.0.1)
KTaglib_MPEG_File::__construct — Opens a new file
$filename
)Opens a new MPEG file.
filename
The file to read
Beispiel #1 Opens a new MP3 file and read the title
<?php
$mpeg = new KTaglib_MPEG_File('example.mp3');
echo $mpeg->getID3v1Tag()->getTitle();
?>
(0.0.1)
KTaglib_MPEG_File::getAudioProperties — Returns an object that provides access to the audio properties
Returns an object that provides access to the audio properties of the mpeg file.
Returns an KTaglib_MPEG_AudioProperties object or false.
(0.0.1)
KTaglib_MPEG_File::getID3v1Tag — Returns an object representing an ID3v1 tag
$create = false
] )Returns an object that represents an ID3v1 tag, which can be used to get information about the ID3v1 tag.
Returns an KTaglib_MPEG_ID3v1Tag object or false if there is no ID3v1 tag.
(0.0.1)
KTaglib_MPEG_File::getID3v2Tag — Returns a ID3v2 object
Returns a ID3v2 object for the mpeg file. If no ID3v2 Tag is present, an KTaglib_TagNotFoundException is thrown.
Returns the KTaglib_ID3v2_Tag object of the MPEG file or false if there is no ID3v2 tag
(No version information available, might only be in SVN)
Represents the audio properties of a MPEG file, like length, bitrate or samplerate.
(0.0.1)
KTaglib_MPEG_AudioProperties::getBitrate — Returns the bitrate of the MPEG file
Returns the bitrate of the MPEG file
Returns the bitrate as an integer
(0.0.1)
KTaglib_MPEG_AudioProperties::getChannels — Returns the amount of channels of a MPEG file
Returns the amount of channels of the MPEG file
Returns the channel count as an integer
(0.0.1)
KTaglib_MPEG_AudioProperties::getLayer — Returns the layer of a MPEG file
Returns the layer of the MPEG file (usually 3 for MP3).
Returns the layer as an integer
(0.0.1)
KTaglib_MPEG_AudioProperties::getLength — Returns the length of a MPEG file
Returns the length of the MPEG file
Returns the length as an integer
(0.0.1)
KTaglib_MPEG_AudioProperties::getSampleBitrate — Returns the sample bitrate of a MPEG file
Returns the sample bitrate of the MPEG file
Returns the sample bitrate as an integer
(0.0.1)
KTaglib_MPEG_AudioProperties::getVersion — Returns the version of a MPEG file
Returns the version of the MPEG file header. The possible versions are defined in Tag_MPEG_Header (Version1, Version2, Version2.5).
Returns the version
(0.0.1)
KTaglib_MPEG_AudioProperties::isCopyrighted — Returns the copyright status of an MPEG file
Returns true if the MPEG file is copyrighted
Returns true if the MPEG file is copyrighted
(0.0.1)
KTaglib_MPEG_AudioProperties::isOriginal — Returns if the file is marked as the original file
Returns true if the file is marked as the original file
Returns true if the file is marked as the original file
(0.0.1)
KTaglib_MPEG_AudioProperties::isProtectionEnabled — Returns if protection mechanisms of an MPEG file are enabled
Returns true if protection mechanisms (like DRM) are enabled for this file
Returns true if protection mechanisms (like DRM) are enabled for this file
(No version information available, might only be in SVN)
Base class for ID3v1 or ID3v2 tags
(0.0.1)
KTaglib_Tag::getAlbum — Returns the title string from a ID3 tag
Returns the album string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.
Returns the album string
(0.0.1)
KTaglib_Tag::getArtist — Returns the artist string from a ID3 tag
Returns the artist string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.
Returns the artist string
(0.0.1)
KTaglib_Tag::getComment — Returns the comment from a ID3 tag
Returns the comment of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.
Returns the comment string
(0.0.1)
KTaglib_Tag::getGenre — Returns the genre from a ID3 tag
Returns the genre of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.
Returns the genre string
(0.0.1)
KTaglib_Tag::getTitle — Returns the title string from a ID3 tag
Returns the title string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.
Returns the title string
(0.0.1)
KTaglib_Tag::getTrack — Returns the track number from a ID3 tag
Returns the track number of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.
Returns the track number as an integer
(0.0.1)
KTaglib_Tag::getYear — Returns the year from a ID3 tag
Returns the year of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.
Returns the year as an integer
(0.0.1)
KTaglib_Tag::isEmpty — Returns true if the tag is empty
Returns true if the tag exists, but is empty. This method is implemented in ID3v1 and ID3v2 tags.
Returns true if the tag is empty, otherwise false.
(No version information available, might only be in SVN)
Represents and ID3v2 tag. It provides a list of ID3v2 frames and can be used to add and remove additional frames.
(0.0.1)
KTaglib_ID3v2_Tag::addFrame — Add a frame to the ID3v2 tag
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.
Returns true on success, otherwise false.
(0.0.1)
KTaglib_ID3v2_Tag::getFrameList — Returns an array of ID3v2 frames, associated with the ID3v2 tag
Returns an array of ID3v2 frames, associated with the ID3v2 tag.
Return an array of KTaglib_ID3v2_Frame objects
(No version information available, might only be in SVN)
The base class for ID3v2 frames. ID3v2 tags are separated in various specialized frames. Some frames can exists multiple times.
(0.0.1)
KTaglib_ID3v2_Frame::getSize — Returns the size of the frame in bytes
Returns the size of the frame in bytes. Please refer to id3.org to see what ID3v2 frames are and how they are defined.
Returns the size of the frame in bytes
(0.0.1)
KTaglib_ID3v2_Frame::__toString — Returns a string representation of the frame
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
Returns a string representation of the frame.
(No version information available, might only be in SVN)
Represents an ID3v2 frame that can hold a picture.
(0.0.1)
KTaglib_ID3v2_AttachedPictureFrame::getDescription — Returns a description for the picture in a picture frame
Returns the attached description for a picture frame in an ID3v2.x frame.
Returns a description for the picture in a picture frame
(0.2.0)
KTaglib_ID3v2_AttachedPictureFrame::getMimeType — Returns the mime type of the picture
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.
Returns the mime type of the image represented by the attached picture frame.
(0.2.0)
KTaglib_ID3v2_AttachedPictureFrame::getType — Returns the type of the image
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.
Returns the integer representation of the type.
(0.0.1)
KTaglib_ID3v2_AttachedPictureFrame::savePicture — Saves the picture to a file
$filename
)Saves the attached picture to the given filename.
Returns true on success, otherwise false
(0.2.0)
KTaglib_ID3v2_AttachedPictureFrame::setMimeType — Set's the mime type of the picture
Sets the mime type of the image. This should in most cases be "image/png" or "image/jpeg".
(0.0.1)
KTaglib_ID3v2_AttachedPictureFrame::setPicture — Sets the frame picture to the given image
$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.
Returns true on success, otherwise false
(0.2.0)
KTaglib_ID3v2_AttachedPictureFrame::setType — Set the type of the image
$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.
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.
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
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
Diese Erweiterung definiert keine Ressource-Typen.
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.
| 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. |
| 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') |
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($fp, 8192)) {
/* 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);
?>
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
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().
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)
ALC_REFRESH
(integer)
ALC_SYNC
(integer)
AL_FREQUENCY
(integer)
AL_BITS
(integer)
AL_CHANNELS
(integer)
AL_SIZE
(integer)
AL_BUFFER
(integer)
AL_SOURCE_RELATIVE
(integer)
AL_SOURCE_STATE
(integer)
AL_PITCH
(integer)
AL_GAIN
(integer)
AL_MIN_GAIN
(integer)
AL_MAX_GAIN
(integer)
AL_MAX_DISTANCE
(integer)
AL_ROLLOFF_FACTOR
(integer)
AL_CONE_OUTER_GAIN
(integer)
AL_CONE_INNER_ANGLE
(integer)
AL_CONE_OUTER_ANGLE
(integer)
AL_REFERENCE_DISTANCE
(integer)
AL_POSITION
(integer)
AL_VELOCITY
(integer)
AL_DIRECTION
(integer)
AL_ORIENTATION
(integer)
AL_FORMAT_MONO8
(integer)
AL_FORMAT_MONO16
(integer)
AL_FORMAT_STEREO8
(integer)
AL_FORMAT_STEREO16
(integer)
AL_INITIAL
(integer)
AL_PLAYING
(integer)
AL_PAUSED
(integer)
AL_STOPPED
(integer)
AL_LOOPING
(integer)
AL_TRUE
(integer)
AL_FALSE
(integer)
(PECL openal >= 0.1.0)
openal_buffer_create — Generate OpenAL buffer
Returns an Open AL(Buffer) resource on success or
FALSE on failure.
(PECL openal >= 0.1.0)
openal_buffer_data — Load a buffer with data
$buffer
, int $format
, string $data
, int $freq
)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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_buffer_destroy — Destroys an OpenAL buffer
$buffer
)buffer
An Open AL(Buffer) resource (previously created by openal_buffer_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_buffer_get — Retrieve an OpenAL buffer property
$buffer
, int $property
)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.
Returns an integer value appropriate to the property
requestedIm Fehlerfall wird FALSE zurückgegeben..
(PECL openal >= 0.1.0)
openal_buffer_loadwav — Load a .wav file into a buffer
$buffer
, string $wavfile
)buffer
An Open AL(Buffer) resource (previously created by openal_buffer_create()).
wavfile
Path to .wav file on local file system.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_context_create — Create an audio processing context
$device
)device
An Open AL(Device) resource (previously created by openal_device_open()).
Returns an Open AL(Context) resource on success or
FALSE on failure.
(PECL openal >= 0.1.0)
openal_context_current — Make the specified context current
$context
)context
An Open AL(Context) resource (previously created by openal_context_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_context_destroy — Destroys a context
$context
)context
An Open AL(Context) resource (previously created by openal_context_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_context_process — Process the specified context
$context
)context
An Open AL(Context) resource (previously created by openal_context_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_context_suspend — Suspend the specified context
$context
)context
An Open AL(Context) resource (previously created by openal_context_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_device_close — Close an OpenAL device
$device
)device
An Open AL(Device) resource (previously created by openal_device_open()) to be closed.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_device_open — Initialize the OpenAL audio layer
$device_desc
] )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.
Returns an Open AL(Device) resource on success or
FALSE on failure.
(PECL openal >= 0.1.0)
openal_listener_get — Retrieve a listener property
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)).
Returns a float or array of floats (as appropriate)Im Fehlerfall wird FALSE zurückgegeben..
(PECL openal >= 0.1.0)
openal_listener_set — Set a listener property
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_source_create — Generate a source resource
Returns an Open AL(Source) resource on success or
FALSE on failure.
(PECL openal >= 0.1.0)
openal_source_destroy — Destroy a source resource
$source
)source
An Open AL(Source) resource (previously created by openal_source_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_source_get — Retrieve an OpenAL source property
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)).
Returns the type associated with the property being retrieved
Im Fehlerfall wird FALSE zurückgegeben..
(PECL openal >= 0.1.0)
openal_source_pause — Pause the source
$source
)source
An Open AL(Source) resource (previously created by openal_source_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_source_play — Start playing the source
$source
)source
An Open AL(Source) resource (previously created by openal_source_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_source_rewind — Rewind the source
$source
)source
An Open AL(Source) resource (previously created by openal_source_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_source_set — Set source property
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_source_stop — Stop playing the source
$source
)source
An Open AL(Source) resource (previously created by openal_source_create()).
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL openal >= 0.1.0)
openal_stream — Begin streaming on a source
$source
, int $format
, int $rate
)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.
Returns a stream resource on successIm Fehlerfall wird FALSE zurückgegeben..
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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/kadm5.
Hinweis:
If this option is used 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.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
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.
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:
| 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 |
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:
| 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. |
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);
?>
(PECL kadm5 >= 0.2.3)
kadm5_chpass_principal — Changes the principal's password
$handle
, string $principal
, string $password
)
kadm5_chpass_principal() sets the new password
password for the principal.
handle
A KADM5 handle.
principal
The principal.
password
The new password.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
(PECL kadm5 >= 0.2.3)
kadm5_create_principal — Creates a kerberos principal with the given parameters
$handle
, string $principal
[, string $password
[, array $options
]] )
Creates a principal with the given
password.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
(PECL kadm5 >= 0.2.3)
kadm5_delete_principal — Deletes a kerberos principal
$handle
, string $principal
)
Removes the principal from the Kerberos database.
handle
A KADM5 handle.
principal
The removed principal.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
(PECL kadm5 >= 0.2.3)
kadm5_destroy — Closes the connection to the admin server and releases all related resources
$handle
)Closes the connection to the admin server and releases all related resources.
handle
A KADM5 handle.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL kadm5 >= 0.2.3)
kadm5_flush — Flush all changes to the Kerberos database
$handle
)Flush all changes to the Kerberos database, leaving the connection to the Kerberos admin server open.
handle
A KADM5 handle.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL kadm5 >= 0.2.3)
kadm5_get_policies — Gets all policies from the Kerberos database
$handle
)Gets an array containing the policies's names.
handle
A KADM5 handle.
Returns array of policies on successIm Fehlerfall wird FALSE zurückgegeben..
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);
?>
(PECL kadm5 >= 0.2.3)
kadm5_get_principal — Gets the principal's entries from the Kerberos database
$handle
, string $principal
)Gets the principal's entries from the Kerberos database.
handle
A KADM5 handle.
principal
The principal.
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 successIm Fehlerfall wird FALSE zurückgegeben..
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);
?>
(PECL kadm5 >= 0.2.3)
kadm5_get_principals — Gets all principals from the Kerberos database
$handle
)kadm5_get_principals() returns an array containing the principals's names.
handle
A KADM5 handle.
Returns array of principals on successIm Fehlerfall wird FALSE zurückgegeben..
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);
?>
(PECL kadm5 >= 0.2.3)
kadm5_init_with_password — Opens a connection to the KADM5 library
$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.
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.
Returns a KADM5 handle on successIm Fehlerfall wird FALSE zurückgegeben..
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);
?>
Hinweis:
Connection should be closed after use with kadm5_destroy().
(PECL kadm5 >= 0.2.3)
kadm5_modify_principal — Modifies a kerberos principal with the given parameters
$handle
, string $principal
, array $options
)
Modifies a principal according to the given
options.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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);
?>
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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/radius.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
Diese Erweiterung definiert keine Ressource-Typen.
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
()
RADIUS_ACCESS_ACCEPT
()
RADIUS_ACCESS_REJECT
()
RADIUS_ACCOUNTING_REQUEST
()
RADIUS_ACCOUNTING_RESPONSE
()
RADIUS_ACCESS_CHALLENGE
()
RADIUS_USER_NAME
(string)
RADIUS_USER_PASSWORD
(string)
RADIUS_CHAP_PASSWORD
(string)
RADIUS_NAS_IP_ADDRESS
(string)
RADIUS_NAS_PORT
(int)
RADIUS_SERVICE_TYPE
(int)
Type of Service, one of:
RADIUS_LOGINRADIUS_FRAMEDRADIUS_CALLBACK_LOGINRADIUS_CALLBACK_FRAMEDRADIUS_OUTBOUNDRADIUS_ADMINISTRATIVERADIUS_NAS_PROMPTRADIUS_AUTHENTICATE_ONLYRADIUS_CALLBACK_NAS_PROMPTRADIUS_FRAMED_PROTOCOL
(int)
Framed Protocol, one of:
RADIUS_PPPRADIUS_SLIPRADIUS_ARAPRADIUS_GANDALFRADIUS_XYLOGICSRADIUS_FRAMED_IP_ADDRESS
(int)
RADIUS_FRAMED_IP_NETMASK
(string)
RADIUS_FRAMED_ROUTING
(int)
RADIUS_FILTER_ID
(string)
RADIUS_FRAMED_MTU
(int)
RADIUS_FRAMED_COMPRESSION
(int)
Compression, one of:
RADIUS_COMP_NONERADIUS_COMP_VJRADIUS_COMP_IPXHDRRADIUS_LOGIN_IP_HOST
(string)
RADIUS_LOGIN_SERVICE
(int)
RADIUS_LOGIN_TCP_PORT
(int)
RADIUS_REPLY_MESSAGE
(string)
RADIUS_CALLBACK_NUMBER
(string)
RADIUS_CALLBACK_ID
(string)
RADIUS_FRAMED_ROUTE
(string)
RADIUS_FRAMED_IPX_NETWORK
(string)
RADIUS_STATE
(string)
RADIUS_CLASS
(int)
RADIUS_VENDOR_SPECIFIC
(int)
RADIUS_SESSION_TIMEOUT
(int)
RADIUS_IDLE_TIMEOUT
(int)
RADIUS_TERMINATION_ACTION
(int)
RADIUS_CALLED_STATION_ID
(int)
RADIUS_CALLING_STATION_ID
(string)
RADIUS_NAS_IDENTIFIER
(int)
RADIUS_PROXY_STATE
(int)
RADIUS_LOGIN_LAT_SERVICE
(int)
RADIUS_LOGIN_LAT_NODE
(int)
RADIUS_LOGIN_LAT_GROUP
(int)
RADIUS_FRAMED_APPLETALK_LINK
(int)
RADIUS_FRAMED_APPLETALK_NETWORK
(int)
RADIUS_FRAMED_APPLETALK_ZONE
(int)
RADIUS_CHAP_CHALLENGE
(string)
RADIUS_NAS_PORT_TYPE
(int)
NAS port type, one of:
RADIUS_ASYNCRADIUS_SYNCRADIUS_ISDN_SYNCRADIUS_ISDN_ASYNC_V120RADIUS_ISDN_ASYNC_V110RADIUS_VIRTUALRADIUS_PIAFSRADIUS_HDLC_CLEAR_CHANNELRADIUS_X_25RADIUS_X_75RADIUS_G_3_FAXRADIUS_SDSLRADIUS_ADSL_CAPRADIUS_ADSL_DMTRADIUS_IDSLRADIUS_ETHERNETRADIUS_XDSLRADIUS_CABLERADIUS_WIRELESS_OTHERRADIUS_WIRELESS_IEEE_802_11RADIUS_PORT_LIMIT
(int)
RADIUS_LOGIN_LAT_PORT
(int)
RADIUS_CONNECT_INFO
(string)
RADIUS_ACCT_STATUS_TYPE
(int)
Accounting status type, one of:
RADIUS_STARTRADIUS_STOPRADIUS_ACCOUNTING_ONRADIUS_ACCOUNTING_OFFRADIUS_ACCT_DELAY_TIME
(int)
RADIUS_ACCT_INPUT_OCTETS
(int)
RADIUS_ACCT_OUTPUT_OCTETS
(int)
RADIUS_ACCT_SESSION_ID
(int)
RADIUS_ACCT_AUTHENTIC
(int)
Accounting authentic, one of:
RADIUS_AUTH_RADIUSRADIUS_AUTH_LOCALRADIUS_AUTH_REMOTERADIUS_ACCT_SESSION_TIME
(int)
RADIUS_ACCT_INPUT_PACKETS
(int)
RADIUS_ACCT_OUTPUT_PACKETS
(int)
RADIUS_ACCT_TERMINATE_CAUSE
(int)
Accounting terminate cause, one of:
RADIUS_TERM_USER_REQUESTRADIUS_TERM_LOST_CARRIERRADIUS_TERM_LOST_SERVICERADIUS_TERM_IDLE_TIMEOUTRADIUS_TERM_SESSION_TIMEOUTRADIUS_TERM_ADMIN_RESETRADIUS_TERM_ADMIN_REBOOTRADIUS_TERM_PORT_ERRORRADIUS_TERM_NAS_ERRORRADIUS_TERM_NAS_REQUESTRADIUS_TERM_NAS_REBOOTRADIUS_TERM_PORT_UNNEEDEDRADIUS_TERM_PORT_PREEMPTEDRADIUS_TERM_PORT_SUSPENDEDRADIUS_TERM_SERVICE_UNAVAILABLERADIUS_TERM_CALLBACKRADIUS_TERM_USER_ERRORRADIUS_TERM_HOST_REQUESTRADIUS_ACCT_MULTI_SESSION_ID
(string)
RADIUS_ACCT_LINK_COUNT
(int)
RADIUS_VENDOR_MICROSOFT
(int)
Microsoft specific vendor attributes (» RFC 2548), one of:
RADIUS_MICROSOFT_MS_CHAP_RESPONSERADIUS_MICROSOFT_MS_CHAP_ERRORRADIUS_MICROSOFT_MS_CHAP_PW_1RADIUS_MICROSOFT_MS_CHAP_PW_2RADIUS_MICROSOFT_MS_CHAP_LM_ENC_PWRADIUS_MICROSOFT_MS_CHAP_NT_ENC_PWRADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICYRADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPESRADIUS_MICROSOFT_MS_RAS_VENDORRADIUS_MICROSOFT_MS_CHAP_DOMAINRADIUS_MICROSOFT_MS_CHAP_CHALLENGERADIUS_MICROSOFT_MS_CHAP_MPPE_KEYSRADIUS_MICROSOFT_MS_BAP_USAGERADIUS_MICROSOFT_MS_LINK_UTILIZATION_THRESHOLDRADIUS_MICROSOFT_MS_LINK_DROP_TIME_LIMITRADIUS_MICROSOFT_MS_MPPE_SEND_KEYRADIUS_MICROSOFT_MS_MPPE_RECV_KEYRADIUS_MICROSOFT_MS_RAS_VERSIONRADIUS_MICROSOFT_MS_OLD_ARAP_PASSWORDRADIUS_MICROSOFT_MS_NEW_ARAP_PASSWORDRADIUS_MICROSOFT_MS_ARAP_PASSWORD_CHANGE_REASONRADIUS_MICROSOFT_MS_FILTERRADIUS_MICROSOFT_MS_ACCT_AUTH_TYPERADIUS_MICROSOFT_MS_ACCT_EAP_TYPERADIUS_MICROSOFT_MS_CHAP2_RESPONSERADIUS_MICROSOFT_MS_CHAP2_SUCCESSRADIUS_MICROSOFT_MS_CHAP2_PWRADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVERRADIUS_MICROSOFT_MS_SECONDARY_DNS_SERVERRADIUS_MICROSOFT_MS_PRIMARY_NBNS_SERVERRADIUS_MICROSOFT_MS_SECONDARY_NBNS_SERVERRADIUS_MICROSOFT_MS_ARAP_CHALLENGEHowto start?
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.
If you have comments, bugfixes, enhancements or want to help to develop this you can send me a mail at » mbretter@php.net.
(PECL radius >= 1.1.0)
radius_acct_open — Creates a Radius handle for accounting
Returns a handle on success, FALSE on error. This function only fails if
insufficient memory is available.
Beispiel #1 radius_acct_open() example
<?php
$res = radius_acct_open ()
or die ("Could not create handle");
print("Handle successfully created");
?>
(PECL radius >= 1.1.0)
radius_add_server — Adds a server
$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.
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 radius_add_server() example
<?php
if (!radius_add_server($res, 'radius.example.com', 1812, 'testing123', 3, 3)) {
echo 'RadiusError:' . radius_strerror($res). "\n<br>";
exit;
}
?>
(PECL radius >= 1.1.0)
radius_auth_open — Creates a Radius handle for authentication
Returns a handle on success, FALSE on error. This function only fails if
insufficient memory is available.
Beispiel #1 radius_auth_open() example
<?php
$radh = radius_auth_open()
or die ("Could not create handle");
echo "Handle successfully created";
?>
(PECL radius >= 1.1.0)
radius_close — Frees all ressources
$radius_handle
)It is not needed to call this function because php frees all resources at the end of each request.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL radius >= 1.1.0)
radius_config — Causes the library to read the given configuration file
$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.
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().
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL radius >= 1.1.0)
radius_create_request — Create accounting or authentication request
$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!
radius_handle
type
Type is RADIUS_ACCESS_REQUEST or
RADIUS_ACCOUNTING_REQUEST.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 radius_create_request() example
<?php
if (!radius_create_request($res, RADIUS_ACCESS_REQUEST)) {
echo 'RadiusError:' . radius_strerror($res). "\n<br />";
exit;
}
?>
(PECL radius >= 1.1.0)
radius_cvt_addr — Converts raw data to IP-Address
$data
)
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;
}
}
?>
(PECL radius >= 1.1.0)
radius_cvt_int — Converts raw data to integer
$data
)
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;
}
}
?>
(PECL radius >= 1.1.0)
radius_cvt_string — Converts raw data to string
$data
)
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;
}
}
?>
(PECL radius >= 1.2.0)
radius_demangle_mppe_key — Derives mppe-keys from mangled data
$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.
Returns the demangled string, or FALSE on error.
(PECL radius >= 1.2.0)
radius_demangle — Demangles data
$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.
Returns the demangled string, or FALSE on error.
(PECL radius >= 1.1.0)
radius_get_attr — Extracts an attribute
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.
Returns an associative array containing the attribute-type and the data, or error number <= 0.
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", $attr, strlen($data), bin2hex($data));
}
?>
(PECL radius >= 1.1.0)
radius_get_vendor_attr — Extracts a vendor specific attribute
$data
)
If radius_get_attr() returns
RADIUS_VENDOR_SPECIFIC,
radius_get_vendor_attr() may be called to determine the
vendor.
Returns an associative array containing the attribute-type, vendor and the
data, or FALSE on error.
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", $attr, strlen($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", $attrv, strlen($datav), bin2hex($datav));
}
}
}
?>
(PECL radius >= 1.1.0)
radius_put_addr — Attaches an IP-Address attribute
$radius_handle
, int $type
, string $addr
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL radius >= 1.1.0)
radius_put_attr — Attaches a binary attribute
$radius_handle
, int $type
, string $value
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 radius_put_attr() example
<?php
mt_srand(time());
$chall = mt_rand();
$chapval = md5(pack('Ca*',1 , 'sepp' . $chall));
$pass = pack('CH*', 1, $chapval);
if (!radius_put_attr($res, RADIUS_CHAP_PASSWORD, $pass)) {
echo 'RadiusError:' . radius_strerror($res). "\n<br />";
exit;
}
?>
(PECL radius >= 1.1.0)
radius_put_int — Attaches an integer attribute
$radius_handle
, int $type
, int $value
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 radius_put_int() example
<?php
if (!radius_put_int($res, RAD_FRAMED_PROTOCOL, RAD_PPP)) {
echo 'RadiusError:' . radius_strerror($res). "\n<br />";
exit;
}
?>
(PECL radius >= 1.1.0)
radius_put_string — Attaches a string attribute
$radius_handle
, int $type
, string $value
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 radius_put_string() example
<?php
if (!radius_put_string($res, RADIUS_USER_NAME, 'billy')) {
echo 'RadiusError:' . radius_strerror($res). "\n<br />";
exit;
}
?>
(PECL radius >= 1.1.0)
radius_put_vendor_addr — Attaches a vendor specific IP-Address attribute
$radius_handle
, int $vendor
, int $type
, string $addr
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL radius >= 1.1.0)
radius_put_vendor_attr — Attaches a vendor specific binary attribute
$radius_handle
, int $vendor
, int $type
, string $value
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 radius_put_vendor_attr() example
<?php
if (!radius_put_vendor_attr($res, RADIUS_VENDOR_MICROSOFT, RAD_MICROSOFT_MS_CHAP_CHALLENGE, $challenge)) {
echo 'RadiusError:' . radius_strerror($res). "\n<br />";
exit;
}
?>
(PECL radius >= 1.1.0)
radius_put_vendor_int — Attaches a vendor specific integer attribute
$radius_handle
, int $vendor
, int $type
, int $value
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL radius >= 1.1.0)
radius_put_vendor_string — Attaches a vendor specific string attribute
$radius_handle
, int $vendor
, int $type
, string $value
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PECL radius >= 1.1.0)
radius_request_authenticator — Returns the request authenticator
$radius_handle
)The request authenticator is needed for demangling mangled data like passwords and encryption-keys.
Returns the request authenticator as string, or FALSE on error.
(PECL radius >= 1.1.0)
radius_send_request — Sends the request and waites for a reply
$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.
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.
(PECL radius >= 1.1.0)
radius_server_secret — Returns the shared secret
$radius_handle
)The shared secret is needed as salt for demangling mangled data like passwords and encryption-keys.
Returns the server's shared secret as string, or FALSE on error.
(PECL radius >= 1.1.0)
radius_strerror — Returns an error message
$radius_handle
)If Radius-functions fail then they record an error message. This error message can be retrieved with this function.
Returns error messages as string from failed radius functions.
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
Diese Erweiterung definiert keine Ressource-Typen.
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:
(PHP 4 >= 4.1.0, PHP 5)
cal_days_in_month — Gibt die Anzahl der Tage eines bestimmten Monats in einem bestimmten Jahr in einem bestimmten Kalender zurück
$calendar
, int $month
, int $year
)
Diese Funktion gibt die Anzahl der Tage in einem
Monat eines Jahres für den
angegebenen Kalender zurück.
calendar
Der zu benutzende Kalender
month
Der Monat im gewünschten Kalender
year
Das Jahr im gewünschten Kalender
Die Länge des Monats im gewünschten Kalender in Tagen
Beispiel #1 cal_days_in_month() Beispiel
<?php
$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
echo "August 2003 hatte $num Tage";
?>
(PHP 4 >= 4.1.0, PHP 5)
cal_from_jd — Converts from Julian Day Count to a supported calendar
$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.
jd
Julian day as integer
calendar
Calendar to convert to
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".
Beispiel #1 cal_from_jd() example
<?php
$today = unixtojd(mktime(0, 0, 0, 8, 16, 2003));
print_r(cal_from_jd($today, CAL_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
)
(PHP 4 >= 4.1.0, PHP 5)
cal_info — Gibt Informationen zu einem bestimmten Kalender zurück
$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:
CAL_GREGORIAN - Gregorianischer Kalender
CAL_JULIAN - Julianischer Kalender
CAL_JEWISH - Jüdischer Kalender
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.
calendar
Der Kalender für den Informationen zurückgegeben werden sollen. Wird kein Kalender angegeben so werden Informationen für alle Kalender zurckgegeben.
| Version | Beschreibung |
|---|---|
| 5.0.0 |
Der Parameter calendar ist nun optionl
und es werden Informationen zu allen Kalendern zurückgegeben
wenn kein Wert übergeben wird.
|
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
)
(PHP 4 >= 4.1.0, PHP 5)
cal_to_jd — Converts from a supported calendar to Julian Day Count
$calendar
, int $month
, int $day
, int $year
)
cal_to_jd() calculates the Julian day count
for a date in the specified calendar.
Supported calendars are
CAL_GREGORIAN,
CAL_JULIAN,
CAL_JEWISH and
CAL_FRENCH.
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
A Julian Day number.
(PHP 4, PHP 5)
easter_date — Zeitpunkt des Osterfestes (0 Uhr) als Unix-Timestamp
$year
] )
Diese Funktion liefert den Unix-Timestamp (in Sekunden seit 1970)
zurück, der dem Begin des Ostersonntag im durch
year spezifizierten Jahr entspricht.
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.
year
Das Jahr als Zahl zwischen 1970 und 2037
Das Osterdatum als Unix Timestamp.
| 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.
|
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
?>
(PHP 4, PHP 5)
easter_days — Anzahl der Tage zwischen dem 21. März und Ostersonntag
$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.
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.
Die Anzahl der Tage die der Ostersonntag im gegebenen Jahr hinter dem 21ten März liegt.
| 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.
|
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
?>
(PHP 4, PHP 5)
frenchtojd — Konvertiert ein Datum der Französischen Revolution zu einem Julianischen Datum
$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.
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
Der Julianische Tag für das übergebene Französische Revolutionsdatum als Integer.
(PHP 4, PHP 5)
gregoriantojd — Konvertierung vom Gregorianischen Kalender zum Julianischen Datum
$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.
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
Der Julianische Tag für das gegebene Gregorianische Datum als Integer.
Beispiel #1 Caledar Funktionen
<?php
$jd = GregorianToJD(10, 11, 1970);
echo "$jd\n";
$gregorian = JDToGregorian($jd);
echo "$gregorian\n";
?>
(PHP 4, PHP 5)
jddayofweek — Bestimmt den Wochentag aus einem Julianischen Datum
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.
julianday
Ein Julianischer Tag als Integer
mode
| 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) |
Der Gregorianische Wochentag als Integer oder String.
(PHP 4, PHP 5)
jdmonthname — Bestimmt den Monat aus dem Julianischen Datum
$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.
| Modus | Bedeutung | Werte |
|---|---|---|
| 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 |
jday
Ein Julianischer Tag als Integer
calendar
Der zu verwendende Kalender
Der Monatsname für den gegebenen Julianischen Tag im
gewünschten calendar
(PHP 4, PHP 5)
jdtofrench — Konvertiert ein Julianisches Datum zum Kalender der Französischen Revolution
$juliandaycount
)Konvertiert ein Julianisches Datum zum Kalender der Französischen Revolution
julianday
Ein Julianischer Tag als Integer
Ein Französisches Revolutionsdatum als String in der Form "Monat/Tag/Yahr"
(PHP 4, PHP 5)
jdtogregorian — Konvertierung vom Julianischen Datum zum Gregorianischen Kalender
$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.
julianday
Ein Julianischer Tag als Integer
Ein Gregorianisches Datum als String der Form "Monat/Tag/Jahr"
(PHP 4, PHP 5)
jdtojewish — Konvertierung vom Julianischen Datum zum Jüdischen Kalender
$juliandaycount
[, bool $hebrew = false
[, int $fl = 0
]] )
Diese Funktion konvertiert den in
julianday angegebenen Tag im Julianischen
Datum in den Jüdischen Kalender.
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.
Das Jüdische Datum als String in der Form "Monat/Tag/Jahr"
| Version | Beschreibung |
|---|---|
| 5.0.0 |
Der Parameter fl wurde hinzugefügt.
|
| 5.0.0 |
Der Parameter hebrew wurde hinzugefügt.
|
Beispiel #1 jdtojewish()-Beispiel
<?php
echo jdtojewish(gregoriantojd(10, 8, 2002), true,
CAL_JEWISH_ADD_GERESHAYIM + CAL_JEWISH_ADD_ALAFIM + CAL_JEWISH_ADD_ALAFIM_GERESH);
?>
(PHP 4, PHP 5)
jdtojulian — Konvertierung vom Julianischen Datum zum Julianischen Kalender
$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.
julianday
Ein Julianischer Tag als Integer
Ein Julianisches Datum als String in der Form Monat/Tag/Jahr
(PHP 4, PHP 5)
jdtounix — Konvertiert Julianisches Datum in Unix-Timestamp
$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.
jday
Ein Julianischer Tag zwischen 2440588 and 2465342.
Der Unix-Timestamp für den Anfang des gegebenen Julianischen Tages.
(PHP 4, PHP 5)
jewishtojd — Konvertiert vom Jüdischen Kalender zum Julianischen Datum
$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.
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
Der Julianische Tag für das gegebene Jüdische Datum als Integer.
(PHP 4, PHP 5)
juliantojd — Konvertierung vom Julianischen Kalender zum Julianischen Datum
$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, dass der weltweit genutzte Kalender der Gregorianische und nicht der Julianische Kalender ist. Für diesen Kalender kann die Funktion gregoriantojd() genutzt werden.
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
Der Julianische Tag für das angegebene Julianische Datum als Integer.
(PHP 4, PHP 5)
unixtojd — Konvertiert Unix-Timestamp in Julianisches Datum
$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.
timestamp
Ein zu konvertierender Unix Timestamp.
Ein Julianischer Tag als Integer.
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.
Die Datums und Zeit Information wird intern in einem 64-Bit Integer gespeichert, also werden alle vorstellbaren Daten unterstützt (unter anderem negative Jahre). Der darstellbare Bereich liegt zwischen etwa bei 292 Milliarden Jahren in die Vergangenheit und genauso viel in die Zukunft.
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.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| 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. |
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.
Diese Erweiterung definiert keine Ressource-Typen.
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().
(PHP 5 >= 5.2.0)
Representation of date and time.
$format
, string $time
[, DateTimeZone $timezone
] )DateTime::ATOM
DATE_ATOM
DateTime::ISO8601
DATE_ISO8601
DateTime::RFC822
DATE_RFC822
DateTime::RFC850
DATE_RFC850
DateTime::RFC1036
DATE_RFC1036
DateTime::RFC1123
DATE_RFC1123
DateTime::RFC2822
DATE_RFC2822
DateTime::RFC3339
DATE_RFC3339
DATE_ATOM (since PHP 5.1.3)
DateTime::RSS
DATE_RSS
DateTime::W3C
DATE_W3C
| Version | Beschreibung |
|---|---|
| 5.2.2 | DateTime object comparison with the comparison operators changed to work as expected. Previously, all DateTime objects were considered equal (using ==). |
(PHP 5 >= 5.3.0)
DateTime::add -- date_add — Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object
Objektorientierter Stil
Prozeduraler Stil
Adds the specified DateInterval object to the specified DateTime object.
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.
interval
A DateInterval object
Gibt das DateTime-Objekt
für die Verkettung von Methoden zurück Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 DateTime::add() example
Objektorientierter Stil
<?php
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d') . "\n";
?>
Prozeduraler Stil
<?php
$date = date_create('2000-01-01');
date_add($date, date_interval_create_from_date_string('10 days'));
echo date_format($date, 'Y-m-d');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
2000-01-11
Beispiel #2 Further DateTime::add() examples
<?php
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('PT10H30S'));
echo $date->format('Y-m-d H:i:s') . "\n";
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P7Y5M4DT4H3M2S'));
echo $date->format('Y-m-d H:i:s') . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2000-01-01 10:00:30 2007-06-05 04:03:02
Beispiel #3 Beware when adding months
<?php
$date = new DateTime('2000-12-31');
$interval = new DateInterval('P1M');
$date->add($interval);
echo $date->format('Y-m-d') . "\n";
$date->add($interval);
echo $date->format('Y-m-d') . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2001-01-31 2001-03-03
DateTime::modify() is an alternative when using PHP 5.2.
(PHP 5 >= 5.2.0)
DateTime::__construct -- date_create — Returns new DateTime object
Objektorientierter Stil
Prozeduraler Stil
Returns new DateTime object.
time
Ein Datums/Zeit Zeichenkette. Gültige Formate werden unter Datums- und Zeitformate erläutert.
Enter NULL here to obtain the current time when using
the $timezone parameter.
timezone
A DateTimeZone object representing the desired time zone.
If $timezone is omitted,
the current timezone will be used.
Hinweis:
The
$timezoneparameter and the current timezone are ignored when the$timeparameter either is a UNIX timestamp (e.g. @946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).
Returns a new DateTime instance.
Prozeduraler Stil Im Fehlerfall wird FALSE zurückgegeben.
Emits Exception in case of an error.
| Version | Beschreibung |
|---|---|
| 5.3.0 | If an invalid date is specified, then an exception is now thrown. Previously an error was emitted. |
Beispiel #1 DateTime::__construct() example
Objektorientierter Stil
<?php
try {
$date = new DateTime('2000-01-01');
} catch (Exception $e) {
echo $e->getMessage();
exit(1);
}
echo $date->format('Y-m-d');
?>
Prozeduraler Stil
<?php
$date = date_create('2000-01-01');
if (!$date) {
$e = date_get_last_errors();
foreach ($e['errors'] as $error) {
echo "$error\n";
}
exit(1);
}
echo date_format($date, 'Y-m-d');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
2000-01-01
Beispiel #2 Intricacies of DateTime::__construct()
<?php
// Specified date/time in your computer's time zone.
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:sP') . "\n";
// Specified date/time in the specified time zone.
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
// Current date/time in your computer's time zone.
$date = new DateTime();
echo $date->format('Y-m-d H:i:sP') . "\n";
// Current date/time in the specified time zone.
$date = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
// Using a UNIX timestamp. Notice the result is in the UTC time zone.
$date = new DateTime('@946684800');
echo $date->format('Y-m-d H:i:sP') . "\n";
// Non-existent values roll over.
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
2000-01-01 00:00:00-05:00 2000-01-01 00:00:00+12:00 2010-04-24 10:24:16-04:00 2010-04-25 02:24:16+12:00 2000-01-01 00:00:00+00:00 2000-03-01 00:00:00-05:00
(PHP 5 >= 5.3.0)
DateTime::createFromFormat -- date_create_from_format — Returns new DateTime object formatted according to the specified format
Objektorientierter Stil
$format
, string $time
[, DateTimeZone $timezone
] )Prozeduraler Stil
Returns new DateTime object formatted according to the specified format.
format
The format that the passed in string should be in. See the formatting options below. In most cases, the same letters as for the date() can be used.
format character |
Description | Example parsable values |
|---|---|---|
| Day | --- | --- |
| d and j | Day of the month, 2 digits with or without leading zeros | 01 to 31 or 1 to 31 |
| D and l | A textual representation of a day | Mon through Sun or Sunday through Saturday |
| S | English ordinal suffix for the day of the month, 2 characters. It's ignored while processing. | st, nd, rd or th. |
| z | The day of the year (starting from 0) | 0 through 365 |
| Month | --- | --- |
| F and M | A textual representation of a month, such as January or Sept | January through December or Jan through Dec |
| m and n | Numeric representation of a month, with or without leading zeros | 01 through 12 or 1 through 12 |
| Year | --- | --- |
| Y | A full numeric representation of a year, 4 digits | Examples: 1999 or 2003 |
| y | A two digit representation of a year | Examples: 99 or 03 |
| Time | --- | --- |
| a and A | Ante meridiem and Post meridiem | am or pm |
| g and h | 12-hour format of an hour with or without leading zero | 1 through 12 or 01 through 12 |
| G and H | 24-hour format of an hour with or without leading zeros | 0 through 23 or 00 through 23 |
| i | Minutes with leading zeros | 00 to 59 |
| s | Seconds, with leading zeros | 00 through 59 |
| u | Microseconds (up to six digits) | Example: 45, 654321 |
| Timezone | --- | --- |
| e, O, P and T | Timezone identifier, or difference to UTC in hours, or difference to UTC with colon between hours and minutes, or timezone abbreviation | Examples: UTC, GMT, Atlantic/Azores or +0200 or +02:00 or EST, MDT |
| Full Date/Time | --- | --- |
| U | Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) | Example: 1292177455 |
| Whitespace and Separators | --- | --- |
| (space) | One space or one tab | Example: |
| # | One of the following separation symbol: ;, :, /, ., ,, -, ( or ) | Example: / |
| ;, :, /, ., ,, -, ( or ) | The specified character. | Example: - |
| ? | A random byte | Example: ^ (Be aware that for UTF-8 characracters you might need more than one ?. In this case, using * is probably what you want instead) |
| * | Random bytes until the next separator or digit | Example: * in Y-*-d with the string 2009-aWord-08 will match aWord |
| ! | Resets all fields (year, month, day, hour, minute, second, fraction and timzone information) to the Unix Epoch | Without !, all fields will be set to the current date and time. |
| | | Resets all fields (year, month, day, hour, minute, second, fraction and timzone information) to the Unix Epoch if they have not been parsed yet | Y-m-d| will set the year, month and day to the information found in the string to parse, and sets the hour, minute and second to 0. |
| + | If this format specifier is present, trailing data in the string will not cause an error, but a warning instead | Use DateTime::getLastErrors() to find out whether trailing data was present. |
Unrecognized characters in the format string will cause the parsing to fail and an error message is appended to the returned structure. You can query error messages with DateTime::getLastErrors().
If format does not contain the character
! then portions of the generated time which are not
specified in format will be set to the current
system time.
If format contains the
character !, then portions of the generated
time not provided in format, as well as
values to the left-hand side of the !, will
be set to corresponding values from the Unix epoch.
The Unix epoch is 1970-01-01 00:00:00 UTC.
time
String representing the time.
timezone
A DateTimeZone object representing the desired time zone.
If timezone is omitted and
time contains no timezone,
the current timezone will be used.
Hinweis:
The
timezoneparameter and the current timezone are ignored when thetimeparameter either contains a UNIX timestamp (e.g. 946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).
Returns a new DateTime instanceIm Fehlerfall wird FALSE zurückgegeben..
Beispiel #1 DateTime::createFromFormat() example
Objektorientierter Stil
<?php
$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');
?>
Prozeduraler Stil
<?php
$date = date_create_from_format('j-M-Y', '15-Feb-2009');
echo date_format($date, 'Y-m-d');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
2009-02-15
Beispiel #2 Intricacies of DateTime::createFromFormat()
<?php
echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = '!d';
$date = DateTime::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Current time: 2010-04-23 10:29:35 Format: Y-m-d; 2009-02-15 10:29:35 Format: Y-m-d H:i:s; 2009-02-15 15:16:17 Format: Y-m-!d H:i:s; 1970-01-15 15:16:17 Format: !d; 1970-01-15 00:00:00
(PHP 5 >= 5.3.0)
DateTime::diff -- date_diff — Returns the difference between two DateTime objects
Objektorientierter Stil
Prozeduraler Stil
Returns the difference between two DateTime objects.
datetime
The date to compare to.
absolute
Whether to return absolute difference.
The DateInterval object representing the
difference between the two datesIm Fehlerfall wird FALSE zurückgegeben..
Beispiel #1 DateTime::diff() example
Objektorientierter Stil
<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>
Prozeduraler Stil
<?php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
+2 days
Beispiel #2 DateTime object comparison
Hinweis:
As of PHP 5.2.2, DateTime objects can be compared using comparison operators.
<?php
$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");
var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true) bool(false)
(PHP 5 >= 5.2.0)
DateTime::format -- date_format — Returns date formatted according to given format
Objektorientierter Stil
$format
)Prozeduraler Stil
Returns date formatted according to given format.
objectNur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.
format
Format accepted by date().
Returns the formatted date string on successIm Fehlerfall wird FALSE zurückgegeben..
Beispiel #1 DateTime::format() example
Objektorientierter Stil
<?php
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:s');
?>
Prozeduraler Stil
<?php
$date = date_create('2000-01-01');
echo date_format($date, 'Y-m-d H:i:s');
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2000-01-01 00:00:00
This method does not use locales. All output is in English.
(PHP 5 >= 5.3.0)
DateTime::getLastErrors -- date_get_last_errors — Returns the warnings and errors
Objektorientierter Stil
Prozeduraler Stil
Returns an array of warnings and errors found while parsing a date/time string.
Diese Funktion hat keine Parameter.
Returns array containing info about warnings and errors.
Beispiel #1 DateTime::getLastErrors() example
Objektorientierter Stil
<?php
try {
$date = new DateTime('asdfasdf');
} catch (Exception $e) {
// For demonstration purposes only...
print_r(DateTime::getLastErrors());
// The real object oriented way to do this is
// echo $e->getMessage();
}
?>
Prozeduraler Stil
<?php
$date = date_create('asdfasdf');
print_r(date_get_last_errors());
?>
Die obigen Bespiele erzeugen 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
)
)
(PHP 5 >= 5.2.0)
DateTime::getOffset -- date_offset_get — Returns the timezone offset
Objektorientierter Stil
Prozeduraler Stil
Returns the timezone offset.
objectNur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.
Returns the timezone offset in seconds from UTC on success
Im Fehlerfall wird FALSE zurückgegeben..
Beispiel #1 DateTime::getOffset() example
Objektorientierter Stil
<?php
$winter = new DateTime('2010-12-21', new DateTimeZone('America/New_York'));
$summer = new DateTime('2008-06-21', new DateTimeZone('America/New_York'));
echo $winter->getOffset() . "\n";
echo $summer->getOffset() . "\n";
?>
Prozeduraler Stil
<?php
$winter = date_create('2010-12-21', timezone_open('America/New_York'));
$summer = date_create('2008-06-21', timezone_open('America/New_York'));
echo date_offset_get($winter) . "\n";
echo date_offset_get($summer) . "\n";
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
-18000 -14400
Note: -18000 = -5 hours, -14400 = -4 hours.
(PHP 5 >= 5.3.0)
DateTime::getTimestamp -- date_timestamp_get — Gets the Unix timestamp
Objektorientierter Stil
Prozeduraler Stil
Gets the Unix timestamp.
Diese Funktion hat keine Parameter.
Returns the Unix timestamp representing the date.
Beispiel #1 DateTime::getTimestamp() example
Objektorientierter Stil
<?php
$date = new DateTime();
echo $date->getTimestamp();
?>
Prozeduraler Stil
<?php
$date = date_create();
echo date_timestamp_get($date);
?>
Oben gezeigte Beispiele erzeugen eine ähnliche Ausgabe wie:
1272509157
Using U as the parameter to DateTime::format() is an alternative when using PHP 5.2.
(PHP 5 >= 5.2.0)
DateTime::getTimezone -- date_timezone_get — Return time zone relative to given DateTime
Objektorientierter Stil
Prozeduraler Stil
Return time zone relative to given DateTime.
objectNur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTime Objekt.
Returns a DateTimeZone object on success
Im Fehlerfall wird FALSE zurückgegeben..
Beispiel #1 DateTime::getTimezone() example
Objektorientierter Stil
<?php
$date = new DateTime(null, new DateTimeZone('Europe/London'));
$tz = $date->getTimezone();
echo $tz->getName();
?>
Prozeduraler Stil
<?php
$date = date_create(null, timezone_open('Europe/London'));
$tz = date_timezone_get($date);
echo timezone_name_get($tz);
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
Europe/London
(PHP 5 >= 5.2.0)
DateTime::modify -- date_modify — Alters the timestamp
Objektorientierter Stil
Prozeduraler Stil
Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime().
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.
modify
Ein Datums/Zeit Zeichenkette. Gültige Formate werden unter Datums- und Zeitformate erläutert.
Gibt das DateTime-Objekt
für die Verkettung von Methoden zurück Im Fehlerfall wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 5.3.6 | Absolute date/time statements now take effect. Previously, only relative parts were used. |
| 5.3.0 | Der
Rückgabewert bei Erfolg wurde von NULL auf DateTime
geändert. |
Beispiel #1 DateTime::modify() example
Objektorientierter Stil
<?php
$date = new DateTime('2006-12-12');
$date->modify('+1 day');
echo $date->format('Y-m-d');
?>
Prozeduraler Stil
<?php
$date = date_create('2006-12-12');
date_modify($date, '+1 day');
echo date_format($date, 'Y-m-d');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
2006-12-13
Beispiel #2 Beware when adding or subtracting months
<?php
$date = new DateTime('2000-12-31');
$date->modify('+1 month');
echo $date->format('Y-m-d') . "\n";
$date->modify('+1 month');
echo $date->format('Y-m-d') . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2001-01-31 2001-03-03
(PHP 5 >= 5.2.0)
DateTime::__set_state — The __set_state handler
The __set_state() handler.
array
Initialization array.
Returns a new instance of a DateTime object.
(PHP 5 >= 5.2.0)
DateTime::setDate -- date_date_set — Sets the date
Objektorientierter Stil
Prozeduraler Stil
Resets the current date of the DateTime object to a different date.
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.
year
Year of the date.
month
Month of the date.
day
Day of the date.
Gibt das DateTime-Objekt
für die Verkettung von Methoden zurück Im Fehlerfall wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 5.3.0 | Der
Rückgabewert bei Erfolg wurde von NULL auf DateTime
geändert. |
Beispiel #1 DateTime::setDate() example
Objektorientierter Stil
<?php
$date = new DateTime();
$date->setDate(2001, 2, 3);
echo $date->format('Y-m-d');
?>
Prozeduraler Stil
<?php
$date = date_create();
date_date_set($date, 2001, 2, 3);
echo date_format($date, 'Y-m-d');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
2001-02-03
Beispiel #2 Values exceeding ranges are added to their parent values
<?php
$date = new DateTime();
$date->setDate(2001, 2, 28);
echo $date->format('Y-m-d') . "\n";
$date->setDate(2001, 2, 29);
echo $date->format('Y-m-d') . "\n";
$date->setDate(2001, 14, 3);
echo $date->format('Y-m-d') . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2001-02-28 2001-03-01 2002-02-03
(PHP 5 >= 5.2.0)
DateTime::setISODate -- date_isodate_set — Sets the ISO date
Objektorientierter Stil
Prozeduraler Stil
Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates.
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.
year
Year of the date.
week
Week of the date.
day
Offset from the first day of the week.
Gibt das DateTime-Objekt
für die Verkettung von Methoden zurück Im Fehlerfall wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 5.3.0 | Der
Rückgabewert bei Erfolg wurde von NULL auf DateTime
geändert. |
Beispiel #1 DateTime::setISODate() example
Objektorientierter Stil
<?php
$date = new DateTime();
$date->setISODate(2008, 2);
echo $date->format('Y-m-d') . "\n";
$date->setISODate(2008, 2, 7);
echo $date->format('Y-m-d') . "\n";
?>
Prozeduraler Stil
<?php
$date = date_create();
date_isodate_set($date, 2008, 2);
echo date_format($date, 'Y-m-d') . "\n";
date_isodate_set($date, 2008, 2, 7);
echo date_format($date, 'Y-m-d') . "\n";
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
2008-01-07 2008-01-13
Beispiel #2 Values exceeding ranges are added to their parent values
<?php
$date = new DateTime();
$date->setISODate(2008, 2, 7);
echo $date->format('Y-m-d') . "\n";
$date->setISODate(2008, 2, 8);
echo $date->format('Y-m-d') . "\n";
$date->setISODate(2008, 53, 7);
echo $date->format('Y-m-d') . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2008-01-13 2008-01-14 2009-01-04
Beispiel #3 Finding the month a week is in
<?php
$date = new DateTime();
$date->setISODate(2008, 14);
echo $date->format('n');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
3
(PHP 5 >= 5.2.0)
DateTime::setTime -- date_time_set — Sets the time
Objektorientierter Stil
Prozeduraler Stil
Resets the current time of the DateTime object to a different time.
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.
hour
Hour of the time.
minute
Minute of the time.
second
Second of the time.
Gibt das DateTime-Objekt
für die Verkettung von Methoden zurück Im Fehlerfall wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 5.3.0 | Der
Rückgabewert bei Erfolg wurde von NULL auf DateTime
geändert. |
Beispiel #1 DateTime::setTime() example
Objektorientierter Stil
<?php
$date = new DateTime('2001-01-01');
$date->setTime(14, 55);
echo $date->format('Y-m-d H:i:s') . "\n";
$date->setTime(14, 55, 24);
echo $date->format('Y-m-d H:i:s') . "\n";
?>
Prozeduraler Stil
<?php
$date = date_create('2001-01-01');
date_time_set($date, 14, 55);
echo date_format($date, 'Y-m-d H:i:s') . "\n";
date_time_set($date, 14, 55, 24);
echo date_format($date, 'Y-m-d H:i:s') . "\n";
?>
Oben gezeigte Beispiele erzeugen eine ähnliche Ausgabe wie:
2000-01-01 14:55:00 2000-01-01 14:55:24
Beispiel #2 Values exceeding ranges are added to their parent values
<?php
$date = new DateTime('2001-01-01');
$date->setTime(14, 55, 24);
echo $date->format('Y-m-d H:i:s') . "\n";
$date->setTime(14, 55, 65);
echo $date->format('Y-m-d H:i:s') . "\n";
$date->setTime(14, 65, 24);
echo $date->format('Y-m-d H:i:s') . "\n";
$date->setTime(25, 55, 24);
echo $date->format('Y-m-d H:i:s') . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2001-01-01 14:55:24 2001-01-01 14:56:05 2001-01-01 15:05:24 2001-01-02 01:55:24
(PHP 5 >= 5.3.0)
DateTime::setTimestamp -- date_timestamp_set — Sets the date and time based on an Unix timestamp
Objektorientierter Stil
Prozeduraler Stil
Sets the date and time based on an Unix timestamp.
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.
unixtimestamp
Unix timestamp representing the date.
Gibt das DateTime-Objekt
für die Verkettung von Methoden zurück Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 DateTime::setTimestamp() example
Objektorientierter Stil
<?php
$date = new DateTime();
echo $date->format('U = Y-m-d H:i:s') . "\n";
$date->setTimestamp(1171502725);
echo $date->format('U = Y-m-d H:i:s') . "\n";
?>
Prozeduraler Stil
<?php
$date = date_create();
echo date_format($date, 'U = Y-m-d H:i:s') . "\n";
date_timestamp_set($date, 1171502725);
echo date_format($date, 'U = Y-m-d H:i:s') . "\n";
?>
Oben gezeigte Beispiele erzeugen eine ähnliche Ausgabe wie:
1272508903 = 2010-04-28 22:41:43 1171502725 = 2007-02-14 20:25:25
Using the Unix timestamp format to construct a new DateTime object is an alternative when using PHP 5.2, as shown in the example below.
Beispiel #2 DateTime::setTimestamp() alternative in PHP 5.2
<?php
$ts = 1171502725;
$date = new DateTime("@$ts");
echo $date->format('U = Y-m-d H:i:s') . "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
1171502725 = 2007-02-14 20:25:25
(PHP 5 >= 5.2.0)
DateTime::setTimezone -- date_timezone_set — Sets the time zone for the DateTime object
Objektorientierter Stil
Prozeduraler Stil
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.
timezone
A DateTimeZone object representing the desired time zone.
Gibt das DateTime-Objekt
für die Verkettung von Methoden zurück Im Fehlerfall wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 5.3.0 | Der
Rückgabewert bei Erfolg wurde von NULL auf DateTime
geändert. |
Beispiel #1 DateTime::setTimeZone() example
Objektorientierter Stil
<?php
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>
Prozeduraler Stil
<?php
$date = date_create('2000-01-01', timezone_open('Pacific/Nauru'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
date_timezone_set($date, timezone_open('Pacific/Chatham'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
2000-01-01 00:00:00+12:00 2000-01-01 01:45:00+13:45
(PHP 5 >= 5.3.0)
DateTime::sub -- date_sub — Subtracts an amount of days, months, years, hours, minutes and seconds from a DateTime object
Objektorientierter Stil
Prozeduraler Stil
Subtracts the specified DateInterval object from the specified DateTime object.
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.
interval
A DateInterval object
Gibt das DateTime-Objekt
für die Verkettung von Methoden zurück Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 DateTime::sub() example
Objektorientierter Stil
<?php
$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P10D'));
echo $date->format('Y-m-d') . "\n";
?>
Prozeduraler Stil
<?php
$date = date_create('2000-01-20');
date_sub($date, date_interval_create_from_date_string('10 days'));
echo date_format($date, 'Y-m-d');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
2000-01-10
Beispiel #2 Further DateTime::sub() examples
<?php
$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('PT10H30S'));
echo $date->format('Y-m-d H:i:s') . "\n";
$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P7Y5M4DT4H3M2S'));
echo $date->format('Y-m-d H:i:s') . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2000-01-19 13:59:30 1992-08-15 19:56:58
Beispiel #3 Beware when subtracting months
<?php
$date = new DateTime('2001-04-30');
$interval = new DateInterval('P1M');
$date->sub($interval);
echo $date->format('Y-m-d') . "\n";
$date->sub($interval);
echo $date->format('Y-m-d') . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2001-03-30 2001-03-02
DateTime::modify() is an alternative when using PHP 5.2.
(PHP 5 >= 5.2.0)
DateTime::__wakeup — The __wakeup handler
Diese Funktion hat keine Parameter.
Initializes a DateTime object.
(PHP 5 >= 5.2.0)
Representation of time zone.
DateTimeZone::AFRICA
Africa time zones.
DateTimeZone::AMERICA
America time zones.
DateTimeZone::ANTARCTICA
Antarctica time zones.
DateTimeZone::ARCTIC
Arctic 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.
(PHP 5 >= 5.2.0)
DateTimeZone::__construct -- timezone_open — Creates new DateTimeZone object
Objektorientierter Stil
$timezone
)Prozeduraler Stil
Creates new DateTimeZone object.
Returns DateTimeZone on success.
Prozeduraler Stil Im Fehlerfall wird FALSE zurückgegeben.
This method throws Exception if the timezone supplied is not recognised as a valid timezone.
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)
(PHP 5 >= 5.3.0)
DateTimeZone::getLocation -- timezone_location_get — Returns location information for a timezone
Objektorientierter Stil
Prozeduraler Stil
Returns location information for a timezone, including country code, latitude/longitude and comments.
objectNur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTimeZone Objekt.
Array containing location information about timezone.
Beispiel #1 DateTimeZone::getLocation() example
<?php
$tz = new DateTimeZone("Europe/Prague");
print_r($tz->getLocation());
print_r(timezone_location_get($tz));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[country_code] => CZ
[latitude] => 50.08333
[longitude] => 14.43333
[comments] =>
)
Array
(
[country_code] => CZ
[latitude] => 50.08333
[longitude] => 14.43333
[comments] =>
)
(PHP 5 >= 5.2.0)
DateTimeZone::getName -- timezone_name_get — Returns the name of the timezone
Objektorientierter Stil
Prozeduraler Stil
Returns the name of the timezone.
object
The DateTimeZone for which to get a name.
One of the timezone names in the list of timezones.
(PHP 5 >= 5.2.0)
DateTimeZone::getOffset -- timezone_offset_get — Returns the timezone offset from GMT
Objektorientierter Stil
Prozeduraler Stil
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.
objectNur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTimeZone Objekt.
datetime
DateTime that contains the date/time to compute the offset from.
Returns time zone offset in seconds on successIm Fehlerfall wird FALSE zurückgegeben..
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);
?>
(PHP 5 >= 5.2.0)
DateTimeZone::getTransitions -- timezone_transitions_get — Returns all transitions for the timezone
Objektorientierter Stil
$timestamp_begin
[, int $timestamp_end
]] )Prozeduraler Stil
$object
[, int $timestamp_begin
[, int $timestamp_end
]] )
objectNur bei prozeduralem Aufruf: Ein von date_create() zurückgegebens DateTimeZone Objekt.
timestamp_begin
Begin timestamp.
timestamp_end
End timestamp.
Returns numerically indexed array containing associative array with all
transitions on successIm Fehlerfall wird FALSE zurückgegeben..
| Version | Beschreibung |
|---|---|
| 5.3.0 |
The optional timestamp_begin and timestamp_end
were added.
|
Beispiel #1 A timezone_transitions_get() example
<?php
$timezone = new DateTimeZone("Europe/London");
$transitions = $timezone->getTransitions();
print_r(array_slice($transitions, 0, 3));
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Array
(
[0] => Array
(
[ts] => -9223372036854775808
[time] => -292277022657-01-27T08:29:52+0000
[offset] => 3600
[isdst] => 1
[abbr] => BST
)
[1] => Array
(
[ts] => -1691964000
[time] => 1916-05-21T02:00:00+0000
[offset] => 3600
[isdst] => 1
[abbr] => BST
)
[2] => Array
(
[ts] => -1680472800
[time] => 1916-10-01T02:00:00+0000
[offset] => 0
[isdst] =>
[abbr] => GMT
)
)
(PHP 5 >= 5.2.0)
DateTimeZone::listAbbreviations -- timezone_abbreviations_list — Returns associative array containing dst, offset and the timezone name
Objektorientierter Stil
Prozeduraler Stil
Returns array on successIm Fehlerfall wird FALSE zurückgegeben..
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
)
)
(PHP 5 >= 5.2.0)
DateTimeZone::listIdentifiers -- timezone_identifiers_list — Returns numerically index array with all timezone identifiers
Objektorientierter Stil
$what = DateTimeZone::ALL
[, string $country = NULL
]] )Prozeduraler Stil
what
One of DateTimeZone class constants.
country
A two-letter ISO 3166-1 compatible country code.
Hinweis: This option is only used when
whatis set toDateTimeZone::PER_COUNTRY.
Returns array on successIm Fehlerfall wird FALSE zurückgegeben..
| Version | Beschreibung |
|---|---|
| 5.3.0 |
Added the optional what and
country parameters.
|
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/Asmara
(PHP 5 >= 5.3.0)
Representation of date interval. A date interval stores either a fixed amount of time (in years, months, days, hours etc) or a relative time string in the format that DateTime's constructor supports.
Number of years.
Number of months.
Number of days.
Number of hours.
Number of minutes.
Number of seconds.
Is 1 if the interval is inverted and 0 otherwise. See DateInterval::format().
Total number of days between the starting and ending dates
in a DateTime::diff() calculation.
days will be FALSE in other circumstances.
(PHP 5 >= 5.3.0)
DateInterval::__construct — Creates new DateInterval object
$interval_spec
)Creates new DateInterval object.
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.
| 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.
Beispiel #1 DateInterval example
<?php
$interval = new DateInterval('P2Y4DT6H8M');
var_dump($interval);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
object(DateInterval)#1 (8) {
["y"]=>
int(2)
["m"]=>
int(0)
["d"]=>
int(4)
["h"]=>
int(6)
["i"]=>
int(8)
["s"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
bool(false)
}
(PHP 5 >= 5.3.0)
DateInterval::createFromDateString — Sets up a DateInterval from the relative parts of the string
Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string.
time
Date with relative parts.
Returns new DateInterval instance if success.
(PHP 5 >= 5.3.0)
DateInterval::format — Formats the interval
$format
)Formats the interval.
format
format character |
Description | Example values |
|---|---|---|
| % | Literal % | % |
| 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 | 1, 3, 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 | -, |
Returns the formatted interval.
Hinweis:
The DateInterval::format() method does not recalculate carry over points in time strings nor in date segments. This is expected because it is not possible to overflow values like "32 days" which could be interpreted as anything from "1 month and 4 days" to "1 month and 1 day".
Beispiel #1 DateInterval example
<?php
$interval = new DateInterval('P2Y4DT6H8M');
echo $interval->format('%d days');
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
4 days
Beispiel #2 DateInterval and carry over points
<?php
$interval = new DateInterval('P32D');
echo $interval->format('%d days');
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
32 days
Beispiel #3 DateInterval and DateTime::diff() with the %a and %d modifiers
<?php
$january = new DateTime('2010-01-01');
$february = new DateTime('2010-02-01');
$interval = $february->diff($january);
// %a will output the total number of days.
echo $interval->format('%a total days')."\n";
// While %d will only output the number of days not already covered by the
// month.
echo $interval->format('%m month, %d days');
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
31 total days 1 month, 0 days
(PHP 5 >= 5.3.0)
Representation of date period.
$start
, DateInterval $interval
, int $recurrences
[, int $options
] )DatePeriod::EXCLUDE_START_DATE
Exclude start date, used in DatePeriod::__construct().
(PHP 5 >= 5.3.0)
DatePeriod::__construct — Creates new DatePeriod object
$start
, DateInterval $interval
, int $recurrences
[, int $options
] )$start
, DateInterval $interval
, DateTime $end
[, int $options
] )$isostr
[, int $options
] )Creates new DatePeriod object.
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.
(PHP 4, PHP 5)
checkdate — Prüft ein Gregorianisches Datum auf Gültigkeit
$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.
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).
Gibt TRUE zurück, wenn das übergebene Datum gültig ist, andernfalls FALSE.
Beispiel #1 checkdate()-Beispiel
<?php
var_dump(checkdate(12, 31, 2000));
var_dump(checkdate(2, 29, 2001));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(false)
Diese Funktion ist ein Alias für: DateTime::add()
(PHP 5 >= 5.3.0)
date_create_from_format — Alias von DateTime::createFromFormat()
Diese Funktion ist ein Alias für: DateTime::createFromFormat()
Diese Funktion ist ein Alias für: DateTime::__construct()
Diese Funktion ist ein Alias für: DateTime::setDate()
(PHP 5 >= 5.1.0)
date_default_timezone_get — Gets the default timezone used by all date/time functions in a script
In order of preference, this function returns the default timezone by:
Reading the timezone set using the date_default_timezone_set() function (if any)
Prior to PHP 5.4.0 only: Reading the TZ environment variable (if non empty)
Reading the value of the date.timezone ini option (if set)
Prior to PHP 5.4.0 only: Querying the host operating system (if supported and allowed by the OS). This uses an algorithm that has to guess the timezone. This is by no means going to work correctly for every situation. A warning is shown when this stage is reached. Do not rely on it to be guessed correctly, and set date.timezone to the correct timezone instead.
If none of the above succeed, date_default_timezone_get() will return a default timezone of UTC.
Returns a string.
| Version | Beschreibung |
|---|---|
| 5.4.0 | The TZ environment variable is no longer used to guess the timezone. |
| 5.4.0 | The timezone is no longer guessed from information available through the operating system as the guessed timezone can not be relied on. |
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
(PHP 5 >= 5.1.0)
date_default_timezone_set — Sets the default timezone used by all date/time functions in a script
$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_NOTICEif the timezone isn't valid, and/or aE_WARNINGmessage 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.
timezone_identifier
The timezone identifier, like UTC or Europe/Lisbon. The list of valid identifiers is available in the Liste unterstützter Zeitzonen.
This function returns FALSE if the
timezone_identifier isn't valid, or TRUE
otherwise.
Beispiel #1 Getting the default timezone
<?php
date_default_timezone_set('America/Los_Angeles');
$script_tz = date_default_timezone_get();
if (strcmp($script_tz, ini_get('date.timezone'))){
echo 'Script timezone differs from ini-set timezone.';
} else {
echo 'Script timezone and ini-set timezone match.';
}
?>
| Version | Beschreibung |
|---|---|
| 5.3.0 |
Now throws E_WARNING rather than
E_STRICT.
|
| 5.1.2 |
The function started to validate the
timezone_identifier parameter.
|
Diese Funktion ist ein Alias für: DateTime::diff()
Diese Funktion ist ein Alias für: DateTime::format()
Diese Funktion ist ein Alias für: DateTime::getLastErrors()
(PHP 5 >= 5.3.0)
date_interval_create_from_date_string — Alias von DateInterval::createFromDateString()
Diese Funktion ist ein Alias für: DateInterval::createFromDateString()
Diese Funktion ist ein Alias für: DateInterval::format()
Diese Funktion ist ein Alias für: DateTime::setISODate()
Diese Funktion ist ein Alias für: DateTime::modify()
Diese Funktion ist ein Alias für: DateTime::getOffset()
(PHP 5 >= 5.3.0)
date_parse_from_format — Get info about given date formatted according to the specified format
$format
, string $date
)Returns associative array with detailed info about given date.
format
Format accepted by DateTime::createFromFormat().
date
String representing the date.
Returns associative array with detailed info about given date.
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] =>
)
(PHP 5 >= 5.2.0)
date_parse — Returns associative array with detailed info about given date
$date
)
Returns array with information about the parsed date
on successIm Fehlerfall wird FALSE zurückgegeben..
In case the date format has an error, the element 'errors' will contains the error messages.
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] =>
)
Diese Funktion ist ein Alias für: DateTime::sub()
(PHP 5 >= 5.1.2)
date_sun_info — Returns an array with information about sunset/sunrise and twilight begin/end
$time
, float $latitude
, float $longitude
)
time
Timestamp.
latitude
Latitude in degrees.
longitude
Longitude in degrees.
Returns array on successIm Fehlerfall wird FALSE zurückgegeben..
Beispiel #1 A date_sun_info() example
<?php
$sun_info = date_sun_info(strtotime("2006-12-12"), 31.7667, 35.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
(PHP 5)
date_sunrise — Returns time of sunrise for a given day and location
$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.
timestamp
The timestamp of the day from which the sunrise
time is taken.
format
| 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.
Returns the sunrise time in a specified format on
successIm Fehlerfall wird FALSE zurückgegeben..
Jeder Aufruf der Datums- und Zeitfunktionen
generiert eine E_NOTICE-Warnung,
wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht
oder eine E_WARNING-Warnung,
wenn die Systemeinstellung oder die TZ-Umgebungsvariable
genutzt wird. Siehe auch date_default_timezone_set()
| Version | Beschreibung |
|---|---|
| 5.1.0 |
Erzeugt nun |
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_STRING, 38.4, -9, 90, 1);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Mon Dec 20 2004, sunrise time : 08:54
(PHP 5)
date_sunset — Returns time of sunset for a given day and location
$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.
timestamp
The timestamp of the day from which the sunset
time is taken.
format
| 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.
Jeder Aufruf der Datums- und Zeitfunktionen
generiert eine E_NOTICE-Warnung,
wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht
oder eine E_WARNING-Warnung,
wenn die Systemeinstellung oder die TZ-Umgebungsvariable
genutzt wird. Siehe auch date_default_timezone_set()
| Version | Beschreibung |
|---|---|
| 5.1.0 |
Erzeugt nun |
Returns the sunset time in a specified format on
successIm Fehlerfall wird FALSE zurückgegeben..
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_STRING, 38.4, -9, 90, 1);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Mon Dec 20 2004, sunset time : 18:13
Diese Funktion ist ein Alias für: DateTime::setTime()
Diese Funktion ist ein Alias für: DateTime::getTimestamp()
Diese Funktion ist ein Alias für: DateTime::setTimestamp()
Diese Funktion ist ein Alias für: DateTime::getTimezone()
Diese Funktion ist ein Alias für: DateTime::setTimezone()
(PHP 4, PHP 5)
date — Formatiert ein(e) angegebene(s) Ortszeit/Datum
$format
[, int $timestamp = time()
] )
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.
format
Das Muster des auszugebenden Datums-/Zeit-String.
Unten sind die verfügbaren Formatierungsoptionen angegeben.
Es gibt auch verschiedene
vordefinierte Konstanten,
die verwendet werden können, z.B. enthält DATE_RSS
das Formatierungsmuster 'D, d M Y H:i:s'.
Format-Zeichen |
Beschreibung | Beispiel für Rückgabewerte |
|---|---|---|
| Tag | --- | --- |
| d | Tag des Monats, 2-stellig mit führender Null | 01 bis 31 |
| D | Wochentag, gekürzt auf drei Buchstaben | Mon bis Sun |
| j | Tag des Monats ohne führende Nullen | 1 bis 31 |
| l (kleines 'L') | Ausgeschriebener Wochentags | Sunday bis Saturday |
| N | Numerische Repräsentation des Wochentages gemäß ISO-8601 (in PHP 5.1.0 hinzugefügt) | 1 (für Montag) bis 7 (für Sonntag) |
| S | Anhang der englischen Aufzählung für einen Monatstag, zwei Zeichen | st, nd, rd oder th. Zur Verwendung mit j empfohlen. |
| w | Numerischer Tag einer Woche | 0 (für Sonntag) bis 6 (für Samstag) |
| z | Der Tag des Jahres (von 0 beginnend) | 0 bis365 |
| Woche | --- | --- |
| 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) |
| Monat | --- | --- |
| F | Monat als ganzes Wort, wie January oder March | January bis December |
| 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 |
| t | Anzahl der Tage des angegebenen Monats | 28 bis 31 |
| Jahr | --- | --- |
| L | Schaltjahr oder nicht | 1 für ein Schaltjahr, ansonsten 0 |
| o | Jahreszahl gemäß ISO-8601. Dies ergibt den gleichen Wert wie Y, außer wenn die ISO-Kalenderwoche (W) zum vorhergehenden oder nächsten Jahr gehört, wobei dann jenes Jahr verwendet wird (in PHP 5.1.0 hinzugefügt). | Beispiele: 1999 oder 2003 |
| Y | Vierstellige Jahreszahl | Beispiele: 1999 oder 2003 |
| y | Jahreszahl, zweistellig | Beispiele: 99 oder 03 |
| Uhrzeit | --- | --- |
| a | Kleingeschrieben: Ante meridiem (Vormittag) und Post meridiem (Nachmittag) | am oder pm |
| A | Großgeschrieben: Ante meridiem (Vormittag) und Post meridiem (Nachmittag) | AM oder PM |
| B | Swatch-Internet-Zeit | 000 bis 999 |
| g | Stunde im 12-Stunden-Format, ohne führende Nullen | 1 bis 12 |
| G | Stunde im 24-Stunden-Format, ohne führende Nullen | 0 bis 23 |
| h | Stunde im 12-Stunden-Format, mit führenden Nullen | 01 bis 12 |
| H | Stunde im 24-Stunden-Format, mit führenden Nullen | 00 bis 23 |
| i | Minuten, mit führenden Nullen | 00 bis 59 |
| s | Sekunden, mit führenden Nullen | 00 bis 59 |
| u | Mikrosekunden (hinzugefügt in PHP 5.2.2) | Beispiel: 654321 |
| Zeitzone | --- | --- |
| e | Zeitzonen-Bezeichner (hinzugefügt in PHP 5.1.0) | Beispiele: UTC, GMT, Atlantic/Azores |
| I (großes 'i') | Fällt ein Datum in die Sommerzeit | 1 bei Sommerzeit, ansonsten 0. |
| O | Zeitunterschied zur Greenwich time (GMT) in Stunden | Beispiel: +0200 |
| P | Zeitunterschied zur Greenwich time (GMT) in Stunden mit Doppelpunkt zwischen Stunden und Minuten (hinzugefügt in PHP 5.1.3) | Beispiel: +02:00 |
| T | Abkürzung der Zeitzone | Beispiele: EST, MDT ... |
| Z | Offset der Zeitzone in Sekunden. Der Offset für Zeitzonen westlich von UTC ist immer negativ und für Zeitzonen östlich von UTC immer positiv. | -43200 bis 50400 |
| Vollständige(s) Datum/Uhrzeit | --- | --- |
| c | ISO 8601 Datum (hinzugefügt in PHP 5) | 2004-02-12T15:19:21+00:00 |
| r | Gemäß » RFC 2822 formatiertes Datum | Beispiel: Thu, 21 Dec 2000 16:01:07 +0200 |
| U | Sekunden seit Beginn der UNIX-Epoche (January 1 1970 00:00:00 GMT) | Siehe auch time() |
Nicht erkannte Zeichen werden unverändert ausgegeben. Das Z-Format gibt beim Gebrauch von gmdate() immer 0 zurück.
Hinweis:
Weil diese Funktion nur Integer-Zeitstempel akzeptiert, ist die Formatanweisung u nur nützlich, wenn man die Funktion date_format() mit von Benutzern angegebenen Timestamps aus der Funktion date_create() verwendet.
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().
Gibt eine formatierte Datums-Zeichenkette zurück. Falls ein
nicht numerischer Wert als timestamp
übergeben wird, wird FALSE zurückgegeben und ein Fehler
der Stufe E_WARNING erzeugt.
Jeder Aufruf der Datums- und Zeitfunktionen
generiert eine E_NOTICE-Warnung,
wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht
oder eine E_WARNING-Warnung,
wenn die Systemeinstellung oder die TZ-Umgebungsvariable
genutzt wird. Siehe auch date_default_timezone_set()
| Version | Beschreibung |
|---|---|
| 5.1.0 | 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). Vor PHP 5.1.0 war dieser Bereich auf manchen Systemen (z.B. Windows) eingeschränkt auf 01.01.1971 bis 19.01.2038. |
| 5.1.0 |
Erzeugt nun |
| 5.1.1 |
Es gibt nützliche Konstanten
von üblichen Datums-/Zeitformaten, die als
Format-Parameter übergeben werden können.
|
Beispiel #1 date()-Beispiele
<?php
// Die Standard-Zeitzone, die verwendet werden soll, setzen.
// Verfügbar seit PHP 5.1
date_default_timezone_set('UTC');
// Gibt etwas aus wie: 'Monday'
echo date("l");
// Gibt etwas aus wie: 'Monday 8th of August 2005 03:12:46 PM'
echo date('l jS \of F Y h:i:s A');
// Gibt aus: 'July 1, 2000 ist ein Saturday'
echo "July 1, 2000 ist ein " . date("l", mktime(0, 0, 0, 7, 1, 2000));
/* Verwende die Konstanten im Format-Parameter */
// Gibt etwas aus wie 'Mon, 15 Aug 2005 15:12:46 UTC'
echo date(DATE_RFC822);
// Gibt etwas aus wie '2000-07-01T00:00:00+00:00'
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>
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()
<?php
// 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 oder Vergangenheit zu bestimmen.
Beispiel #3 date() und mktime()-Beispiele
<?php
$morgen = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$letztermonat = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$naechstesjahr = mktime(0, 0, 0, date("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 der 10. März 2001, 17:16:18 Uhr und wir
// befinden uns in der Zeitzone Mountain Standard Time (MST)
$heute = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$heute = date("m.d.y"); // 03.10.01
$heute = date("j, n, Y"); // 10, 3, 2001
$heute = date("Ymd"); // 20010310
$heute = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$heute = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day.
$heute = date("D M j G:i:s T Y"); // Sat Mar 10 17:16:18 MST 2001
$heute = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month
$heute = date("H:i:s"); // 17:16:18
?>
Um Datumsangaben in anderen Sprachen auszugeben, sollten Sie die Funktionen setlocale() und strftime() statt date() verwendet werden.
Hinweis:
Um einen Zeitstempel aus einer Textrepräsentation eines Datums zu erzeugen, kann die Funktion strtotime() verwendet werden. Einige Datenbanken haben außerdem Funktionen, mit denen ihre Datumsformate in Zeitstempel konvertiert werden können (wie z.B. die Funktion » UNIX_TIMESTAMP von MySQL).
Der Zeitstempel des Verarbeitungsbeginns der HTTP-Anfrage wird seit PHP 5.1 in $_SERVER['REQUEST_TIME'] bereitgestellt.
(PHP 4, PHP 5)
getdate — Gibt Datums- und Zeitinformationen zurück
$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.
Gibt ein assoziatives Array mit Informationen zum
timestamp zurück. Die Elemente des zurückgegebenen
assoziativen Arrays sind folgende:
| 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. |
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
)
(PHP 4, PHP 5)
gettimeofday — Ermittelt die aktuelle Zeit
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.
return_float
Sofern auf TRUE gesetzt, wird eine Fließkommazahl anstelle des Arrays
zurückgegeben.
Standardmäßig wird ein Array zurückgegeben. Wenn der Parameter
return_float angegeben wurde, ist der Rückgabewert
vom Typ float.
Array-Schlüssel:
| Version | Beschreibung |
|---|---|
| 5.1.0 |
Der Parameter return_float wurde hinzugefügt.
|
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
(PHP 4, PHP 5)
gmdate — Formatiert eine GMT/UTC Zeit-/Datumsangabe
$format
[, int $timestamp = time()
] )Identisch zur Funktion date(), ausgenommen dass die zurückgegebene Zeitangabe Greenwich Mean Time (GMT) entspricht.
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().
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.
| 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.
|
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(0, 0, 0, 1, 1, 1998));
echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
?>
(PHP 4, PHP 5)
gmmktime — Gibt einen Unix-Timestamp (Zeitstempel) für ein GMT Datum zurück
$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.
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.
Gibt einen Unix Timestamp im integer-Format zurück.
| 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.
|
Beispiel #1 gmmktime() unter den Beschränkungen von Windows
<?php
gmmktime(0, 0, 0, 1, 1, 1970); // gültig in GMT und west, ungültig in east
?>
(PHP 4, PHP 5)
gmstrftime — Formatiert eine Datum-/Zeitangabe in GMT/UTC-Format entsprechend den lokalen Einstellungen
$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.
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().
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.
Beispiel #1 gmstrftime()-Beispiel
<?php
setlocale(LC_TIME, 'en_US');
echo strftime("%b %d %Y %H:%M:%S", mktime(20, 0, 0, 12, 31, 98)) . "\n";
echo gmstrftime("%b %d %Y %H:%M:%S", mktime(20, 0, 0, 12, 31, 98)) . "\n";
?>
(PHP 5)
idate — Format a local time/date as integer
$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.
format
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().
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.
Jeder Aufruf der Datums- und Zeitfunktionen
generiert eine E_NOTICE-Warnung,
wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht
oder eine E_WARNING-Warnung,
wenn die Systemeinstellung oder die TZ-Umgebungsvariable
genutzt wird. Siehe auch date_default_timezone_set()
| Version | Beschreibung |
|---|---|
| 5.1.0 |
Erzeugt nun |
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);
?>
(PHP 4, PHP 5)
localtime — Ermittelt die lokale Zeit
$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.
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:
Jeder Aufruf der Datums- und Zeitfunktionen
generiert eine E_NOTICE-Warnung,
wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht
oder eine E_WARNING-Warnung,
wenn die Systemeinstellung oder die TZ-Umgebungsvariable
genutzt wird. Siehe auch date_default_timezone_set()
| Version | Beschreibung |
|---|---|
| 5.1.0 |
Erzeugt nun |
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
)
(PHP 4, PHP 5)
microtime — Gibt den aktuellen Unix-Timestamp/Zeitstempel mit Mikrosekunden zurück
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.
Standardmäßig gibt microtime() einen string im Format "Mikrosekunden Sekunden" zurück, wobei Sekunden die aktuelle Zeit gemessen in Sekunden seit Beginn der Unix Epoche (01. Januar 1970 00:00:00 GMT) ist und Mikrosekunden die Anzahl an Mikrosekunden ist, die seit Sekunden vergangen sind.
Wenn get_as_float TRUE ist, gibt
microtime() stattdessen einen float
zurück, welcher die aktuelle Zeit in Sekunden seit Beginn der Unix
Epoche angibt (die Nachkommastellen geben die Mikrosekunden an).
| Version | Beschreibung |
|---|---|
| 5.0.0 |
Der Parameter get_as_float wurde hinzugefügt.
|
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";
?>
(PHP 4, PHP 5)
mktime — Gibt den Unix-Timestamp/Zeitstempel für ein Datum zurück
$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.
Hinweis:
Seit PHP 5.1 wirft mktime() eine
E_STRICT-Notice, wenn die Funktion ohne Argumente aufgerufen wird. Verwenden Sie in diesem Fall stattdessen die time()-Funktion.
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.
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).
Jeder Aufruf der Datums- und Zeitfunktionen
generiert eine E_NOTICE-Warnung,
wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht
oder eine E_WARNING-Warnung,
wenn die Systemeinstellung oder die TZ-Umgebungsvariable
genutzt wird. Siehe auch date_default_timezone_set()
| 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 |
Wenn ohne Argumente aufgerufen, wirft mktime()
eine E_STRICT-Notice. Verwenden Sie stattdessen
die Funktion time().
|
| 5.1.0 |
Erzeugt nun |
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(0, 0, 0, 7, 1, 2000));
// Gibt etwas aus wie: 2006-04-05T01:02:03+00:00
echo date('c', mktime(1, 2, 3, 4, 5, 2006));
?>
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(0, 0, 0, 12, 32, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));
?>
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 2000 ist der 29."
<?php
$letzterTag = mktime(0, 0, 0, 3, 0, 2000);
echo strftime("Letzter Tag im Februar 2000 ist der %d.", $letzterTag);
$letzterTag = mktime(0, 0, 0, 4, -31, 2000);
echo strftime("Letzter Tag im Februar 2000 ist der %d.", $letzterTag);
?>
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.
(PHP 4, PHP 5)
strftime — Formatiert eine Zeit-/Datumsangabe nach den lokalen Einstellungen
$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:
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.
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");
?>
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().
$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).
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()). Note that some of the format
options available to strftime() may not have any
effect within strptime(); the exact subset that are
supported will vary based on the operating system and C library in
use.
For more information about the format options, read the strftime() page.
Returns an arrayIm Fehlerfall wird FALSE zurückgegeben..
| 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 |
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] =>
)
Hinweis: Diese Funktion ist auf Windows-Plattformen nicht implementiert.
Hinweis:
Internally, this function calls the strptime() function provided by the system's C library. This function can exhibit noticeably different behaviour across different operating systems. The use of date_parse_from_format(), which does not suffer from these issues, is recommended on PHP 5.3.0 and later.
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.
Hinweis:
Prior to PHP 5.2.0, this function could return undefined behaviour. Notably, the "tm_sec", "tm_min" and "tm_hour" entries would return undefined values.
(PHP 4, PHP 5)
strtotime — Wandelt ein beliebiges in englischer Textform angegebenes Datum in einen UNIX-Zeitstempel (Timestamp) um
$time
[, int $now
] )
Diese Funktion erwartet einen String mit einem Datum im Englischen
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
übergeben wurde, 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.
time
Ein Datums/Zeit Zeichenkette. Gültige Formate werden unter Datums- und Zeitformate erläutert.
now
Der Timestamp, der als Basis zur Berechnung relativer Daten verwendet wird.
Gibt im Erfolgsfall einen Timestamp, andernfalls FALSE zurück. Vor PHP 5.1.0
gab die Funktion -1 im Fehlerfall zurück.
Jeder Aufruf der Datums- und Zeitfunktionen
generiert eine E_NOTICE-Warnung,
wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht
oder eine E_WARNING-Warnung,
wenn die Systemeinstellung oder die TZ-Umgebungsvariable
genutzt wird. Siehe auch date_default_timezone_set()
| Version | Beschreibung |
|---|---|
| 5.3.0 |
Vor PHP 5.3.0 war 24:00 keine korrekte Formatierung,
daher gab strtotime() FALSE zurück.
|
| 5.2.7 | Wird in PHP 5 vor Version 5.2.7 ein gegebenes Vorkommen eines angegebenen Wochentages eines Monats abgefragt, der der erste Tag des Monats ist, wird eine Woche zum zurückgegebenen Zeitstempel addiert. Dieser Fehler ist in Version 5.2.7 und später korrigiert. |
| 5.1.0 |
Im Fehlerfall wird FALSE statt -1 zurückgegeben.
|
| 5.1.0 |
Erzeugt nun |
| 5.0.2 | In PHP 5 bis 5.0.2 werden "now" und andere relative Zeitangaben fälschlicherweise ab dem Zeitpunkt des Datumswechsels berechnet. Dieses Verhalten unterscheidet sich von anderen Versionen, die diese Angaben in die korrekte aktuelle Zeit übersetzen. |
| 5.0.0 | Die Angabe von Mikrosekunden ist erlaubt, wird aber ignoriert. |
| 4.4.0 | 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. |
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);
}
?>
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 auf 32-Bit-Systemen (das Datum endet möglicherweise am 2038-01-19 03:14:07).
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.
Für 64 Bit Versionen von PHP ist der gültige Bereich für Timestamps praktisch unendlich groß, da 64 Bit etwa 293 Milliarden Jahre in beide Richtungen darstellen können.
Hinweis:
Daten im Format m/d/y oder d-m-y werden unterschieden anhand des genutzten Trennzeichens: Wenn ein Slash (/) genutzt wird, wird das Amerikanische Format m/d/y angenommen; wird stattdessen ein Minus (-) oder ein Punkt (.) genutzt, wird das Europäische Format d-m-y angenommen.
Um Mehrdeutigkeiten zu vermeiden sollten am besten ISO 8601 Daten (YYYY-MM-DD) genutzt werden oder aber die Methode DateTime::createFromFormat() verwendet werden.
(PHP 4, PHP 5)
time — Gibt den aktuellen Unix-Timestamp/Zeitstempel zurück
Gibt die seit Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden zurück.
Beispiel #1 time()-Beispiel
<?php
$nextWeek = time() + (7 * 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
Der Timestamp des Beginns der aktuellen Anfrage steht seit PHP 5.1 in der Variablen $_SERVER['REQUEST_TIME'] zur Verfügung.
(PHP 5 >= 5.2.0)
timezone_abbreviations_list — Alias von DateTimeZone::listAbbreviations()
Diese Funktion ist ein Alias für: DateTimeZone::listAbbreviations()
(PHP 5 >= 5.2.0)
timezone_identifiers_list — Alias von DateTimeZone::listIdentifiers()
Diese Funktion ist ein Alias für: DateTimeZone::listIdentifiers()
Diese Funktion ist ein Alias für: DateTimeZone::getLocation()
(PHP 5 >= 5.1.3)
timezone_name_from_abbr — Gibt den Namen der Zeitzonenabkürzung zurück
$abbr
[, int $gmtOffset = -1
[, int $isdst = -1
]] )
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.
Gibt im Erfolgsfall den Namen der Zeitzone zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Ein timezone_name_from_abbr()-Beispiel
<?php
echo timezone_name_from_abbr("CET") . "\n";
echo timezone_name_from_abbr("", 3600, 0) . "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Europe/Berlin Europe/Paris
Diese Funktion ist ein Alias für: DateTimeZone::getName()
Diese Funktion ist ein Alias für: DateTimeZone::getOffset()
Diese Funktion ist ein Alias für: DateTimeZone::__construct()
(PHP 5 >= 5.2.0)
timezone_transitions_get — Alias von DateTimeZone::getTransitions()
Diese Funktion ist ein Alias für: DateTimeZone::getTransitions()
(PHP 5 >= 5.3.0)
timezone_version_get — Gets the version of the timezonedb
Returns the current version of the timezonedb.
Returns a string.
Beispiel #1 Getting the timezonedb version
<?php
echo timezone_version_get();
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
2009.7
This section describes all the different formats that the strtotime(), DateTime and date_create() parser understands. The formats are grouped by section. In most cases formats from different sections can be used in the same date/time string. For each of the supported formats, one or more examples are given, as well as a description for the format. Characters in single quotes in the formats are case-insensitive ('t' could be t or T), characters in double quotes are case-sensitive ("T" is only T).
| Description | Formats | Examples |
|---|---|---|
| frac | . [0-9]+ | ".21342", ".85" |
| hh | "0"?[1-9] | "1"[0-2] | "04", "7", "12" |
| HH | [01][0-9] | "2"[0-4] | "04", "7", "19" |
| meridian | [AaPp] .? [Mm] .? [\0\t ] | "A.m.", "pM", "am." |
| MM | [0-5][0-9] | "00", "12", "59" |
| II | [0-5][0-9] | "00", "12", "59" |
| space | [ \t] | |
| tz | "("? [A-Za-z]{1,6} ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+ | "CEST", "Europe/Amsterdam", "America/Indiana/Knox" |
| tzcorrection | "GMT"? [+-] hh ":"? MM? | "+0400", "GMT-07:00", "-07:00" |
| Description | Format | Examples |
|---|---|---|
| Hour only, with meridian | hh space? meridian | "4 am", "5PM" |
| Hour and minutes, with meridian | hh [.:] MM space? meridian | "4:08 am", "7:19P.M." |
| Hour, minutes and seconds, with meridian | hh [.:] MM [.:] II space? meridian | "4:08:37 am", "7:19:19P.M." |
| MS SQL (Hour, minutes, seconds and fraction with meridian), PHP 5.3 and later only | hh ":" MM ":" II [.:] [0-9]+ meridian | "4:08:39:12313am" |
| Description | Format | Examples |
|---|---|---|
| Hour and minutes | 't'? HH [.:] MM | "04:08", "19.19", "T23:43" |
| Hour and minutes, no colon | 't'? HH MM | "0408", "t1919", "T2343" |
| Hour, minutes and seconds | 't'? HH [.:] MM [.:] II | "04.08.37", "t19:19:19" |
| Hour, minutes and seconds, no colon | 't'? HH MM II | "040837", "T191919" |
| Hour, minutes, seconds and timezone | 't'? HH [.:] MM [.:] II space? ( tzcorrection | tz ) | "040837CEST", "T191919-0700" |
| Hour, minutes, seconds and fraction | 't'? HH [.:] MM [.:] II frac | "04.08.37.81412", "19:19:19.532453" |
| Time zone information | tz | tzcorrection | "CEST", "Europe/Amsterdam", "+0430", "GMT-06:00" |
| Description | Format | Examples |
|---|---|---|
| daysuf | "st" | "nd" | "rd" | "th" | |
| dd | ([0-2]?[0-9] | "3"[01]) daysuf? | "7th", "22nd", "31" |
| DD | "0" [0-9] | [1-2][0-9] | "3" [01] | "07", "31" |
| m | 'january' | 'february' | 'march' | 'april' | 'may' | 'june' | 'july' | 'august' | 'september' | 'october' | 'november' | 'december' | 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | "I" | "II" | "III" | "IV" | "V" | "VI" | "VII" | "VIII" | "IX" | "X" | "XI" | "XII" | |
| M | 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | |
| mm | "0"? [0-9] | "1"[0-2] | "0", "04", "7", "12" |
| MM | "0" [0-9] | "1"[0-2] | "00", "04", "07", "12" |
| y | [0-9]{1,4} | "00", "78", "08", "8", "2008" |
| yy | [0-9]{2} | "00", "08", "78" |
| YY | [0-9]{4} | "2000", "2008", "1978" |
| Description | Format | Examples |
|---|---|---|
| American month and day | mm "/" dd | "5/12", "10/27" |
| American month, day and year | mm "/" dd "/" y | "12/22/78", "1/17/2006", "1/17/6" |
| Four digit year, month and day with slashes | YY "/" mm "/" dd | "2008/6/30", "1978/12/22" |
| Four digit year and month (GNU) | YY "-" mm | "2008-6", "2008-06", "1978-12" |
| Year, month and day with dashes | y "-" mm "-" dd | "2008-6-30", "78-12-22", "8-6-21" |
| Day, month and four digit year, with dots, tabs or dashes | dd [.\t-] mm [.-] YY | "30-6-2008", "22.12\t1978" |
| Day, month and two digit year, with dots or tabs | dd [.\t] mm "." yy | "30.6.08", "22\t12\t78" |
| Day, textual month and year | dd ([ \t.-])* m ([ \t.-])* y | "30-June 2008", "22DEC78", "14 III 1879" |
| Textual month and four digit year (Day reset to 1) | m ([ \t.-])* YY | "June 2008", "DEC1978", "March 1879" |
| Four digit year and textual month (Day reset to 1) | YY ([ \t.-])* m | "2008 June", "1978-XII", "1879.MArCH" |
| Textual month, day and year | m ([ .\t-])* dd [,.stndrh\t ]+ y | "July 1st, 2008", "April 17, 1790", "May.9,78" |
| Textual month and day | m ([ .\t-])* dd [,.stndrh\t ]* | "July 1st,", "Apr 17", "May.9" |
| Day and textual month | d ([ .\t-])* m | "1 July", "17 Apr", "9.May" |
| Month abbreviation, day and year | M "-" DD "-" y | "May-09-78", "Apr-17-1790" |
| Year, month abbreviation and day | y "-" M "-" DD | "78-Dec-22", "1814-MAY-17" |
| Year (and just the year) | YY | "1978", "2008" |
| Textual month (and just the month) | m | "March", "jun", "DEC" |
| Description | Format | Examples |
|---|---|---|
| Eight digit year, month and day | YY MM DD | "15810726", "19780417", "18140517" |
| Four digit year, month and day with slashes | YY "/" MM "/" DD | "2008/06/30", "1978/12/22" |
| Two digit year, month and day with dashes | yy "-" MM "-" DD | "08-06-30", "78-12-22" |
| Four digit year with optional sign, month and day | [+-]? YY "-" MM "-" DD | "-0002-07-26", "+1978-04-17", "1814-05-17" |
Hinweis:
For the y and yy formats, years below 100 are handled in a special way when the y or yy symbol is used. If the year falls in the range 0 (inclusive) to 69 (inclusive), 2000 is added. If the year falls in the range 70 (inclusive) to 99 (inclusive) then 1900 is added. This means that "00-01-01" is interpreted as "2000-01-01".
Hinweis:
The "Day, month and two digit year, with dots or tabs" format (dd [.\t] mm "." yy) only works for the year values 61 (inclusive) to 99 (inclusive) - outside those years the time format "HH [.:] MM [.:] SS" has precedence.
Hinweis:
The "Year (and just the year)" format only works if a time string has already been found -- otherwise this format is recognised as HH MM.
Hinweis:
It is possible to over- and underflow the dd and DD format. Day 0 means the last day of previous month, whereas overflows count into the next month. This makes "2008-08-00" equivalent to "2008-07-31" and "2008-06-31" equivalent to "2008-07-01" (June only has 30 days).
It is also possible to underflow the mm and MM formats with the value 0. A month value of 0 means December of the previous year. As example "2008-00-22" is equivalent to "2007-12-22".
If you combine the previous two facts and underflow both the day and the month, the following happens: "2008-00-00" first gets converted to "2007-12-00" which then gets converted to "2007-11-30". This also happens with the string "0000-00-00", which gets transformed into "-0001-11-30" (the year -1 in the ISO 8601 calendar, which is 2 BC in the proleptic Gregorian calendar).
| Description | Formats | Examples |
|---|---|---|
| DD | "0" [0-9] | [1-2][0-9] | "3" [01] | "02", "12", "31" |
| doy | "00"[1-9] | "0"[1-9][0-9] | [1-2][0-9][0-9] | "3"[0-5][0-9] | "36"[0-6] | "36"[0-6] "000", "012", "366" |
| frac | . [0-9]+ | ".21342", ".85" |
| hh | "0"?[1-9] | "1"[0-2] | "04", "7", "12" |
| HH | [01][0-9] | "2"[0-4] | "04", "7", "19" |
| meridian | [AaPp] .? [Mm] .? [\0\t ] | "A.m.", "pM", "am." |
| ii | [0-5][0-9] | "04", "8", "59" |
| II | [0-5][0-9] | "04", "08", "59" |
| M | 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | |
| MM | [0-5][0-9] | "00", "12", "59" |
| space | [ \t] | |
| ss | [0-5][0-9] | "04", "8", "59" |
| SS | [0-5][0-9] | "04", "08", "59" |
| W | "0"[1-9] | [1-4][0-9] | "5"[0-3] | "05", "17", "53" |
| tzcorrection | "GMT"? [+-] hh ":"? MM? | "+0400", "GMT-07:00", "-07:00" |
| YY | [0-9]{4} | "2000", "2008", "1978" |
| Description | Format | Examples |
|---|---|---|
| Common Log Format | dd "/" M "/" YY : HH ":" II ":" SS space tzcorrection | "10/Oct/2000:13:55:36 -0700" |
| EXIF | YY ":" MM ":" DD " " HH ":" II ":" SS | "2008:08:07 18:11:31" |
| ISO year with ISO week | YY "-"? "W" W | "2008W27", "2008-W28" |
| ISO year with ISO week and day | YY "-"? "W" W "-"? [0-7] | "2008W273", "2008-W28-3" |
| MySQL | YY "-" MM "-" DD " " HH ":" II ":" SS | "2008-08-07 18:11:31" |
| PostgreSQL: Year with day-of-year | YY "."? doy | "2008.197", "2008197" |
| SOAP | YY "-" MM "-" DD "T" HH ":" II ":" SS frac tzcorrection? | "2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00" |
| Unix Timestamp | "@" "-"? [0-9]+ | "@1215282385" |
| XMLRPC | YY MM DD "T" hh ":" II ":" SS | "20080701T22:38:07", "20080701T9:38:07" |
| XMLRPC (Compact) | YY MM DD 't' hh II SS | "20080701t223807", "20080701T093807" |
| WDDX | YY "-" mm "-" dd "T" hh ":" ii ":" ss | "2008-7-1T9:3:37" |
Hinweis:
The "W" in the "ISO year with ISO week" and "ISO year with ISO week and day" formats is case-sensitive, you can only use the upper case "W".
The "T" in the SOAP, XMRPC and WDDX formats is case-sensitive, you can only use the upper case "T".
The "Unix Timestamp" format sets the timezone to UTC.
| Description | Format |
|---|---|
| dayname | 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun' |
| daytext | 'weekday' | 'weekdays' |
| number | [+-]?[0-9]+ |
| ordinal | 'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this' |
| reltext | 'next' | 'last' | 'previous' | 'this' |
| space | [ \t]+ |
| unit | (('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' | daytext |
| Format | Description | Examples |
|---|---|---|
| 'yesterday' | Midnight of yesterday | "yesterday 14:00" |
| 'midnight' | The time is set to 00:00:00 | |
| 'today' | The time is set to 00:00:00 | |
| 'now' | Now - this is simply ignored | |
| 'noon' | The time is set to 12:00:00 | "yesterday noon" |
| 'tomorrow' | Midnight of tomorrow | |
| 'back of' hour | 15 minutes past the specified hour | "back of 7pm", "back of 15" |
| 'front of' hour | 15 minutes before the specified hour | "front of 5am", "front of 23" |
| 'first day' ' of'? | Sets the day of the first of the current month. This phrase is best used together with a month name following it. | "first day of January 2008" |
| 'last day' ' of'? | Sets the day to the last day of the current month. This phrase is best used together with a month name following it. | "last day of next month" |
| ordinal space dayname space 'of' | Calculates the x-th week day of the current month. | "first sat of July 2008" |
| 'last' space dayname space 'of' | Calculates the last week day of the current month. | "last sat of July 2008" |
| number space? (unit | 'week') | Handles relative time items where the value is a number. | "+5 weeks", "12 day", "-7 weekdays" |
| ordinal space unit | Handles relative time items where the value is text. | "fifth day", "second month" |
| 'ago' | Negates all the values of previously found relative time items. | "2 days ago", "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago ago" |
| dayname | Moves to the next day of this name. | "Monday" |
| reltext space 'week' | Handles the special format "weekday + last/this/next week". | "Monday next week" |
Hinweis:
Relative statements are always processed after non-relative statements. This makes "+1 week july 2008" and "july 2008 +1 week" equivalent.
Exceptions to this rule are: "yesterday", "midnight", "today", "noon" and "tomorrow". Note that "tomorrow 11:00" and "11:00 tomorrow" are different. Considering today's date of "July 23rd, 2008" the first one produces "2008-07-24 11:00" where as the second one produces "2008-07-24 00:00". The reason for this is that those five statements directly influence the current time.
Hinweis:
Observe the following remarks when the current day-of-week is the same as the day-of-week used in the date/time string. The current day-of-week could have been (re-)calculated by non-relative parts of the date/time string however.
- "dayname" does not advance to another day. (Example: "Wed July 23rd, 2008" means "2008-07-23").
- "number dayname" does not advance to another day. (Example: "1 wednesday july 23rd, 2008" means "2008-07-23").
- "number week dayname" will first add the number of weeks, but does not advance to another day. In this case "number week" and "dayname" are two distinct blocks. (Example: "+1 week wednesday july 23rd, 2008" means "2008-07-30").
- "ordinal dayname" does advance to another day. (Example "first wednesday july 23rd, 2008" means "2008-07-30").
- "number week ordinal dayname" will first add the number of weeks, and then advances to another day. In this case "number week" and "ordinal dayname" are two distinct blocks. (Example: "+1 week first wednesday july 23rd, 2008" means "2008-08-06").
- "ordinal dayname 'of' " does not advance to another day. (Example: "first wednesday of july 23rd, 2008" means "2008-07-02" because the specific phrase with 'of' resets the day-of-month to '1' and the '23rd' is ignored here).
Also observe that the "of" in "ordinal space dayname space 'of' " and "'last' space dayname space 'of' " does something special.
- It sets the day-of-month to 1.
- "ordinal dayname 'of' " does not advance to another day. (Example: "first tuesday of july 2008" means "2008-07-01").
- "ordinal dayname " does advance to another day. (Example: "first tuesday july 2008" means "2008-07-08", see also point 4 in the list above).
- "'last' dayname 'of' " takes the last dayname of the current month. (Example: "last wed of july 2008" means "2008-07-30")
- "'last' dayname" takes the last dayname from the current day. (Example: "last wed july 2008" means "2008-06-25"; "july 2008" first sets the current date to "2008-07-01" and then "last wed" moves to the previous Wednesday which is "2008-06-25").
Hinweis:
Relative month values are calculated based on the length of months that they pass through. An example would be "+2 month 2011-11-30", which would produce "2012-01-30". This is due to November being 30 days in length, and December being 31 days in length, producing a total of 61 days.
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: Diese Liste basiert auf der Version der Zeitzonen-Datenbank 2012.3.
| 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/Juba | 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/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/Bahia_Banderas | 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/Creston |
| 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/Kralendijk | America/La_Paz |
| America/Lima | America/Los_Angeles | America/Louisville | America/Lower_Princes | America/Maceio |
| America/Managua | America/Manaus | America/Marigot | America/Martinique | America/Matamoros |
| America/Mazatlan | America/Mendoza | America/Menominee | America/Merida | America/Metlakatla |
| 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/Beulah | America/North_Dakota/Center | America/North_Dakota/New_Salem |
| America/Ojinaga | 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/Santa_Isabel | America/Santarem | America/Santiago |
| America/Santo_Domingo | America/Sao_Paulo | America/Scoresbysund | America/Shiprock | America/Sitka |
| 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/Casey | Antarctica/Davis | Antarctica/DumontDUrville | Antarctica/Macquarie | Antarctica/Mawson |
| Antarctica/McMurdo | Antarctica/Palmer | Antarctica/Rothera | Antarctica/South_Pole | Antarctica/Syowa |
| Antarctica/Vostok |
| Arctic/Longyearbyen |
| 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/Hebron | 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/Novokuznetsk | 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/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/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/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/Antananarivo | Indian/Chagos | Indian/Christmas | Indian/Cocos | Indian/Comoro |
| Indian/Kerguelen | Indian/Mahe | Indian/Maldives | Indian/Mauritius | Indian/Mayotte |
| Indian/Reunion |
| Pacific/Apia | Pacific/Auckland | Pacific/Chatham | Pacific/Chuuk | 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/Pohnpei |
| 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 |
| 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 |
Die folgenden Zeitzonen (mit Ausnahme von UTC) existieren nur aus Gründen der Rückwärtskompatibilität und sollten nicht mehr benutzt werden.
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:
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.
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/ncurses.
Wide character CRT screen handling (ncursesw) support was added in version 1.0.1 of this PECL extension.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
This extension defines window, panel and pad resources.
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.
On error ncurses functions return -1. Some functions return 0 on success. See the relevant pages in the documentation for actual return values.
| 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 |
| 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 |
|
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 |
| 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 |
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_addch — Add character at current position and advance cursor
$ch
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
ch
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_addchnstr — Add attributed string with specified length at current position
$s
, int $n
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
s
n
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_addchstr — Add attributed string at current position
$s
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
s
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_addnstr — Add string with specified length at current position
$s
, int $n
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
s
n
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_addstr — Output text at current position
$text
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
text
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_assume_default_colors — Define default colors for color 0
$fg
, int $bg
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
fg
bg
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_attroff — Turn off the given attributes
$attributes
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
attributes
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_attron — Turn on the given attributes
$attributes
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
attributes
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_attrset — Set given attributes
$attributes
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
attributes
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_baudrate — Returns baudrate of terminal
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_beep — Let the terminal beep
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.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_bkgd — Set background property for terminal screen
$attrchar
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
attrchar
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_bkgdset — Control screen background
$attrchar
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
attrchar
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_border — Draw a border around the screen using attributed characters
$left
, int $right
, int $top
, int $bottom
, int $tl_corner
, int $tr_corner
, int $bl_corner
, int $br_corner
)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!
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
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_bottom_panel — Moves a visible panel to the bottom of the stack
$panel
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_can_change_color — Checks if terminal color definitions can be changed
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.
Diese Funktion hat keine Parameter.
Return TRUE if the programmer can change color definitions,
FALSE otherwise.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_cbreak — Switch of input buffering
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.
Returns TRUE or NCURSES_ERR if any error occurred.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_clear — Clear screen
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().
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_clrtobot — Clear screen from current position to bottom
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_clrtoeol — Clear screen from current position to end of line
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.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_color_content — Retrieves RGB components of a color
$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.
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.
Returns -1 if the function was successful, and 0 if ncurses or terminal color capabilities have not been initialized.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_color_set — Set active foreground and background colors
$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.
pair
The color pair from which to get the foreground and background colors to set as the active colors.
Returns -1 on success, and 0 on failure.
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(1, NCURSES_COLOR_YELLOW, NCURSES_COLOR_BLUE);
ncurses_color_set(1);
}
// Write a string at specified location
ncurses_mvaddstr(10, 10, "Hello world! Yellow on blue text!");
// Flush output to screen
ncurses_refresh();
ncurses_end();
?>
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_curs_set — Set cursor state
$visibility
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
visibility
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_def_prog_mode — Saves terminals (program) mode
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().
Returns FALSE on success, otherwise TRUE.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_def_shell_mode — Saves terminals (shell) mode
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().
Returns FALSE on success, TRUE otherwise.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_define_key — Define a keycode
$definition
, int $keycode
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
definition
keycode
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_del_panel — Remove panel from the stack and delete it (but not the associated window)
$panel
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_delay_output — Delay output on terminal using padding characters
$milliseconds
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
milliseconds
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_delch — Delete character at current position, move rest of line left
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.
Deletes the character under the cursor. All characters to the right of the cursor on the same line are moved to the left one position and the last character on the line is filled with a blank. The cursor position does not change.
Returns FALSE on success, TRUE otherwise.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_deleteln — Delete line at current position, move rest of screen up
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.
Deletes the current line under cursorposition. All lines below the current line are moved up one line. The bottom line of window is cleared. Cursor position does not change.
Returns FALSE on success, otherwise TRUE.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_delwin — Delete a ncurses window
$window
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_doupdate — Write all prepared refreshes to terminal
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.
Compares the virtual screen to the physical screen and updates the physical screen. This way is more effective than using multiple refresh calls.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_echo — Activate keyboard input echo
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.
Enables echo mode. All characters typed by user are echoed by ncurses_getch().
Returns FALSE on success, TRUE if any error occurred.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_echochar — Single character output including refresh
$character
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
character
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_end — Stop using ncurses, clean up the screen
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_erase — Erase terminal screen
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.
Fills the terminal screen with blanks.
Created blanks have the current background rendition, set by ncurses_bkgd().
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_erasechar — Returns current erase character
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.
Returns the current erase character.
The current erase char, as a string.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_filter — Set LINES for iniscr() and newterm() to 1
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_flash — Flash terminal screen (visual bell)
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.
Flashes the screen, and if its not possible, sends an audible alert (bell).
Returns FALSE on success, otherwise TRUE.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_flushinp — Flush keyboard input buffer
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.
Throws away any typeahead that has been typed and has not yet been read by your program.
Returns FALSE on success, otherwise TRUE.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_getch — Read a character from keyboard
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_getmaxyx — Returns the size of a window
$window
, int &$y
, int &$x
)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.
Gets the horizontal and vertical size of the given
window into the given variables.
Variables must be passed as reference, so they are updated when the user changes the terminal size.
window
The measured window
y
This will be set to the window height
x
This will be set to the window width
Es wird kein Wert zurückgegeben.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_getmouse — Reads mouse event
&$mevent
)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_getmouse() reads mouse event out of queue.
mevent
Event options will be delivered in this parameter which has to be an array, passed by reference (see example below).
On success an associative array with following keys will be delivered:
"id" : Id to distinguish multiple devices
"x" : screen relative x-position in character cells
"y" : screen relative y-position in character cells
"z" : currently not supported
"mmask" : Mouse action
Returns FALSE if a mouse event is actually visible in the given window,
otherwise returns TRUE.
Beispiel #1 ncurses_getmouse() example
<?php
switch (ncurses_getch()){
case NCURSES_KEY_MOUSE:
if (!ncurses_getmouse($mevent)){
if ($mevent["mmask"] & NCURSES_MOUSE_BUTTON1_PRESSED){
$mouse_x = $mevent["x"]; // Save mouse position
$mouse_y = $mevent["y"];
}
}
break;
default:
/* .... */
}
?>
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_getyx — Returns the current cursor position for a window
$window
, int &$y
, int &$x
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
y
x
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_halfdelay — Put terminal into halfdelay mode
$tenth
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
tenth
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_has_colors — Checks if terminal has color capabilities
Checks whether the terminal has color capabilities. This function can be used to write terminal-independent programs. ncurses must be initialized using ncurses_init() before calling this function.
Diese Funktion hat keine Parameter.
Return TRUE if the terminal has color capabilities, FALSE otherwise.
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(1, NCURSES_COLOR_YELLOW, NCURSES_COLOR_BLUE);
ncurses_color_set(1);
}
// Write a string at specified location
ncurses_mvaddstr(10, 10, "Hello world! Yellow on blue text!");
// Flush output to screen
ncurses_refresh();
ncurses_end();
?>
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_has_ic — Check for insert- and delete-capabilities
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.
Checks whether the terminal has insert and delete capabilities.
Returns TRUE if the terminal has insert/delete-capabilities, FALSE
otherwise.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_has_il — Check for line insert- and delete-capabilities
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.
Checks whether the terminal has insert- and delete-line-capabilities.
Returns TRUE if the terminal has insert/delete-line capabilities,
FALSE otherwise.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_has_key — Check for presence of a function key on terminal keyboard
$keycode
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
keycode
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_hide_panel — Remove panel from the stack, making it invisible
$panel
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_hline — Draw a horizontal line at current position using an attributed character and max. n characters long
$charattr
, int $n
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
charattr
n
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_inch — Get character and attribute at current position
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.
Returns the character from the current position.
Returns the character, as a string.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_init_color — Define a terminal color
$color
, int $r
, int $g
, int $b
)Defines or redefines the given color. When this function is called, all occurrences of the given color on the screen, if any, immediately change to the new definition.
Color capabilities must be supported by the terminal and initialized using ncurses_start_color() prior to calling this function. In addition, the terminal must have color changing capabilities; use ncurses_can_change_color() to check for this.
color
The identification number of the color to redefine. It may be one of the default color constants.
r
A color value, between 0 and 1000, for the red component.
g
A color value, between 0 and 1000, for the green component.
b
A color value, between 0 and 1000, for the blue component.
Returns -1 if the function was successful, and 0 if ncurses or terminal color capabilities have not been initialized or the terminal does not have color changing capabilities.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_init_pair — Define a color pair
$pair
, int $fg
, int $bg
)Defines or redefines the given color pair to have the given foreground and background colors. If the color pair was previously initialized, the screen is refreshed and all occurrences of it are changed to reflect the new definition.
Color capabilities must be initialized using ncurses_start_color() before calling this function. The first color pair (color pair 0) is assumed to be white on black by default, but can be changed using ncurses_assume_default_colors().
pair
The number of the color pair to define.
fg
The foreground color for the color pair. May be one of the pre-defined colors or one defined by ncurses_init_color() if the terminal has color changing capabilities.
bg
The background color for the color pair. May be one of the pre-defined colors or one defined by ncurses_init_color() if the terminal has color changing capabilities.
Returns -1 if the function was successful, and 0 if ncurses or color support were not initialized.
Note that color changing capabilities are not required for defining color pairs of pre-existing colors, but only for changing definitions (red, green, and blue components) of colors themselves per ncurses_init_color().
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(1, NCURSES_COLOR_YELLOW, NCURSES_COLOR_BLUE);
ncurses_color_set(1);
}
// Write a string at specified location
ncurses_mvaddstr(10, 10, "Hello world! Yellow on blue text!");
// Flush output to screen
ncurses_refresh();
ncurses_end();
?>
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_init — Initialize ncurses
Initializes the ncurses interface. This function must be used before any other ncurses function call.
Note that ncurses_end() must be called before exiting from the program, or the terminal will not be restored to its proper non-visual mode.
Diese Funktion hat keine Parameter.
Es wird kein Wert zurückgegeben.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_insch — Insert character moving rest of line including character at current position
$character
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
character
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_insdelln — Insert lines before current line scrolling down (negative numbers delete and scroll up)
$count
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
count
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_insertln — Insert a line, move rest of screen down
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.
Inserts a new line above the current line. The bottom line will be lost.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_insstr — Insert string at current position, moving rest of line right
$text
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
text
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_instr — Reads string from terminal screen
&$buffer
)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.
Reads a string from the terminal screen and returns the number of characters read from the current character position until end of line.
buffer
The characters. Attributes will be stripped.
Returns the number of characters.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_isendwin — Ncurses is in endwin mode, normal screen output may be performed
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.
Checks if ncurses is in endwin mode.
Returns TRUE, if ncurses_end() has been called
without any subsequent calls to ncurses_wrefresh(),
FALSE otherwise.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_keyok — Enable or disable a keycode
$keycode
, bool $enable
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
keycode
enable
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_keypad — Turns keypad on or off
$window
, bool $bf
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
bf
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_killchar — Returns current line kill character
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.
Returns the current line kill character.
Returns the kill character, as a string.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_longname — Returns terminals description
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.
Returns a verbose description of the terminal.
Returns the description, as a string truncated to 128 characters.
On errors, returns NULL.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_meta — Enables/Disable 8-bit meta key information
$window
, bool $8bit
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
8bit
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mouse_trafo — Transforms coordinates
&$y
, int &$x
, bool $toscreen
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
toscreen
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mouseinterval — Set timeout for mouse button clicks
$milliseconds
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
milliseconds
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mousemask — Sets mouse options
$newmask
, int &$oldmask
)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.
Sets mouse events to be reported. By default no mouse events will be reported.
Mouse events are represented by NCURSES_KEY_MOUSE in the
ncurses_wgetch() input stream. To read the event data
and pop the event of queue, call ncurses_getmouse().
newmask
Mouse mask options can be set with the following predefined constants:
NCURSES_BUTTON1_PRESSED
NCURSES_BUTTON1_RELEASED
NCURSES_BUTTON1_CLICKED
NCURSES_BUTTON1_DOUBLE_CLICKED
NCURSES_BUTTON1_TRIPLE_CLICKED
NCURSES_BUTTON2_PRESSED
NCURSES_BUTTON2_RELEASED
NCURSES_BUTTON2_CLICKED
NCURSES_BUTTON2_DOUBLE_CLICKED
NCURSES_BUTTON2_TRIPLE_CLICKED
NCURSES_BUTTON3_PRESSED
NCURSES_BUTTON3_RELEASED
NCURSES_BUTTON3_CLICKED
NCURSES_BUTTON3_DOUBLE_CLICKED
NCURSES_BUTTON3_TRIPLE_CLICKED
NCURSES_BUTTON4_PRESSED
NCURSES_BUTTON4_RELEASED
NCURSES_BUTTON4_CLICKED
NCURSES_BUTTON4_DOUBLE_CLICKED
NCURSES_BUTTON4_TRIPLE_CLICKED
NCURSES_BUTTON_SHIFT>
NCURSES_BUTTON_CTRL
NCURSES_BUTTON_ALT
NCURSES_ALL_MOUSE_EVENTS
NCURSES_REPORT_MOUSE_POSITION
As a side effect, setting a zero mousemask in
newmask turns off the mouse
pointer. Setting a non zero value turns mouse pointer on.
oldmask
This will be set to the previous value of the mouse event mask.
Returns a mask to indicated which of the in parameter
newmask specified mouse events can be reported. On
complete failure, it returns 0.
Beispiel #1 ncurses_mousemask() example
<?php
$newmask = NCURSES_BUTTON1_CLICKED + NCURSES_BUTTON1_RELEASED;
$mask = ncurses_mousemask($newmask, $oldmask);
if ($mask & $newmask){
printf("All specified mouse options will be supported\n");
}
?>
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_move_panel — Moves a panel so that its upper-left corner is at [startx, starty]
$panel
, int $startx
, int $starty
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
startx
starty
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_move — Move output position
$y
, int $x
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvaddch — Move current position and add character
$y
, int $x
, int $c
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
c
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvaddchnstr — Move position and add attributed string with specified length
$y
, int $x
, string $s
, int $n
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
s
n
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvaddchstr — Move position and add attributed string
$y
, int $x
, string $s
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
s
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvaddnstr — Move position and add string with specified length
$y
, int $x
, string $s
, int $n
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
s
n
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvaddstr — Move position and add string
$y
, int $x
, string $s
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
s
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvcur — Move cursor immediately
$old_y
, int $old_x
, int $new_y
, int $new_x
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
old_y
old_x
new_y
new_x
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvdelch — Move position and delete character, shift rest of line left
$y
, int $x
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvgetch — Move position and get character at new position
$y
, int $x
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvhline — Set new position and draw a horizontal line using an attributed character and max. n characters long
$y
, int $x
, int $attrchar
, int $n
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
attrchar
n
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvinch — Move position and get attributed character at new position
$y
, int $x
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvvline — Set new position and draw a vertical line using an attributed character and max. n characters long
$y
, int $x
, int $attrchar
, int $n
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
y
x
attrchar
n
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_mvwaddstr — Add string at new position in window
$window
, int $y
, int $x
, string $text
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
y
x
text
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_napms — Sleep
$milliseconds
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
milliseconds
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_new_panel — Create a new panel and associate it with window
$window
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_newpad — Creates a new pad (window)
$rows
, int $cols
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
rows
cols
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_newwin — Create a new window
$rows
, int $cols
, int $y
, int $x
)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.
Creates a new window to draw elements in.
When creating additional windows, remember to use ncurses_getmaxyx() to check for available space, as terminal size is individual and may vary.
rows
Number of rows
cols
Number of columns
y
y-coordinate of the origin
x
x-coordinate of the origin
Returns a resource ID for the new window.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_nl — Translate newline and carriage return / line feed
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_nocbreak — Switch terminal to cooked mode
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.
Returns terminal to normal (cooked) mode. Initially the terminal may or may not in cbreak mode as the mode is inherited. Therefore a program should call ncurses_cbreak() and ncurses_nocbreak() explicitly.
Returns TRUE if any error occurred, otherwise FALSE.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_noecho — Switch off keyboard input echo
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.
Prevents echoing of user typed characters.
Returns TRUE if any error occurred, FALSE otherwise.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_nonl — Do not translate newline and carriage return / line feed
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_noqiflush — Do not flush on signal characters
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_noraw — Switch terminal out of raw mode
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.
Switches the terminal out of raw mode. Raw mode is similar to cbreak mode, in that characters typed are immediately passed through to the user program. The differences that are that in raw mode, the interrupt, quit, suspend and flow control characters are all passed through uninterpreted, instead of generating a signal.
Returns TRUE if any error occurred, otherwise FALSE.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_pair_content — Retrieves foreground and background colors of a color pair
$pair
, int &$f
, int &$b
)Retrieves the foreground and background colors that constitute the given color pair. Terminal color capabilities must be initialized with ncurses_start_color() prior to calling this function.
pair
The number of the color pair to retrieve information for.
f
A reference to which to return the foreground color of the color pair. The information returned will be a color number referring to one of the pre-defined colors or a color defined previously by ncurses_init_color() if the terminal supports color changing.
b
A reference to which to return the background color of the color pair. The information returned will be a color number referring to one of the pre-defined colors or a color defined previously by ncurses_init_color() if the terminal supports color changing.
Returns -1 if the function was successful, and 0 if ncurses or terminal color capabilities have not been initialized.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_panel_above — Returns the panel above panel
$panel
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
If panel is null, returns the bottom panel in the stack.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_panel_below — Returns the panel below panel
$panel
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
If panel is null, returns the top panel in the stack.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_panel_window — Returns the window associated with panel
$panel
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_pnoutrefresh — Copies a region from a pad into the virtual screen
$pad
, int $pminrow
, int $pmincol
, int $sminrow
, int $smincol
, int $smaxrow
, int $smaxcol
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
pad
pminrow
pmincol
sminrow
smincol
smaxrow
smaxcol
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_prefresh — Copies a region from a pad into the virtual screen
$pad
, int $pminrow
, int $pmincol
, int $sminrow
, int $smincol
, int $smaxrow
, int $smaxcol
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
pad
pminrow
pmincol
sminrow
smincol
smaxrow
smaxcol
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_putp — Apply padding information to the string and output it
$text
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
text
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_qiflush — Flush on signal characters
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_raw — Switch terminal into raw mode
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.
Places the terminal in raw mode. Raw mode is similar to cbreak mode, in that characters typed are immediately passed through to the user program. The differences that are that in raw mode, the interrupt, quit, suspend and flow control characters are all passed through uninterpreted, instead of generating a signal.
Returns TRUE if any error occurred, otherwise FALSE.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_refresh — Refresh screen
$ch
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
ch
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_replace_panel — Replaces the window associated with panel
$panel
, resource $window
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
window
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_reset_prog_mode — Resets the prog mode saved by def_prog_mode
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_reset_shell_mode — Resets the shell mode saved by def_shell_mode
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_resetty — Restores saved terminal state
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.
Restores the terminal state, which was previously saved by calling ncurses_savetty().
Always returns FALSE.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_savetty — Saves terminal state
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 state. The saved terminal state can be restored with ncurses_resetty().
Always returns FALSE.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_scr_dump — Dump screen content to file
$filename
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
filename
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_scr_init — Initialize screen from file dump
$filename
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
filename
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_scr_restore — Restore screen from file dump
$filename
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
filename
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_scr_set — Inherit screen from file dump
$filename
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
filename
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_scrl — Scroll window content up or down without changing current position
$count
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
count
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_show_panel — Places an invisible panel on top of the stack, making it visible
$panel
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_attr — Returns current soft label key attribute
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.
Returns the current soft label key attribute.
The attribute, as an integer.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_attroff — Turn off the given attributes for soft function-key labels
$intarg
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
intarg
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_attron — Turn on the given attributes for soft function-key labels
$intarg
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
intarg
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_attrset — Set given attributes for soft function-key labels
$intarg
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
intarg
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_clear — Clears soft labels from screen
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.
The function ncurses_slk_clear() clears soft label keys from screen.
Returns TRUE on errors, FALSE otherwise.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_color — Sets color for soft label keys
$intarg
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
intarg
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_init — Initializes soft label key functions
$format
)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.
Initializes soft label key functions
This function must be called before ncurses_init() or ncurses_newwin() is called.
format
If ncurses_init() eventually uses a line from stdscr to emulate the soft labels, then this parameter determines how the labels are arranged of the screen.
0 indicates a 3-2-3 arrangement of the labels, 1 indicates a 4-4 arrangement and 2 indicates the PC like 4-4-4 mode, but in addition an index line will be created.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_noutrefresh — Copies soft label keys to virtual screen
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_refresh — Copies soft label keys to screen
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.
Copies soft label keys from virtual screen to physical screen.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_restore — Restores soft label keys
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.
Restores the soft label keys after ncurses_slk_clear() has been performed.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_set — Sets function key labels
$labelnr
, string $label
, int $format
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
labelnr
label
format
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_slk_touch — Forces output when ncurses_slk_noutrefresh is performed
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.
Forces all the soft labels to be output the next time a ncurses_slk_noutrefresh() is performed.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_standend — Stop using 'standout' attribute
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_standout — Start using 'standout' attribute
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_start_color — Initializes color functionality
Initializes color functionality in ncurses. This function must be called before any color manipulation functions are called and after ncurses_init() is called. It is good practice to call this function right after ncurses_init().
Diese Funktion hat keine Parameter.
Returns 0 on success, or -1 if the color table could not be allocated or ncurses was not initialized.
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(1, NCURSES_COLOR_YELLOW, NCURSES_COLOR_BLUE);
ncurses_color_set(1);
}
// Write a string at specified location
ncurses_mvaddstr(10, 10, "Hello world! Yellow on blue text!");
// Flush output to screen
ncurses_refresh();
ncurses_end();
?>
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_termattrs — Returns a logical OR of all attribute flags supported by terminal
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_termname — Returns terminals (short)-name
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.
Returns terminals shortname.
Returns the shortname of the terminal, truncated to 14 characters.
On errors, returns NULL.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_timeout — Set timeout for special key sequences
$millisec
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
millisec
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_top_panel — Moves a visible panel to the top of the stack
$panel
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
panel
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_typeahead — Specify different filedescriptor for typeahead checking
$fd
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
fd
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_ungetch — Put a character back into the input stream
$keycode
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
keycode
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_ungetmouse — Pushes mouse event to queue
$mevent
)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.
Pushes a KEY_MOUSE event onto the unput queue and associates with this
event the given state sata and screen-relative character cell coordinates,
specified in mevent.
mevent
An associative array specifying the event options:
"id" : Id to distinguish multiple devices
"x" : screen relative x-position in character cells
"y" : screen relative y-position in character cells
"z" : currently not supported
"mmask" : Mouse action
Returns FALSE on success, TRUE otherwise.
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_update_panels — Refreshes the virtual screen to reflect the relations between panels in the stack
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_use_default_colors — Assign terminal default colors to color id -1
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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_use_env — Control use of environment information about terminal size
$flag
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
flag
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_use_extended_names — Control use of extended names in terminfo descriptions
$flag
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
flag
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_vidattr — Display the string on the terminal in the video attribute mode
$intarg
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
intarg
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_vline — Draw a vertical line at current position using an attributed character and max. n characters long
$charattr
, int $n
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
charattr
n
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_waddch — Adds character at current position in a window and advance cursor
$window
, int $ch
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
ch
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_waddstr — Outputs text at current postion in window
$window
, string $str
[, int $n
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
str
n
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wattroff — Turns off attributes for a window
$window
, int $attrs
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
attrs
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wattron — Turns on attributes for a window
$window
, int $attrs
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
attrs
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wattrset — Set the attributes for a window
$window
, int $attrs
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
attrs
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wborder — Draws a border around the window using attributed characters
$window
, int $left
, int $right
, int $top
, int $bottom
, int $tl_corner
, int $tr_corner
, int $bl_corner
, int $br_corner
)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 passed
window.
Use ncurses_border() for borders around the main window.
Each parameter expects 0 to draw a line and 1 to skip it.
window
The window on which we operate
left
right
top
bottom
tl_corner
Top left corner
tr_corner
Top right corner
bl_corner
Bottom left corner
br_corner
Bottom right corner
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wclear — Clears window
$window
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wcolor_set — Sets windows color pairings
$window
, int $color_pair
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
color_pair
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_werase — Erase window contents
$window
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wgetch — Reads a character from keyboard (window)
$window
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_whline — Draws a horizontal line in a window at current position using an attributed character and max. n characters long
$window
, int $charattr
, int $n
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
charattr
n
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wmouse_trafo — Transforms window/stdscr coordinates
$window
, int &$y
, int &$x
, bool $toscreen
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
x
y
toscreen
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wmove — Moves windows output position
$window
, int $y
, int $x
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
y
x
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wnoutrefresh — Copies window to virtual screen
$window
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wrefresh — Refresh window on terminal screen
$window
)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.
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wstandend — End standout mode for a window
$window
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wstandout — Enter standout mode for a window
$window
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_wvline — Draws a vertical line in a window at current position using an attributed character and max. n characters long
$window
, int $charattr
, int $n
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
window
charattr
n
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.
This module uses the functions of the RedHat Newt library. You need libnewt version >= 0.51.0.
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
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
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())
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.
| 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 |
| 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_EMPTYSCALE |
|
NEWT_COLORSET_FULLSCALE |
|
NEWT_COLORSET_DISENTRY |
|
NEWT_COLORSET_COMPACTBUTTON |
|
NEWT_COLORSET_ACTSELLISTBOX |
|
NEWT_COLORSET_SELLISTBOX |
| constant | meaning |
|---|---|
NEWT_ARG_LAST |
|
NEWT_ARG_APPEND |
| constant | meaning |
|---|---|
NEWT_FLAGS_SET |
|
NEWT_FLAGS_RESET |
|
NEWT_FLAGS_TOGGLE |
| constant | meaning |
|---|---|
NEWT_FLAG_RETURNEXIT |
Exit form, when component is activated |
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 |
| constant | meaning |
|---|---|
NEWT_FD_READ |
|
NEWT_FD_WRITE |
|
NEWT_FD_EXCEPT |
| constant | meaning |
|---|---|
NEWT_CHECKBOXTREE_UNSELECTABLE |
|
NEWT_CHECKBOXTREE_HIDE_BOX |
|
NEWT_CHECKBOXTREE_COLLAPSED |
|
NEWT_CHECKBOXTREE_EXPANDED |
|
NEWT_CHECKBOXTREE_UNSELECTED |
|
NEWT_CHECKBOXTREE_SELECTED |
| constant | meaning |
|---|---|
NEWT_ENTRY_SCROLL |
|
NEWT_ENTRY_RETURNEXIT |
|
NEWT_ENTRY_DISABLED |
| constant | meaning |
|---|---|
NEWT_LISTBOX_RETURNEXIT |
| constant | meaning |
|---|---|
NEWT_TEXTBOX_WRAP |
Wrap text in the textbox |
NEWT_TEXTBOX_SCROLL |
Scroll text in the textbox |
| constant | meaning |
|---|---|
NEWT_FORM_NOF12 |
Don't exit form on F12 press |
| 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 |
| constant | meaning |
|---|---|
NEWT_ANCHOR_LEFT |
|
NEWT_ANCHOR_RIGHT |
|
NEWT_ANCHOR_TOP |
|
NEWT_ANCHOR_BOTTOM |
| constant | meaning |
|---|---|
NEWT_GRID_FLAG_GROWX |
|
NEWT_GRID_FLAG_GROWY |
|
NEWT_GRID_EMPTY |
|
NEWT_GRID_COMPONENT |
|
NEWT_GRID_SUBGRID |
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 (0, 0, "Test Mode Setup Utility 1.12");
newt_push_help_line (null);
newt_draw_root_text (-30, 0, "(c) 1999-2002 RedHat, Inc");
newt_get_screen_size ($rows, $cols);
newt_open_window ($rows/2-17, $cols/2-10, 34, 17, "Choose a Tool");
$form = newt_form ();
$list = newt_listbox (3, 2, 10);
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 (5, 12, "Run Tool");
$b2 = newt_button (21, 12, "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);
?>
(PECL newt >= 0.1)
newt_bell — Send a beep to the terminal
This function sends a beep to the terminal.
Hinweis:
Depending on the terminal's settings, this beep may or may not be audible.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_centered_window — Open a centered window of the specified size
$width
, int $height
[, string $title
] )Open a centered window of the specified size.
width
Window width
height
Window height
title
Window title
Undefined value.
(PECL newt >= 0.1)
newt_checkbox_get_value — Retreives value of checkox resource
$checkbox
)This function returns the character in the sequence which indicates the current value of the checkbox.
checkbox
Returns character indicating the value of the checkbox.
(PECL newt >= 0.1)
newt_checkbox_set_flags — Configures checkbox resource
$checkbox
, int $flags
, int $sense
)This function allows to set various flags on checkbox resource.
checkbox
flags
sense
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_checkbox_set_value — Sets the value of the checkbox
$checkbox
, string $value
)This function allows to set the current value of the checkbox resource.
checkbox
value
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_checkbox_tree_add_item — Adds new item to the checkbox tree
$checkboxtree
, string $text
, mixed $data
, int $flags
, int $index
[, int $...
] )This function allows to add new item to the checkbox tree.
checkboxtree
text
data
flags
index
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_checkbox_tree_find_item — Finds an item in the checkbox tree
Finds an item in the checkbox tree by item's data.
checkboxtree
data
Returns checkbox tree item resource, or NULL if it wasn't found.
(PECL newt >= 0.1)
newt_checkbox_tree_get_current — Returns checkbox tree selected item
This method returns checkbox tree selected tem.
checkboxtree
Returns current (selected) checkbox tree item.
(PECL newt >= 0.1)
newt_checkbox_tree_get_entry_value —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
checkboxtree
data
(PECL newt >= 0.1)
newt_checkbox_tree_get_multi_selection —
$checkboxtree
, string $seqnum
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
checkboxtree
seqnum
(PECL newt >= 0.1)
newt_checkbox_tree_get_selection —
$checkboxtree
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
checkboxtree
(PECL newt >= 0.1)
newt_checkbox_tree_multi —
$left
, int $top
, int $height
, string $seq
[, int $flags
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
height
seq
flags
(PECL newt >= 0.1)
newt_checkbox_tree_set_current —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
checkboxtree
data
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_checkbox_tree_set_entry_value —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
checkboxtree
data
value
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_checkbox_tree_set_entry —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
checkboxtree
data
text
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_checkbox_tree_set_width —
$checkbox_tree
, int $width
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
checkbox_tree
width
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_checkbox_tree —
$left
, int $top
, int $height
[, int $flags
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
height
flags
(PECL newt >= 0.1)
newt_checkbox —
$left
, int $top
, string $text
, string $def_value
[, string $seq
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
text
def_value
seq
(PECL newt >= 0.1)
newt_clear_key_buffer — Discards the contents of the terminal's input buffer without waiting for additional input
Discards the contents of the terminal's input buffer without waiting for additional input.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_cls —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_component_add_callback —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
component
func_name
data
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_component_takes_focus —
$component
, bool $takes_focus
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
component
takes_focus
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_create_grid —
$cols
, int $rows
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
cols
rows
(PECL newt >= 0.1)
newt_cursor_off —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_cursor_on —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_delay —
$microseconds
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
microseconds
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_draw_form —
$form
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
form
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_draw_root_text — Displays the string text at the position indicated
$left
, int $top
, string $text
)Displays the string text at the position indicated.
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.
Es wird kein Wert zurückgegeben.
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 (2, 0, "Some root text");
newt_refresh();
sleep(1);
newt_draw_root_text (-30, 0, "Root text in the other corner");
newt_refresh();
sleep(1);
newt_finished();
?>
(PECL newt >= 0.1)
newt_entry_get_value —
$entry
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
entry
(PECL newt >= 0.1)
newt_entry_set_filter —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
entry
filter
data
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_entry_set_flags —
$entry
, int $flags
, int $sense
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
entry
flags
sense
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_entry_set —
$entry
, string $value
[, bool $cursor_at_end
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
entry
value
cursor_at_end
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_entry —
$left
, int $top
, int $width
[, string $init_value
[, int $flags
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
width
init_value
flags
(PECL newt >= 0.1)
newt_finished — Uninitializes newt interface
Uninitializes newt interface. This function be called, when program is ready to exit.
Returns 1 on success, 0 on failure.
(PECL newt >= 0.1)
newt_form_add_component — Adds a single component to the form
$form
, resource $component
)
Adds a single component to the form.
form
Form to which component will be added
component
Component to add to the form
Es wird kein Wert zurückgegeben.
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(3, 2, 10);
foreach ($options as $l_item) {
newt_listbox_add_entry($list, $l_item, $l_item);
}
newt_form_add_component($form, $list);
?>
(PECL newt >= 0.1)
newt_form_add_components — Add several components to the form
$form
, array $components
)
Adds several components to the form.
form
Form to which components will be added
components
Array of components to add to the form
Es wird kein Wert zurückgegeben.
Beispiel #1 A newt_form_add_components() example
<?php
$form = newt_form();
$b1 = newt_button(5, 12, "Run Tool");
$b2 = newt_button(21, 12, "Quit");
newt_form_add_components($form, array($b1, $b2));
?>
(PECL newt >= 0.1)
newt_form_add_hot_key —
$form
, int $key
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
form
key
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form_destroy — Destroys a form
$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.
form
Form component, which is going to be destroyed
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form_get_current —
$form
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
form
(PECL newt >= 0.1)
newt_form_run — Runs a form
$form
, array &$exit_struct
)This function runs the form passed to it.
form
Form component
exit_struct
Array, used for returning information after running the form component. Keys and values are described in the following table:
| 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 |
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form_set_background —
$from
, int $background
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
from
background
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form_set_height —
$form
, int $height
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
form
height
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form_set_size —
$form
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
form
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form_set_timer —
$form
, int $milliseconds
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
form
milliseconds
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form_set_width —
$form
, int $width
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
form
width
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form_watch_fd —
$form
, resource $stream
[, int $flags
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
form
stream
flags
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_form — Create a form
$vert_bar
[, string $help
[, int $flags
]]] )Create a new form.
vert_bar
Vertical scrollbar which should be associated with the form
help
Help text string
flags
Various flags
Returns a resource link to the created form component, or FALSE on
error.
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 (5, 12, "Quit");
newt_form_add_component ($myform, $button);
newt_refresh ();
newt_run_form ($myform);
newt_finished ();
newt_form_destroy ($myform);
?>
(PECL newt >= 0.1)
newt_get_screen_size — Fills in the passed references with the current size of the terminal
&$cols
, int &$rows
)Fills in the passed references with the current size of the terminal.
cols
Number of columns in the terminal
rows
Number of rows in the terminal
Es wird kein Wert zurückgegeben.
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
(PECL newt >= 0.1)
newt_grid_add_components_to_form —
$grid
, resource $form
, bool $recurse
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
grid
form
recurse
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_grid_basic_window —
$text
, resource $middle
, resource $buttons
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
text
middle
buttons
(PECL newt >= 0.1)
newt_grid_free —
$grid
, bool $recurse
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
grid
recurse
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_grid_get_size —
$grid
, int &$width
, int &$height
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
grid
width
height
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_grid_h_close_stacked —
$element1_type
, resource $element1
[, int $...
[, resource $...
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
element1_type
element1
(PECL newt >= 0.1)
newt_grid_h_stacked —
$element1_type
, resource $element1
[, int $...
[, resource $...
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
element1_type
element1
(PECL newt >= 0.1)
newt_grid_place —
$grid
, int $left
, int $top
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
grid
left
top
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_grid_set_field —
$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
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
grid
col
row
type
val
pad_left
pad_top
pad_right
pad_bottom
anchor
flags
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_grid_simple_window —
$text
, resource $middle
, resource $buttons
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
text
middle
buttons
(PECL newt >= 0.1)
newt_grid_v_close_stacked —
$element1_type
, resource $element1
[, int $...
[, resource $...
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
element1_type
element1
(PECL newt >= 0.1)
newt_grid_v_stacked —
$element1_type
, resource $element1
[, int $...
[, resource $...
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
element1_type
element1
(PECL newt >= 0.1)
newt_grid_wrapped_window_at —
$grid
, string $title
, int $left
, int $top
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
grid
title
left
top
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_grid_wrapped_window —
$grid
, string $title
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
grid
title
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_init — Initialize newt
Initializes the newt interface. This function must be called before any other newt function.
Returns 1 on success, 0 on failure.
(PECL newt >= 0.1)
newt_label_set_text —
$label
, string $text
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
label
text
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_label —
$left
, int $top
, string $text
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
text
(PECL newt >= 0.1)
newt_listbox_append_entry —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
text
data
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_clear_selection —
$listbox
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_clear —
$listobx
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listobx
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_delete_entry —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
key
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_get_current —
$listbox
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
(PECL newt >= 0.1)
newt_listbox_get_selection —
$listbox
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
(PECL newt >= 0.1)
newt_listbox_insert_entry —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
text
data
key
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_item_count —
$listbox
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
(PECL newt >= 0.1)
newt_listbox_select_item —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
key
sense
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_set_current_by_key —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
key
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_set_current —
$listbox
, int $num
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
num
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_set_data —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
num
data
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_set_entry —
$listbox
, int $num
, string $text
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
num
text
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox_set_width —
$listbox
, int $width
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
listbox
width
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listbox —
$left
, int $top
, int $height
[, int $flags
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
height
flags
(PECL newt >= 0.1)
newt_listitem_get_data —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
item
(PECL newt >= 0.1)
newt_listitem_set —
$item
, string $text
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
item
text
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_listitem —
$left
, int $top
, string $text
, bool $is_default
, resouce $prev_item
, mixed $data
[, int $flags
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
text
is_default
prev_item
data
flags
(PECL newt >= 0.1)
newt_open_window — Open a window of the specified size and position
$left
, int $top
, int $width
, int $height
[, string $title
] )Open a window of the specified size and position.
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
Returns 1 on success, 0 on failure.
(PECL newt >= 0.1)
newt_pop_help_line — Replaces the current help line with the one from the stack
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().
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_pop_window — Removes the top window from the display
Removes the top window from the display, and redraws the display areas which the window overwrote.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_push_help_line — Saves the current help line on a stack, and displays the new line
$text
] )Saves the current help line on a stack, and displays the new line.
text
New help text message
Hinweis:
If not specified, the help line is cleared.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_radio_get_current —
$set_member
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
set_member
(PECL newt >= 0.1)
newt_redraw_help_line —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_reflow_text —
$text
, int $width
, int $flex_down
, int $flex_up
, int &$actual_width
, int &$actual_height
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
text
width
flex_down
flex_up
actual_width
actual_height
(PECL newt >= 0.1)
newt_refresh — Updates modified portions of the screen
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.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_resize_screen —
$redraw
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
redraw
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_resume — Resume using the newt interface after calling newt_suspend()
Resume using the newt interface after calling newt_suspend().
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_run_form — Runs a form
$form
)This function runs the form passed to it.
form
Form component
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.
(PECL newt >= 0.1)
newt_scale_set —
$scale
, int $amount
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
scale
amount
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_scale —
$left
, int $top
, int $width
, int $full_value
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
width
full_value
(PECL newt >= 0.1)
newt_scrollbar_set —
$scrollbar
, int $where
, int $total
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
scrollbar
where
total
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_set_help_callback —
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
function
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_set_suspend_callback — Set a callback function which gets invoked when user presses the suspend key
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.
function
A callback function, which accepts one argument: data
data
This data is been passed to the callback function
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_suspend — Tells newt to return the terminal to its initial state
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).
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_textbox_get_num_lines —
$textbox
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
textbox
(PECL newt >= 0.1)
newt_textbox_reflowed —
$left
, int $top
, char $*text
, int $width
, int $flex_down
, int $flex_up
[, int $flags
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
*text
width
flex_down
flex_up
flags
(PECL newt >= 0.1)
newt_textbox_set_height —
$textbox
, int $height
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
textbox
height
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_textbox_set_text —
$textbox
, string $text
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
textbox
text
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_textbox —
$left
, int $top
, int $width
, int $height
[, int $flags
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
width
height
flags
(PECL newt >= 0.1)
newt_vertical_scrollbar —
$left
, int $top
, int $height
[, int $normal_colorset
[, int $thumb_colorset
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
left
top
height
normal_colorset
thumb_colorset
(PECL newt >= 0.1)
newt_wait_for_key — Doesn't return until a key has been pressed
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.
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_win_choice —
$title
, string $button1_text
, string $button2_text
, string $format
[, mixed $args
[, mixed $...
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
title
button1_text
button2_text
format
args
(PECL newt >= 0.1)
newt_win_entries —
$title
, string $text
, int $suggested_width
, int $flex_down
, int $flex_up
, int $data_width
, array &$items
, string $button1
[, string $...
] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
title
text
suggested_width
flex_down
flex_up
data_width
items
button1
button2
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:", 50, 7, 7, 30, $entries, "Ok", "Back");
newt_finished ();
if ($rc != 2) {
echo "Your name is: $f_name $l_name\n";
}
?>
(PECL newt >= 0.1)
newt_win_message —
$title
, string $button_text
, string $format
[, mixed $args
[, mixed $...
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
title
button_text
format
args
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_win_messagev —
$title
, string $button_text
, string $format
, array $args
)Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
title
button_text
format
args
Es wird kein Wert zurückgegeben.
(PECL newt >= 0.1)
newt_win_ternary —
$title
, string $button1_text
, string $button2_text
, string $button3_text
, string $format
[, mixed $args
[, mixed $...
]] )Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
title
Its description
button1_text
Its description
button2_text
Its description
button3_text
Its description
format
Its description
args
Its description
What the function returns, first on success, then on failure. See also the &return.success; entity
Die readline-Funktionen implementieren eine Schnittstelle zur GNU-Readline-Bibliothek. Diese Funktionen bieten die Möglichkeit, Kommandozeilen zu editieren. Ein Beispiel für die Anwendung ist die Art und Weise, wie die Bash es erlaubt, die Pfeiltasten zu benutzen, um Schriftzeichen einzufügen oder durch die Kommando-History zu scrollen. Auf Grund des interaktiven Charakters dieser Bibliothek ist diese beim Programmieren von Webanwendungen von geringem Nutzen, kann aber nützlich sein, wenn Sie Skripte schreiben, die dafür gedacht sind, PHP von der Kommandozeile auszuführen.
Hinweis: Diese Erweiterung steht auf Windows-Betriebssystemen nicht zur Verfügung.
Möchten Sie die readline Funktionen nutzen, müssen Sie die libreadline-Bibliothek installieren. Die libreadline-Bibliothek finden Sie auf der Homepage des GNU-Readline-Projekts unter » http://cnswww.cns.cwru.edu/~chet/readline/rltop.html. Dieses Projekt wird von Chet Ramey betreut, der auch der Author der Bash ist.
Sie können diese Funktionen auch mit der libedit-Bibliothek benutzen, die einen Ersatz für readline darstellt und nicht der GPL unterliegt. Die libedit-Bibliothek ist BSD-lizensiert und steht unter der Adresse » http://www.thrysoee.dk/editline/ zum Download bereit.
Um diese Funktionen benutzten zu können, müssen Sie die CLI- oder CGI-Version von PHP mit readline-Unterstützung kompilieren. Konfigurieren Sie PHP mit der Option --with-readline[=DIR] . Wenn Sie libedit als Ersatz für readline benutzen wollen, konfigurieren Sie PHP mit der Option --with-libedit[=DIR] .
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| cli.pager | "" | PHP_INI_ALL | Available since PHP 5.4.0. |
| cli.prompt | "\\b \\> " | PHP_INI_ALL | Available since PHP 5.4.0. |
Hier eine kurze Erklärung der Konfigurationsoptionen:
cli.pager
string
External tool to display output from command line.
cli.prompt
string
Command line prompt.
Diese Erweiterung definiert keine Ressource-Typen.
Diese Erweiterung definiert keine Konstanten.
(PHP 4, PHP 5)
readline_add_history — Fügt eine Zeile zur History hinzu
$line
)Diese Funktion fügt eine Zeile zur Kommandozeilen-History hinzu.
line
Die zur History hinzuzufügende Zeile.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 5 >= 5.1.0)
readline_callback_handler_install — Initialisiert das readline-Callback-Interface und das Terminal, gibt den Prompt aus und springt direkt zurück
Initialisiert ein readline-Callback-Interface, gibt danach den
prompt aus und springt direkt zurück. Der doppelte
Aufruf der Funktion ohne Zurücksetzen des verwendeten Callback-Interfaces
wird automatisch und in geeigneter Weise das alte Interface überschreiben.
Die Callback-Fähigkeiten sind hilfreich, wenn sie mit stream_select() kombiniert werden, da dies eine Verschränkung von IO und Benutzereingaben wie mittels readline() ermöglicht.
prompt
Die Prompt-Message.
callback
Die callback-Funktion benötigt einen Parameter;
die Benutzereingabe wird zurückgegeben.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Readline-Callback-Interface-Beispiel
<?php
function rl_callback($ret)
{
global $c, $prompting;
echo "Sie haben eingegeben: $ret\n";
$c++;
if ($c > 10) {
$prompting = false;
readline_callback_handler_remove();
} else {
readline_callback_handler_install("[$c] Geben Sie etwas ein: ", 'rl_callback');
}
}
$c = 1;
$prompting = true;
readline_callback_handler_install("[$c] Geben Sie etwas ein: ", 'rl_callback');
while ($prompting) {
$w = NULL;
$e = NULL;
$n = stream_select($r = array(STDIN), $w, $e, null);
if ($n && in_array(STDIN, $r)) {
// Liest das aktuelle Zeichen und ruft die Callbackfunktion auf, wenn ein
// Newline-Zeichen eingegeben wurde
readline_callback_read_char();
}
}
echo "Eingabe deaktiviert. Komplett ausgeführt.\n";
?>
(PHP 5 >= 5.1.0)
readline_callback_handler_remove — Entfernt den letztdefinierten Callbackhandler und setzt die Terminalumgebung auf die Ursprungswerte zurück
Entfernt den letztdefinierten Callbackhandler und setzt die Terminalumgebung auf die Ursprungswerte zurück.
Gibt TRUE zurück, wenn der letztdefinierte Callbackhandler zurückgesetzt
wurde; falls dieser nicht gefunden wurde, wird FALSE zurückgegeben.
Werfen Sie auch einen Blick auf die Dokumentation der Funktion readline_callback_handler_install(), dort finden Sie ein Beispiel zur Verwendung des readline-Callback-Interfaces.
(PHP 5 >= 5.1.0)
readline_callback_read_char — Liest ein Zeichen und informiert das readline-Callback-Interface, wenn die Eingabezeile abgeschlossen wurde
Liest ein Zeichen der Benutzereingabe ein. Wenn eine Eingabezeile abgeschlossen ist, informiert diese Funktion das readline-Callback-Interface, das mittels readline_callback_handler_install()
Es wird kein Wert zurückgegeben.
Werfen Sie auch einen Blick auf die Dokumentation der Funktion readline_callback_handler_install(), dort finden Sie ein Beispiel zur Verwendung des readline-Callback-Interfaces.
(PHP 4, PHP 5)
readline_clear_history — Löscht die History
Diese Funktion löscht die gesamte Kommandozeilen-History.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4, PHP 5)
readline_completion_function — Registriert eine Vervollständigungsfunktion
Diese Funktion registriert eine Vervollständigungsfunktion. Das ist die gleiche Art von Funktionalität als wenn Sie die Tab-Taste benutzen, während Sie mit der Bash arbeiten.
function
Sie müssen den Namen einer existierenden Funktion angeben, die einen Teil einer Kommandozeile akzeptiert und ein Array möglicher Übereinstimmungen zurückgibt.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4, PHP 5)
readline_info — Liest/Setzt verschiedene interne readline-Variablen
Liest/Setzt verschiedene interne readline-Variablen.
varname
Ein Variablenname.
newvalue
Sofern unterstützt, entspricht der Parameter dem neuen gesetzten Wert.
Wenn diese Funktion ohne Parameter aufgerufen wird, gibt sie einen Array von Werten für alle Einstellungen zurück, die readline benutzt. Die Elemente werden durch die folgenden Werte indiziert: done, end, erase_empty_line, library_version, line_buffer, mark, pending_input, point, prompt, readline_name und terminal_name.
Wird die Funktion mit einem oder zwei Parametern aufgerufen, wird der alte Wert zurückgegeben.
(PHP 4, PHP 5)
readline_list_history — Auflistung der History
Gibt die vollständige Kommandozeilen-History zurück.
Diese Funktion gibt ein Array der gesamten Kommandozeilen-History zurück. Die Elemente sind numerisch indiziert, beginnend bei Null.
(PHP 5 >= 5.1.0)
readline_on_new_line — Informiert readline, dass der Cursor in eine neue Zeile bewegt wurde
Informiert readline, dass der Cursor in eine neue Zeile bewegt wurde.
Es wird kein Wert zurückgegeben.
(PHP 4, PHP 5)
readline_read_history — Liest die History
$filename
] )Diese Funktion liest eine Kommandozeilen-History aus einer Datei.
filename
Pfad zur Datei, die die Kommandozeilen-History enthält.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 5 >= 5.1.0)
readline_redisplay — Zeichnet den Bildschirm neu
Zeichnet die Eingabezeile neu um den Bildschirm neu aufzubauen.
Es wird kein Wert zurückgegeben.
(PHP 4, PHP 5)
readline_write_history — Schreibt die History
$filename
] )Diese Funktion schreibt die Kommandozeilen-History in eine Datei.
filename
Pfad zur Datei, in der gespeichert werden soll.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4, PHP 5)
readline — Liest eine Zeile
$prompt
] )Liest eine einzelne Zeile vom Benutzer ein. Sie müssen diese Zeile selbst mittels readline_add_history() zur History hinzufügen.
prompt
Sie können eine Zeichenkette angeben, mit dem Sie den Benutzer zur Eingabe auffordern.
Gibt eine einzelne Zeile des Benutzers zurück. Der Zeile, die Sie erhalten, fehlt das abschließende Zeichen für einen Zeilenvorschub.
Beispiel #1 readline()-Beispiel
<?php
// Drei Kommandos vom Benutzer abfragen
for ($i=0; $i < 3; $i++) {
$line = readline("Command: ");
readline_add_history($line);
}
// History ausgeben
print_r(readline_list_history());
// Variablen ausgeben
print_r(readline_info());
?>
Die bzip2-Funktionen werden benutzt, um transparent bzip2 (.bz2)-komprimierte Dateien lesen und schreiben zu können.
Dieses Module nutzt die Funktionen der » bzip2-Bibliothek von Julian Seward. Dabei benötigt das Modul eine Version der bzip2/libbzip2 >= 1.0.x.
Die Bzip2-Unterstützung ist in PHP nicht standardmäßig aktiviert. Es ist erforderlich, die Option --with-bz2[=DIR] beim Kompilieren von PHP anzugeben.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
This extension defines one resource type: a file pointer identifying the bz2-file to work on.
Diese Erweiterung definiert keine Konstanten.
Dieses Beispiel öffnet eine temporäre Datei und schreibt einen Teststring in diese, danach wird der Inhalt der Datei ausgegeben.
Beispiel #1 Ein kleines bzip2()-Beispiel
<?php
$filename = "/tmp/testfile.bz2";
$str = "Das ist ein Test.\n";
// Datei zum Schreiben öffnen
$bz = bzopen($filename, "w");
// Zeichenkette in Datei schreiben
bzwrite($bz, $str);
// Datei schließen
bzclose($bz);
// Datei zum Lesen öffnen
$bz = bzopen($filename, "r");
// 10 Zeichen lesen
echo bzread($bz, 10);
/* Ausgabe bis zum Dateiende (oder der nächsten 1024 Zeichen) und schließen
der Datei. */
echo bzread($bz);
bzclose($bz);
?>
(PHP 4 >= 4.0.4, PHP 5)
bzclose — Schließt eine bzip2-Datei
$bz
)Schließt die vom übergebenen Dateizeiger bezeichnete bzip2-Datei.
bz
Der Dateizeiger. Dieser muss eine valide Ressource sein und muss auf eine Datei zeigen, die erfolgreich mittels bzopen() geöffnet wurde.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4 >= 4.0.4, PHP 5)
bzcompress — Komprimiert eine Zeichenkette in bzip2-encodierte Daten
bzcompress() komprimiert den übergebenen String und gibt ihn als bzip2-komprimierte Daten zurück.
source
Die zu komprimierende Zeichenkette.
blocksize
Spezifiziert die Blockgröße während der Komprierung und darf zwischen 1 und 9 liegen. 9 ist dabei die beste Komprimierung, die allerdings mehr Ressourcen benötigt.
workfactor
Bestimmt, wie die Funktion sich im schlimmsten Fall, sich stark wiederholender Eingabedaten, verhält. Der Wert darf zwischen 0 und 250 liegen, wobei 0 ein spezieller Wert ist.
Unabhängig vom workfactor-Parameter
wird die generierte Ausgabe stets gleich bleiben.
Die komprimierte Zeichenkette oder die Fehlernummer im Falle eines Fehlers.
Beispiel #1 Komprimierung von Daten
<?php
$str = "sample data";
$bzstr = bzcompress($str, 9);
echo $bzstr;
?>
(PHP 4 >= 4.0.4, PHP 5)
bzdecompress — Dekomprimiert bzip2-kodierte Daten
bzdecompress() dekomprimiert die übergebene Zeichenkette, die bzip2-kodierte Daten enthält.
source
Zu dekomprimierende Zeichenkette
small
Wenn TRUE, wird ein alternativer Dekompressionsalgorithmus
verwendet, der weniger Speicher benötigt. Es werden dann nur
maximal etwa 2300K benötigt, allerdings findet die Dekompression
nur mit etwa halber Geschwindigkeit statt.
Weitere Details finden sich in der » bzip2-Dokumentation.
Die dekomprimierte Zeichenkette oder Fehlernummer im Falle eines Fehlers.
Beispiel #1 Dekomprimieren einer Zeichenkette
<?php
$start_str = "Ist dies nicht ein ernstes Gesicht?";
$bzstr = bzcompress($start_str);
echo "Komprimierte Zeichenkette: ";
echo $bzstr;
echo "\n<br />\n";
$str = bzdecompress($bzstr);
echo "Dekomprimierte Zeichenkette: ";
echo $str;
echo "\n<br />\n";
?>
(PHP 4 >= 4.0.4, PHP 5)
bzerrno — Gibt eine bzip2-Fehlernummer zurück
$bz
)Gibt die Fehlernummer eines beliebigen bzip2-Fehlers, der von übergebenen Dateizeiger zurückgegeben wird.
Gibt die Fehlernummer als Integer zurück.
(PHP 4 >= 4.0.4, PHP 5)
bzerror — Gibt die bzip2-Fehlernummer und die -Fehlermeldung in einem Array zurück
$bz
)Gibt die Fehlernummer und die Fehlermeldung eines beliebigen vom gegebenen Dateizeiger gelieferten bzip2-Fehlers zurück.
Gibt ein assoziatives Array zurück, das die Fehlernummer im errno-Eintrag und die Fehlermeldung im errstr-Eintrag enthält.
Beispiel #1 bzerror()-Beispiel
<?php
$error = bzerror($bz);
echo $error["errno"];
echo $error["errstr"];
?>
(PHP 4 >= 4.0.4, PHP 5)
bzerrstr — Gibt eine bzip2-Fehlermeldung zurück
$bz
)Gibt die Fehlermeldung eines bzip2-Fehlers zurück, der vom gegebenen Dateizeiger zurückgegeben wird.
Gibt eine Zeichenkette mit der Fehlermeldung zurück.
(PHP 4 >= 4.0.4, PHP 5)
bzflush — Erzwingt das Schreiben aller gepufferten Daten
$bz
)
Erzwingt das Schreiben aller gepufferten bzip2-Daten für den Dateizeiger
bz.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 4 >= 4.0.4, PHP 5)
bzopen — Öffnet eine bzip2-komprimierte Datei
$filename
, string $mode
)Öffnet eine bzip2-Datei (.bz2) zum Lesen oder Schreiben.
filename
Name der zu öffnenden Datei.
mode
Ähnlich zur Funktion fopen() wird 'r' für
lesenden und 'w' für schreibenden Zugriff unterstützt. Andere
Werte führen dazu, daß bzopen FALSE zurückgibt.
Wenn das Öffnen fehlschlägt, gibt bzopen()
FALSE zurück, andernfalls wird ein Zeiger auf die geöffnete
Datei zurückgegeben.
Beispiel #1 bzopen()-Beispiel
<?php
$file = "/tmp/foo.bz2";
$bz = bzopen($file, "r") or die("$file konnte nicht zum Lesen geöffnet werden");
bzclose($bz);
?>
(PHP 4 >= 4.0.4, PHP 5)
bzread — Binär-sicheres Lesen aus einer bzip2-Datei
$bz
[, int $length = 1024
] )bzread() liest Daten vom übergebenen bzip2-Dateizeiger.
Das Lesen wird beendet, wenn length (unkomprimierte)
Bytes gelesen wurden oder das Ende der Datei (EOF) erreicht ist, je nachdem,
welcher Fall zuerst auftritt.
bz
Der Dateizeiger. Es muss ein valider Zeiger sein und auf eine Datei zeigen, die erfolgreich mittels bzopen() geöffnet wurde.
length
Wenn nichts angegeben ist, liest bzread() 1024 (unkomprimierte) Bytes auf einmal. Maximal 8192 unkomprimierte Bytes können auf einmal gelesen werden.
Gibt die unkomprimierten Daten oder im Fehlerfall FALSE zurück.
Beispiel #1 bzread()-Beispiel
<?php
$file = "/tmp/foo.bz2";
$bz = bzopen($file, "r") or die("Konnte $file nicht öffnen");
$decompressed_file = '';
while (!feof($bz)) {
$decompressed_file .= bzread($bz, 4096);
}
bzclose($bz);
echo "Der Inhalt von $file ist: <br />\n";
echo $decompressed_file;
?>
(PHP 4 >= 4.0.4, PHP 5)
bzwrite — Binär-sicheres Schreiben einer bzip2-Datei
$bz
, string $data
[, int $length
] )bzwrite() schreibt eine Zeichenkette in den übergebenen bzip2-Dateistream.
bz
Der Dateizeiger. Muss gültig sein und auf eine erfolgreich von bzopen() geöffnete Datei zeigen.
data
Die zu schreibenden Daten.
length
Wird dieser Parameter übergeben, stoppt das Schreiben nach
length (unkomprimiert) geschriebenen
Bytes oder wenn alle Bytes aus data
geschrieben wurden, je nachdem, welcher Fall zuerst auftritt.
Gibt die Anzahl der geschriebenen Bytes bzw. FALSE im Falle eines
Fehlers zurück.
Beispiel #1 bzwrite()-Beispiel
<?php
$str = "uncompressed data";
$bz = bzopen("/tmp/foo.bz2", "w");
bzwrite($bz, $str, strlen($str));
bzclose($bz);
?>
LZF is a very fast compression algorithm, ideal for saving space with only slight speed cost. It can be optimized for speed or space at the time of compilation. This extension is using » liblzf library by Marc Lehmann for its operations.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
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/lzf.
In order to use these functions you must compile PHP with lzf support by using the --with-lzf[=DIR] configure option. You may also pass --enable-lzf-better-compression to optimize LZF for space rather than speed.
Windows users will enable php_lzf.dll inside of php.ini in order to use these functions. Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
Diese Erweiterung definiert keine Ressource-Typen.
Diese Erweiterung definiert keine Konstanten.
(PECL lzf >= 0.1.0)
lzf_compress — LZF compression
$data
)
lzf_compress() compresses the given
data string using LZF encoding.
data
The string to compress.
Returns the compressed data or FALSE if an error occurred.
(PECL lzf >= 0.1.0)
lzf_decompress — LZF decompression
$data
)
lzf_compress() decompresses the given
data string containing lzf encoded data.
data
The compressed string.
Returns the decompressed data or FALSE if an error occurred.
(PECL lzf >= 1.0.0)
lzf_optimized_for — Determines what LZF extension was optimized for
Determines what was LZF extension optimized for during compilation.
Returns 1 if LZF was optimized for speed, 0 for compression.
The phar extension provides a way to put entire PHP applications into a single file called a "phar" (PHP Archive) for easy distribution and installation. In addition to providing this service, the phar extension also provides a file-format abstraction method for creating and manipulating tar and zip files through the PharData class, much as PDO provides a unified interface for accessing different databases. Unlike PDO, which cannot convert between different databases, Phar also can convert between tar, zip and phar file formats with a single line of code. see Phar::convertToExecutable() for one example.
What is phar? Phar archives are best characterized as a convenient way to group several files into a single file. As such, a phar archive provides a way to distribute a complete PHP application in a single file and run it from that file without the need to extract it to disk. Additionally, phar archives can be executed by PHP as easily as any other file, both on the commandline and from a web server. Phar is kind of like a thumb drive for PHP applications.
Phar implements this functionality through a Stream Wrapper. Normally, to use an external file within a PHP script, you would use include
Beispiel #1 Using an external file
<?php
include '/path/to/external/file.php';
?>
PHP can be thought of as actually translating /path/to/external/file.php into a stream wrapper as file:///path/to/external/file.php, and under the hood it does in fact use the plain file stream wrapper stream functions to access all local files.
To use a file named file.php contained with a phar archive /path/to/myphar.phar, the syntax is very similar to the file:// syntax above.
Beispiel #2 Using a file within a phar archive
<?php
include 'phar:///path/to/myphar.phar/file.php';
?>
In fact, one can treat a phar archive exactly as if it were an external disk, using any of fopen()-related functions, opendir() and mkdir()-related functions to read, change, or create new files and directories within the phar archive. This allows complete PHP applications to be distributed in a single file and run directly from that file.
The most common usage for a phar archive is to distribute a complete application in a single file. For instance, the PEAR Installer that is bundled with PHP versions is distributed as a phar archive. To use a phar archive distributed in this way, the archive can be executed on the command-line or via a web server.
Phar archives can be distributed as tar archives, zip archives, or as the custom phar file format designed specifically for the phar extension. Each file format has advantages and disadvantages. The tar and zip file formats can be read or extracted by any third-party tool that can read the format, but require the phar extension in order to run with PHP. The phar file format is customized and unique to the phar extension, and can only be created by the phar extension or the PEAR package » PHP_Archive, but has the advantage that applications created in this format will run even if the phar extension is not enabled.
In other words, even with the phar extension disabled, one can execute or include a phar-based archive. Accessing individual files within a phar archive is only possible with the phar extension unless the phar archive was created by PHP_Archive.
The phar extension is also capable of converting a phar archive from tar to zip or to phar file format in a single command:
Beispiel #3 Converting a phar archive from phar to tar file format
<?php
$phar = new Phar('myphar.phar');
$pgz = $phar->convertToExecutable(Phar::TAR, Phar::GZ); // makes myphar.phar.tar.gz
?>
Phar can compress individual files or an entire archive using gzip compression or bzip2 compression, and can verify archive integrity automatically through the use of md5(), sha1(), sha256(), or sha512() signatures.
Lastly, the Phar extension is security-conscious, and disables write access to executable phar archives by default, and requires system-level disabling of the phar.readonly php.ini setting in order to create or modify phar archives. Normal tar and zip archives without an executable stub can always be created or modified using the PharData class.
If you are creating applications for distribution, you will want to read How to create Phar Archives. If you want more information on the differences between the three file formats that phar supports, you should read Phar, Tar and Zip.
If you are using phar applications, there are helpful tips in How to use Phar Archives
The word phar is a contraction of PHP and Archive and is based loosely on the jar (Java Archive) familiar to Java developers.
The implementation for Phar archives is based on the PEAR package » PHP_Archive, and the implementation details are similar, although the Phar extension is much more powerful. In addition, the Phar extension allows most PHP applications to be run unmodified while PHP_Archive-based phar archives often require extensive modification in order to work.
Phar requires PHP 5.2.0 or newer. Additional features require the SPL extension in order to take advantage of iteration and array access to a Phar's file contents. The phar stream does not require any additional extensions to function.
You may optionally wish to enable the zlib and bzip2 extensions to take advantage of compressed phar support. In addition, to take advantage of OpenSSL signing, the OpenSSL extension must be enabled.
Note that a bug in the zlib.deflate stream filter fixed in PHP version 5.2.6 and newer may cause truncation of gzip and bzip2-compressed phar archives.
The Phar extension is built into PHP as of PHP version 5.3.0. Phar may be installed via the PECL extension with previous PHP versions, and the » Phar PECL page contains further information and history.
Windows users must include the php_phar.dll file within php.ini to use this extension.
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| phar.readonly | "1" | PHP_INI_ALL | |
| phar.require_hash | "1" | PHP_INI_ALL | |
| phar.extract_list | "" | PHP_INI_ALL | Available from phar 1.1.0 to 1.2.3, removed in 2.0.0. |
| phar.cache_list | "" | PHP_INI_SYSTEM | Available from phar 2.0.0. |
Hier eine kurze Erklärung der Konfigurationsoptionen:
phar.readonly
boolean
This option disables creation or modification of Phar archives using the phar stream or Phar object's write support. This setting should always be enabled on production machines, as the phar extension's convenient write support could allow straightforward creation of a php-based virus when coupled with other common security vulnerabilities.
Hinweis:
This setting can only be unset in php.ini due to security reasons. If phar.readonly is disabled in php.ini, the user may enable phar.readonly in a script or disable it later. If phar.readonly is enabled in php.ini, a script may harmlessly "re-enable" the INI variable, but may not disable it.
phar.require_hash
boolean
This option will force all opened Phar archives to contain some kind of signature (currently MD5, SHA1, SHA256 and SHA512 are supported), and will refuse to process any Phar archive that does not contain a signature.
Hinweis:
This setting can only be unset in php.ini due to security reasons. If phar.require_hash is disabled in php.ini, the user may enable phar.require_hash in a script or disable it later. If phar.require_hash is enabled in php.ini, a script may harmlessly "re-enable" the INI variable, but may not disable it.
This setting does not affect reading plain tar files with the PharData class.
phar.extract_list
string
This INI setting has been removed as of phar 2.0.0
Allows mappings from a full path to a phar archive or its alias to the location of its extracted files. The format of the parameter is name=archive,name2=archive2. This allows extraction of phar files to disk, and allows phar to act as a kind of mapper to extracted disk files. This is often done for performance reasons, or to assist with debugging a phar.
Beispiel #1 phar.extract_list usage example
in php.ini:
phar.extract_list = archive=/full/path/to/archive/,arch2=/full/path/to/arch2
<?php
include "phar://archive/content.php";
include "phar://arch2/foo.php";
?>
phar.cache_list
string
This INI setting was added in phar 2.0.0
Allows mapping phar archives to be pre-parsed at web server startup, providing a performance improvement that brings running files out of a phar archive very close to the speed of running those files from a traditional disk-based installation.
Beispiel #2 phar.cache_list usage example
in php.ini (windows): phar.cache_list =C:\path\to\phar1.phar;C:\path\to\phar2.phar in php.ini (unix): phar.cache_list =/path/to/phar1.phar:/path/to/phar2.phar
The Phar extension provides the phar stream, which allows accessing files contained within a phar transparently. See also the description of the Phar file format.
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.
| Constant | Value | Description |
|---|---|---|
Phar::NONE
(integer)
|
0x00000000 | no compression |
Phar::COMPRESSED
(integer)
|
0x0000F000 | bitmask that can be used with file flags to determine if any compression is present |
Phar::GZ
(integer)
|
0x00001000 | zlib (gzip) compression |
Phar::BZ2
(integer)
|
0x00002000 | bzip2 compression |
| Constant | Value | Description |
|---|---|---|
Phar::SAME
(integer)
|
0 | retain the same file format |
Phar::PHAR
(integer)
|
1 | phar file format |
Phar::TAR
(integer)
|
2 | tar file format |
Phar::ZIP
(integer)
|
3 | zip file format |
| Constant | Value | Description |
|---|---|---|
Phar::MD5
(integer)
|
0x0001 | signature with md5 hash algorithm |
Phar::SHA1
(integer)
|
0x0002 | signature with sha1 hash algorithm |
Phar::SHA256
(integer)
|
0x0003 | signature with sha256 hash algorithm (requires hash extension) |
Phar::SHA512
(integer)
|
0x0004 | signature with sha512 hash algorithm (requires hash extension) |
Phar::OPENSSL
(integer)
|
0x0010 | signature with OpenSSL public/private key pair. This is a true, asymmetric key signature. |
| Constant | Value | Description |
|---|---|---|
Phar::PHP
(integer)
|
1 | used to instruct the mimeoverrides parameter of Phar::webPhar() that the extension should be parsed as a PHP file |
Phar::PHPS
(integer)
|
2 | used to instruct the mimeoverrides parameter of Phar::webPhar() that the extension should be parsed as a PHP source file through highlight_file() |
Phar archives are similar in concept to Java JAR archives, but are tailored to the needs and to the flexibility of PHP applications. A Phar archive is used to distribute a complete PHP application or library in a single file. A Phar archive application is used exactly like any other PHP application:
php coolapplication.phar
Using a Phar archive library is identical to using any other PHP library:
<?php
include 'coollibrary.phar';
?>
The phar stream wrapper provides the core of the phar extension, and is explained in detail here. The phar stream wrapper allows accessing the files within a phar archive using PHP's standard file functions fopen(), opendir(), and others that work on regular files. The phar stream wrapper supports all read/write operations on both files and directories.
<?php
include 'phar://coollibrary.phar/internal/file.php';
header('Content-type: image/jpeg');
// phars can be accessed by full path or by alias
echo file_get_contents('phar:///fullpath/to/coollibrary.phar/images/wow.jpg');
?>
The Phar class implements advanced functionality for accessing files and for creating phar archives. The Phar class is explained in detail here.
<?php
try {
// open an existing phar
$p = new Phar('coollibrary.phar', 0);
// Phar extends SPL's DirectoryIterator class
foreach (new RecursiveIteratorIterator($p) as $file) {
// $file is a PharFileInfo class, and inherits from SplFileInfo
echo $file->getFileName() . "\n";
echo file_get_contents($file->getPathName()) . "\n"; // display contents;
}
if (isset($p['internal/file.php'])) {
var_dump($p['internal/file.php']->getMetadata());
}
// create a new phar - phar.readonly must be 0 in php.ini
// phar.readonly is enabled by default for security reasons.
// On production servers, Phars need never be created,
// only executed.
if (Phar::canWrite()) {
$p = new Phar('newphar.tar.phar', 0, 'newphar.tar.phar');
// make this a tar-based phar archive, compressed with gzip compression (.tar.gz)
$p = $p->convertToExecutable(Phar::TAR, Phar::GZ);
// create transaction - nothing is written to newphar.phar
// until stopBuffering() is called, although temporary storage is needed
$p->startBuffering();
// add all files in /path/to/project, saving in the phar with the prefix "project"
$p->buildFromIterator(new RecursiveIteratorIterator(new DirectoryIterator('/path/to/project')), '/path/to/');
// add a new file via the array access API
$p['file1.txt'] = 'Information';
$fp = fopen('hugefile.dat', 'rb');
// copy all data from the stream
$p['data/hugefile.dat'] = $fp;
if (Phar::canCompress(Phar::GZ)) {
$p['data/hugefile.dat']->compress(Phar::GZ);
}
$p['images/wow.jpg'] = file_get_contents('images/wow.jpg');
// any value can be saved as file-specific meta-data
$p['images/wow.jpg']->setMetadata(array('mime-type' => 'image/jpeg'));
$p['index.php'] = file_get_contents('index.php');
$p->setMetadata(array('bootstrap' => 'index.php'));
// save the phar archive to disk
$p->stopBuffering();
}
} catch (Exception $e) {
echo 'Could not open Phar: ', $e;
}
?>
In addition, verification of phar file contents can be done using any of the supported symmetric hash algorithms (MD5, SHA1, SHA256 and SHA512 if ext/hash is enabled) and using asymmetric public/private key signing using OpenSSL (new in Phar 2.0.0). To take advantage of OpenSSL signing, you need to generate a public/private key pair, and use the private key to set the signature using Phar::setSignatureAlgorithm(). In addition, the public key as extracted using this code:
<?php
$public = openssl_get_publickey(file_get_contents('private.pem'));
$pkey = '';
openssl_pkey_export($public, $pkey);
?>
As of version 2.0.0, The Phar class also provides 3 static methods, Phar::webPhar(), Phar::mungServer() and Phar::interceptFileFuncs() that are crucial to packaging up PHP applications designed for usage on regular filesystems and for web-based applications. Phar::webPhar() implements a front controller that routes HTTP calls to the correct location within the phar archive. Phar::mungServer() is used to modify the values of the $_SERVER array to trick applications that process these values. Phar::interceptFileFuncs() instructs Phar to intercept calls to fopen(), file_get_contents(), opendir(), and all of the stat-based functions (file_exists(), is_readable() and so on) and route all relative paths to locations within the phar archive.
As an example, packaging up a release of the popular phpMyAdmin application for use as a phar archive requires only this simple script and then phpMyAdmin.phar.tar.php can be accessed as a regular file from your web server after modifying the user/password:
<?php
@unlink('phpMyAdmin.phar.tar.php');
copy('phpMyAdmin-2.11.3-english.tar.gz', 'phpMyAdmin.phar.tar.php');
$a = new Phar('phpMyAdmin.phar.tar.php');
$a->startBuffering();
$a["phpMyAdmin-2.11.3-english/config.inc.php"] = '<?php
/* Servers configuration */
$i = 0;
/* Server localhost (config:root) [1] */
$i++;
$cfg[\'Servers\'][$i][\'host\'] = \'localhost\';
$cfg[\'Servers\'][$i][\'extension\'] = \'mysqli\';
$cfg[\'Servers\'][$i][\'connect_type\'] = \'tcp\';
$cfg[\'Servers\'][$i][\'compress\'] = false;
$cfg[\'Servers\'][$i][\'auth_type\'] = \'config\';
$cfg[\'Servers\'][$i][\'user\'] = \'root\';
$cfg[\'Servers\'][$i][\'password\'] = \'\';
/* End of servers configuration */
if (strpos(PHP_OS, \'WIN\') !== false) {
$cfg[\'UploadDir\'] = getcwd();
} else {
$cfg[\'UploadDir\'] = \'/tmp/pharphpmyadmin\';
@mkdir(\'/tmp/pharphpmyadmin\');
@chmod(\'/tmp/pharphpmyadmin\', 0777);
}';
$a->setStub('<?php
Phar::interceptFileFuncs();
Phar::webPhar("phpMyAdmin.phar", "phpMyAdmin-2.11.3-english/index.php");
echo "phpMyAdmin is intended to be executed from a web browser\n";
exit -1;
__HALT_COMPILER();
');
$a->stopBuffering();
?>
The Phar stream wrapper fully supports fopen() for read and write (not append), unlink(), stat(), fstat(), fseek(), rename() and directory stream operations opendir() and as of version 2.0.0, rmdir() and mkdir().
Individual file compression and per-file metadata can also be manipulated in a Phar archive using stream contexts:
<?php
$context = stream_context_create(array('phar' =>
array('compress' => Phar::GZ)),
array('metadata' => array('user' => 'cellog')));
file_put_contents('phar://my.phar/somefile.php', 0, $context);
?>
The phar stream wrapper does not operate on remote files, and cannot operate on remote files, and so is allowed even when the allow_url_fopen and allow_url_include INI options are disabled.
Although it is possible to create phar archives from scratch just using stream operations, it is best to use the functionality built into the Phar class. The stream wrapper is best used for read-only operations.
The Phar class supports reading and manipulation of Phar archives, as well as iteration through inherited functionality of the RecursiveDirectoryIterator class. With support for the ArrayAccess interface, files inside a Phar archive can be accessed as if they were part of an associative array.
The PharData class extends the Phar, and allows creating and modifying non-executable (data) tar and zip archives even if phar.readonly=1 in php.ini. As such, PharData::setAlias() and PharData::setStub() are both disabled as the concept of alias and stub are unique to executable phar archives.
It is important to note that when creating a Phar archive, the full path should be passed to the Phar object constructor. Relative paths will fail to initialize.
Assuming that $p is a Phar object initialized as follows:
<?php
$p = new Phar('/path/to/myphar.phar', 0, 'myphar.phar');
?>
An empty Phar archive will be created at /path/to/myphar.phar, or if /path/to/myphar.phar already exists, it will be opened again. The literal myphar.phar demonstrates the concept of an alias that can be used to reference /path/to/myphar.phar in URLs as in:
<?php
// these two calls to file_get_contents() are equivalent if
// /path/to/myphar.phar has an explicit alias of "myphar.phar"
// in its manifest, or if the phar was initialized with the
// previous example's Phar object setup
$f = file_get_contents('phar:///path/to/myphar.phar/whatever.txt');
$f = file_get_contents('phar://myphar.phar/whatever.txt');
?>
With the newly created $p Phar object, the following is possible:
In addition, the Phar object is the only way to access Phar-specific metadata, through Phar::getMetadata(), and the only way to set or retrieve a Phar archive's PHP loader stub through Phar::getStub() and Phar::setStub(). Additionally, compression for the entire Phar archive at once can only be manipulated using the Phar class.
The full list of Phar object functionality is documented below.
The PharFileInfo class extends the SplFileInfo class, and adds several methods for manipulating Phar-specific details of a file contained within a Phar, such as manipulating compression and metadata.
To be written fully in the near future. Before reading this, be sure to read How to use Phar Archives.
A great place to start is by reading about Phar::buildFromIterator(), and the specifics of the file format choices available for archives. A healthy understanding of what a stub is and does is crucial to phar archive creation, and so Phar::setStub() and Phar::createDefaultStub() are good places to start as well. If you are distributing a web-based application, it is crucial to know about Phar::webPhar() and related method Phar::mungServer(). Any application that accesses its own files should also consider using Phar::interceptFileFuncs().
All Phar archives contain three to four sections:
a stub
a manifest describing the contents
the file contents
[optional] a signature for verifying Phar integrity (phar file format only)
A Phar's stub is a simple PHP file. The smallest possible stub follows:
<?php __HALT_COMPILER();
A stub must contain as a minimum, the __HALT_COMPILER(); token at its conclusion. Typically, a stub will contain loader functionality like so:
<?php
Phar::mapPhar();
include 'phar://myphar.phar/index.php';
__HALT_COMPILER();
There are no restrictions on the contents of a Phar stub, except for the requirement
that it conclude with __HALT_COMPILER();. The closing PHP tag
?>
?>
In a tar or zip-based phar archive, the stub is stored in the .phar/stub.php file. The default stub for phar-based Phar archives contains approximately 7k of code to extract the contents of the phar and execute them. See Phar::createDefaultStub() for more detail.
The phar alias is stored in a tar or zip-based phar archive in the .phar/alias.txt file as plain text.
What are the good and the bad things about the three supported file formats in the phar extension? This table attempts to address that question.
| Feature | Phar | Tar | Zip |
|---|---|---|---|
| Standard File Format | No | Yes | Yes |
| Can be executed without the Phar Extension [1] | Yes | No | No |
| Per-file compression | Yes | No | Yes |
| Whole-archive compression | Yes | Yes | No |
| Whole-archive signature validation | Yes | Yes | Yes (PHP 5.3.1+) |
| Web-specific application support | Yes | Yes | Yes |
| Per-file Meta-data | Yes | Yes | Yes |
| Whole-Archive Meta-data | Yes | Yes | Yes |
| Archive creation/modification [2] | Yes | Yes | Yes |
| Full support for all stream wrapper functions | Yes | Yes | Yes |
| Can be created/modified even if phar.readonly=1 [3] | No | Yes | Yes |
[1] PHP can only directly access the contents of a Phar archive without the Phar extension if it is using a stub that extracts the contents of the phar archive. The stub created by Phar::createDefaultStub() extracts the phar archive and runs its contents from a temporary directory if no phar extension is found.
[2] All write access requires phar.readonly to be disabled in php.ini or on the command-line directly.
[3] Only tar and zip archives without .phar in their filename and without an executable stub .phar/stub.php can be created if phar.readonly=1.
Archives based on the tar file format follow the more modern USTAR file format. The design of the tar file header makes them more efficient to access than the zip file format, and almost as efficient as the phar file format. File names are limited to 255 bytes, including full path within the phar archive. There is no limit on the number of files within a tar-based phar archive. These archives can fully compressed in gzip or bzip2 format and still be executed by the Phar extension.
To compress an entire archive, use Phar::compress(). To decompress an entire archive, use Phar::decompress().
Archives based on the zip file format support several features built into the zip file format. Per-file and whole-archive metadata is stored in the zip file comment and zip archive comment as a serialized string. Pre-existing zip comments will be successfully read as a string. Per-file compression read/write is supported with zlib compression, and read access is supported with bzip2 compression. There is no limit on the number of files within a zip-based phar archive. Empty directories are stored in the zip archive as files with a trailing slash like my/directory/
The phar file format is literally laid out as stub/manifest/contents/signature, and stores the crucial information of what is included in the phar archive in its manifest.
The Phar manifest is a highly optimized format that allows per-file specification of file compression, file permissions, and even user-defined meta-data such as file user or group. All values greater than 1 byte are stored in little-endian byte order, with the exception of the API version, which for historical reasons is stored as 3 nibbles in big-endian order.
All unused flags are reserved for future use, and must not be used to store custom information. Use the per-file meta-data facility to store customized information about particular files.
The basic file format of a Phar archive manifest is as follows:
| Size in bytes | Description |
|---|---|
| 4 bytes | Length of manifest in bytes (1 MB limit) |
| 4 bytes | Number of files in the Phar |
| 2 bytes | API version of the Phar manifest (currently 1.0.0) |
| 4 bytes | Global Phar bitmapped flags |
| 4 bytes | Length of Phar alias |
| ?? | Phar alias (length based on previous) |
| 4 bytes | Length of Phar metadata (0 for none) |
| ?? | Serialized Phar Meta-data, stored in serialize() format |
| at least 24 * number of entries bytes | entries for each file |
Here are the bitmapped flags currently recognized by the Phar extension for the global Phar flat bitmap:
| Value | Description |
|---|---|
| 0x00010000 | If set, this Phar contains a verification signature |
| 0x00001000 | If set, this Phar contains at least 1 file that is compressed with zlib compression |
| 0x00002000 | If set, this Phar contains at least 1 file that is compressed with bzip compression |
Each file in the manifest contains the following information:
| Size in bytes | Description |
|---|---|
| 4 bytes | Filename length in bytes |
| ?? | Filename (length specified in previous) |
| 4 bytes | Un-compressed file size in bytes |
| 4 bytes | Unix timestamp of file |
| 4 bytes | Compressed file size in bytes |
| 4 bytes | CRC32 checksum of un-compressed file contents |
| 4 bytes | Bit-mapped File-specific flags |
| 4 bytes | Serialized File Meta-data length (0 for none) |
| ?? | Serialized File Meta-data, stored in serialize() format |
Note that as of API version 1.1.1, empty directories are stored as filenames with a trailing slash like my/directory/
The File-specific bitmap values recognized are:
| Value | Description |
|---|---|
| 0x000001FF | These bits are reserved for defining specific file permissions of a file. Permissions are used for fstat() and can be used to recreate desired permissions upon extraction. |
| 0x00001000 | If set, this file is compressed with zlib compression |
| 0x00002000 | If set, this file is compressed with bzip compression |
Phars containing a signature always have the signature appended to the end of the Phar archive after the loader, manifest, and file contents. The two signature formats supported at this time are MD5 and SHA1.
| Length in bytes | Description |
|---|---|
| 16 or 20 bytes | The actual signature, 20 bytes for an SHA1 signature, 16 bytes for an MD5 signature, 32 bytes for an SHA256 signature, and 64 bytes for an SHA512 signature. |
| 4 bytes | Signature flags. 0x0001 is used to define an MD5 signature, 0x0002 is used to define an SHA1 signature, 0x0004 is used to define an SHA256 signature, and 0x0008 is used to define an SHA512 signature. The SHA256 and SHA512 signature support was introduced with API version 1.1.0. |
| 4 bytes | Magic GBMB used to define the presence of a signature. |
(No version information available, might only be in SVN)
The Phar class provides a high-level interface to accessing and creating phar archives.
$format = 9021976
[, int $compression = 9021976
[, string $extension
]]] )$format = 9021976
[, int $compression = 9021976
[, string $extension
]]] )$alias
[, string $index = "index.php"
[, string $f404
[, array $mimetypes
[, array $rewrites
]]]]] )(Unknown)
Phar::addEmptyDir — Add an empty directory to the phar archive
$dirname
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
With this method, an empty directory is created with path dirname. This method is similar to ZipArchive::addEmptyDir().
dirname
The name of the empty directory to create in the phar archive
no return value, exception is thrown on failure.
Beispiel #1 A Phar::addEmptyDir() example
<?php
try {
$a = new Phar('/path/to/phar.phar');
$a->addEmptyDir('/full/path/to/file');
// demonstrates how this file is stored
$b = $a['full/path/to/file']->isDir();
} catch (Exception $e) {
// handle errors here
}
?>
(Unknown)
Phar::addFile — Add a file from the filesystem to the phar archive
$file
[, string $localname
] )Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
With this method, any file or URL can be added to the phar archive. If the optional second parameter localname is specified, the file will be stored in the archive with that name, otherwise the file parameter is used as the path to store within the archive. URLs must have a localname or an exception is thrown. This method is similar to ZipArchive::addFile().
file
Full or relative path to a file on disk to be added to the phar archive.
localname
Path that the file will be stored in the archive.
no return value, exception is thrown on failure.
Beispiel #1 A Phar::addFile() example
<?php
try {
$a = new Phar('/path/to/phar.phar');
$a->addFile('/full/path/to/file');
// demonstrates how this file is stored
$b = $a['full/path/to/file']->getContent();
$a->addFile('/full/path/to/file', 'my/file.txt');
$c = $a['my/file.txt']->getContent();
// demonstrate URL usage
$a->addFile('http://www.example.com', 'example.html');
} catch (Exception $e) {
// handle errors here
}
?>
(Unknown)
Phar::addFromString — Add a file from the filesystem to the phar archive
$localname
, string $contents
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
With this method, any string can be added to the phar archive. The file will be stored in the archive with localname as its path. This method is similar to ZipArchive::addFromString().
localname
Path that the file will be stored in the archive.
contents
The file contents to store
no return value, exception is thrown on failure.
Beispiel #1 A Phar::addFromString() example
<?php
try {
$a = new Phar('/path/to/phar.phar');
$a->addFromString('path/to/file.txt', 'my simple file');
$b = $a['path/to/file.txt']->getContent();
// to add contents from a stream handle for large files, use offsetSet()
$c = fopen('/path/to/hugefile.bin');
$a['largefile.bin'] = $c;
fclose($c);
} catch (Exception $e) {
// handle errors here
}
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::apiVersion — Returns the api version
Return the API version of the phar file format that will be used when creating phars. The Phar extension supports reading API version 1.0.0 or newer. API version 1.1.0 is required for SHA-256 and SHA-512 hash, and API version 1.1.1 is required to store empty directories.
The API version string as in "1.0.0".
Beispiel #1 A Phar::apiVersion() example
<?php
echo Phar::apiVersion();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
1.1.1
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::buildFromDirectory — Construct a phar archive from the files within a directory.
$base_dir
[, string $regex
] )Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Populate a phar archive from directory contents. The optional second parameter is a regular expression (pcre) that is used to exclude files. Any filename that matches the regular expression will be included, all others will be excluded. For more fine-grained control, use Phar::buildFromIterator().
base_dir
The full or relative path to the directory that contains all files to add to the archive.
regex
An optional pcre regular expression that is used to filter the list of files. Only file paths matching the regular expression will be included in the archive.
Phar::buildFromDirectory() returns an associative array mapping internal path of file to the full path of the file on the filesystem.
This method throws BadMethodCallException when unable to instantiate the internal directory iterators, or a PharException if there were errors saving the phar archive.
Beispiel #1 A Phar::buildFromDirectory() example
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
// add all files in the project
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
$phar2 = new Phar('project2.phar', 0, 'project2.phar');
// add all files in the project, only include php files
$phar2->buildFromDirectory(dirname(__FILE__) . '/project', '/\.php$/');
$phar2->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::buildFromIterator — Construct a phar archive from an iterator.
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Populate a phar archive from an iterator. Two styles of iterators are supported, iterators that map the filename within the phar to the name of a file on disk, and iterators like DirectoryIterator that return SplFileInfo objects. For iterators that return SplFileInfo objects, the second parameter is required.
iter
Any iterator that either associatively maps phar file to location or returns SplFileInfo objects
base_directory
For iterators that return SplFileInfo objects, the portion of each file's full path to remove when adding to the phar archive
Phar::buildFromIterator() returns an associative array mapping internal path of file to the full path of the file on the filesystem.
Beispiel #1 A Phar::buildFromIterator() with SplFileInfo
For most phar archives, the archive will reflect an actual directory layout, and the second style is the most useful. For instance, to create a phar archive containing the files in this sample directory layout:
/path/to/project/
config/
dist.xml
debug.xml
lib/
file1.php
file2.php
src/
processthing.php
www/
index.php
cli/
index.php
This code could be used to add these files to the "project.phar" phar archive:
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/project')),
'/path/to/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
The file project.phar can then be used immediately. Phar::buildFromIterator() does not set values such as compression, metadata, and this can be done after creating the phar archive.
As an interesting note, Phar::buildFromIterator() can also be used to copy the contents of an existing phar archive, as the Phar object descends from DirectoryIterator:
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new Phar('/path/to/anotherphar.phar')),
'phar:///path/to/anotherphar.phar/path/to/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
Beispiel #2 A Phar::buildFromIterator() with other iterators
The second form of the iterator can be used with any iterator that returns a key => value mapping, such as an ArrayIterator:
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'internal/file.php' => dirname(__FILE__) . '/somefile.php',
'another/file.jpg' => fopen('/path/to/bigfile.jpg', 'rb'),
)));
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
This method returns UnexpectedValueException when the
iterator returns incorrect values, such as an integer key instead of a
string, a BadMethodCallException when an
SplFileInfo-based iterator is passed without a base_directory
parameter, or a PharException if there were errors
saving the phar archive.
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::canCompress — Returns whether phar extension supports compression using either zlib or bzip2
$type = 0
] )This should be used to test whether compression is possible prior to loading a phar archive containing compressed files.
type
Either Phar::GZ or Phar::BZ2 can be used to test whether compression is possible with a specific compression algorithm (zlib or bzip2).
TRUE if compression/decompression is available, FALSE if not.
Beispiel #1 A Phar::canCompress() example
<?php
if (Phar::canCompress()) {
echo file_get_contents('phar://compressedphar.phar/internal/file.txt');
} else {
echo 'no compression available';
}
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::canWrite — Returns whether phar extension supports writing and creating phars
This static method determines whether write access has been disabled in the system php.ini via the phar.readonly ini variable.
TRUE if write access is enabled, FALSE if it is disabled.
Beispiel #1 A Phar::canWrite() example
<?php
if (Phar::canWrite()) {
file_put_contents('phar://myphar.phar/file.txt', 'hi there');
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::compress — Compresses the entire Phar archive using Gzip or Bzip2 compression
$compression
[, string $extension
] )Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
For tar-based and phar-based phar archives, this method compresses the entire archive using gzip compression or bzip2 compression. The resulting file can be processed with the gunzip command/bunzip command, or accessed directly and transparently with the Phar extension.
For Zip-based phar archives, this method fails with an exception. The zlib extension must be enabled to compress with gzip compression, the bzip2 extension must be enabled in order to compress with bzip2 compression. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
In addition, this method automatically renames the archive, appending .gz, .bz2 or removing the extension if passed Phar::NONE to remove compression. Alternatively, a file extension may be specified with the second parameter.
compression
Compression must be one of Phar::GZ, Phar::BZ2 to add compression, or Phar::NONE to remove compression.
extension
By default, the extension is .phar.gz or .phar.bz2 for compressing phar archives, and .phar.tar.gz or .phar.tar.bz2 for compressing tar archives. For decompressing, the default file extensions are .phar and .phar.tar.
Returns a Phar object.
Throws BadMethodCallException if the phar.readonly INI variable is on, the zlib extension is not available, or the bzip2 extension is not enabled.
Beispiel #1 A Phar::compress() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p1 = $p->compress(Phar::GZ); // copies to /path/to/my.phar.gz
$p2 = $p->compress(Phar::BZ2); // copies to /path/to/my.phar.bz2
$p3 = $p2->compress(Phar::NONE); // exception: /path/to/my.phar already exists
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::compressAllFilesBZIP2 — Compresses all files in the current Phar archive using Bzip2 compression
Hinweis:
Diese Methode wurde beginnend mit Version 2.0.0 der phar-Extension entfernt. Alternative Implementationen bieten Phar::compress(), Phar::decompress(), Phar::compressFiles() und Phar::decompressFiles().
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
This method compresses all files in the Phar archive using bzip2 compression. The bzip2 extension must be enabled to take advantage of this feature. In addition, if any files are already compressed using gzip compression, the zlib extension must be enabled in order to decompress the files prior to re-compressing with bzip2 compression. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, the bzip2 extension is not available, or if any files are compressed using gzip compression and the zlib extension is not enabled.
Beispiel #1 A Phar::compressAllFilesBZIP2() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressedBZIP2());
var_dump($file->isCompressedGZ());
}
$p->compressAllFilesBZIP2();
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressedBZIP2());
var_dump($file->isCompressedGZ());
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(10) "myfile.txt" bool(false) bool(false) bool(false) string(11) "myfile2.txt" bool(false) bool(false) bool(false) string(10) "myfile.txt" bool(true) bool(true) bool(false) string(11) "myfile2.txt" bool(true) bool(true) bool(false)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::compressAllFilesGZ — Compresses all files in the current Phar archive using Gzip compression
Hinweis:
Diese Methode wurde beginnend mit Version 2.0.0 der phar-Extension entfernt. Alternative Implementationen bieten Phar::compress(), Phar::decompress(), Phar::compressFiles() und Phar::decompressFiles().
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
For tar-based phar archives, this method compresses the entire archive using gzip compression. The resulting file can be processed with the gunzip command, or accessed directly and transparently with the Phar extension.
For Zip-based and phar-based phar archives, this method compresses all files in the Phar archive using gzip compression. The zlib extension must be enabled to take advantage of this feature. In addition, if any files are already compressed using bzip2 compression, the bzip2 extension must be enabled in order to decompress the files prior to re-compressing with gzip compression. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, the zlib extension is not available, or if any files are compressed using bzip2 compression and the bzip2 extension is not enabled.
Beispiel #1 A Phar::compressAllFilesGZ() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressedBZIP2());
var_dump($file->isCompressedGZ());
}
$p->compressAllFilesGZ();
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressedBZIP2());
var_dump($file->isCompressedGZ());
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(10) "myfile.txt" bool(false) bool(false) bool(false) string(11) "myfile2.txt" bool(false) bool(false) bool(false) string(10) "myfile.txt" bool(true) bool(false) bool(true) string(11) "myfile2.txt" bool(true) bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::compressFiles — Compresses all files in the current Phar archive
$compression
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
For tar-based phar archives, this method throws a BadMethodCallException, as compression of individual files within a tar archive is not supported by the file format. Use Phar::compress() to compress an entire tar-based phar archive.
For Zip-based and phar-based phar archives, this method compresses all files in the Phar archive using the specified compression. The zlib or bzip2 extensions must be enabled to take advantage of this feature. In addition, if any files are already compressed using bzip2/zlib compression, the respective extension must be enabled in order to decompress the files prior to re-compressing. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
compression
Compression must be one of Phar::GZ, Phar::BZ2 to add compression, or Phar::NONE to remove compression.
Es wird kein Wert zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, the zlib extension is not available, or if any files are compressed using bzip2 compression and the bzip2 extension is not enabled.
Beispiel #1 A Phar::compressFiles() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
$p->compressFiles(Phar::GZ);
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(10) "myfile.txt" bool(false) bool(false) bool(false) string(11) "myfile2.txt" bool(false) bool(false) bool(false) string(10) "myfile.txt" int(4096) bool(false) bool(true) string(11) "myfile2.txt" int(4096) bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::__construct — Construct a Phar archive object
$fname
[, int $flags
[, string $alias
]] )
fname
Path to an existing Phar archive or to-be-created archive
flags
Flags to pass to parent class RecursiveDirectoryIterator.
alias
Alias with which this Phar archive should be referred to in calls to stream functionality.
Throws BadMethodCallException if called twice, UnexpectedValueException if the phar archive can't be opened.
Beispiel #1 A Phar::__construct() example
<?php
try {
$p = new Phar('/path/to/my.phar', FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_FILENAME,
'my.phar');
} catch (UnexpectedValueException $e) {
die('Could not open my.phar');
} catch (BadMethodCallException $e) {
echo 'technically, this cannot happen';
}
// this works now
echo file_get_contents('phar://my.phar/example.txt');
// and works as if we had typed
echo file_get_contents('phar:///path/to/my.phar/example.txt');
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::convertToData — Convert a phar archive to a non-executable tar or zip file
$format = 9021976
[, int $compression = 9021976
[, string $extension
]]] )This method is used to convert an executable phar archive to either a tar or zip file. To make the tar or zip non-executable, the phar stub and phar alias files are removed from the newly created archive.
If no changes are specified, this method throws a BadMethodCallException if the archive is in phar file format. For archives in tar or zip file format, this method converts the archive to a non-executable archive.
If successful, the method creates a new archive on disk and returns a PharData object. The old archive is not removed from disk, and should be done manually after the process has finished.
format
This should be one of Phar::TAR
or Phar::ZIP. If set to NULL, the existing file format
will be preserved.
compression
This should be one of Phar::NONE for no whole-archive compression, Phar::GZ for zlib-based compression, and Phar::BZ2 for bzip-based compression.
extension
This parameter is used to override the default file extension for a converted archive. Note that .phar cannot be used anywhere in the filename for a non-executable tar or zip archive.
If converting to a tar-based phar archive, the default extensions are .tar, .tar.gz, and .tar.bz2 depending on specified compression. For zip-based archives, the default extension is .zip.
The method returns a PharData object on success and throws an exception on failure.
This method throws BadMethodCallException when unable to compress, an unknown compression method has been specified, the requested archive is buffering with Phar::startBuffering() and has not concluded with Phar::stopBuffering(), and a PharException if any problems are encountered during the phar creation process.
Beispiel #1 A Phar::convertToData() example
Using Phar::convertToData():
<?php
try {
$tarphar = new Phar('myphar.phar.tar');
// note that myphar.phar.tar is *not* unlinked
// convert it to the non-executable tar file format
// creates myphar.tar
$tar = $tarphar->convertToData();
// convert to non-executable zip format, creates myphar.zip
$zip = $tarphar->convertToData(Phar::ZIP);
// create myphar.tbz
$tgz = $tarphar->convertToData(Phar::TAR, Phar::BZ2, '.tbz');
// creates myphar.phar.tgz
$phar = $tarphar->convertToData(Phar::PHAR); // throws exception
} catch (Exception $e) {
// handle the error here
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::convertToExecutable — Convert a phar archive to another executable phar archive file format
$format = 9021976
[, int $compression = 9021976
[, string $extension
]]] )Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
This method is used to convert a phar archive to another file format. For instance, it can be used to create a tar-based executable phar archive from a zip-based executable phar archive, or from an executable phar archive in the phar file format. In addition, it can be used to apply whole-archive compression to a tar or phar-based archive.
If no changes are specified, this method throws a BadMethodCallException.
If successful, the method creates a new archive on disk and returns a Phar object. The old archive is not removed from disk, and should be done manually after the process has finished.
format
This should be one of Phar::PHAR, Phar::TAR,
or Phar::ZIP. If set to NULL, the existing file format
will be preserved.
compression
This should be one of Phar::NONE for no whole-archive compression, Phar::GZ for zlib-based compression, and Phar::BZ2 for bzip-based compression.
extension
This parameter is used to override the default file extension for a converted archive. Note that all zip- and tar-based phar archives must contain .phar in their file extension in order to be processed as a phar archive.
If converting to a phar-based archive, the default extensions are .phar, .phar.gz, or .phar.bz2 depending on the specified compression. For tar-based phar archives, the default extensions are .phar.tar, .phar.tar.gz, and .phar.tar.bz2. For zip-based phar archives, the default extension is .phar.zip.
The method returns a Phar object on success and throws an exception on failure.
This method throws BadMethodCallException when unable to compress, an unknown compression method has been specified, the requested archive is buffering with Phar::startBuffering() and has not concluded with Phar::stopBuffering(), an UnexpectedValueException if write support is disabled, and a PharException if any problems are encountered during the phar creation process.
Beispiel #1 A Phar::convertToExecutable() example
Using Phar::convertToExecutable():
<?php
try {
$tarphar = new Phar('myphar.phar.tar');
// convert it to the phar file format
// note that myphar.phar.tar is *not* unlinked
$phar = $tarphar->convertToExecutable(Phar::PHAR); // creates myphar.phar
$phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
// creates myphar.phar.tgz
$compressed = $phar->convertToExecutable(Phar::TAR, Phar::GZ, '.phar.tgz');
} catch (Exception $e) {
// handle the error here
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::copy — Copy a file internal to the phar archive to another new file within the phar
$oldfile
, string $newfile
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Copy a file internal to the phar archive to another new file within the phar. This is an object-oriented alternative to using copy() with the phar stream wrapper.
oldfile
newfile
returns TRUE on success, but it is safer to encase method call in a
try/catch block and assume success if no exception is thrown.
throws UnexpectedValueException if the source file does not exist, the destination file already exists, write access is disabled, opening either file fails, reading the source file fails, or a PharException if writing the changes to the phar fails.
Beispiel #1 A Phar::copy() example
This example shows using Phar::copy() and the equivalent stream wrapper performance of the same thing. The primary difference between the two approaches is error handling. All Phar methods throw exceptions, whereas the stream wrapper uses trigger_error().
<?php
try {
$phar = new Phar('myphar.phar');
$phar['a'] = 'hi';
$phar->copy('a', 'b');
echo $phar['b']; // outputs "hi"
} catch (Exception $e) {
// handle error
}
// the stream wrapper equivalent of the above code.
// E_WARNINGS are triggered on error rather than exceptions.
copy('phar://myphar.phar/a', 'phar//myphar.phar/c');
echo file_get_contents('phar://myphar.phar/c'); // outputs "hi"
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::count — Returns the number of entries (files) in the Phar archive
The number of files contained within this phar, or 0 (the number zero) if none.
Beispiel #1 A Phar::count() example
<?php
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
} catch (Exception $e) {
echo 'Could not create phar:', $e;
}
echo 'The new phar has ' . $p->count() . " entries\n";
$p['file.txt'] = 'hi';
echo 'The new phar has ' . $p->count() . " entries\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
The new phar has 0 entries The new phar has 1 entries
(Unknown)
Phar::createDefaultStub — Create a phar-file format specific stub
$indexfile
[, string $webindexfile
]] )This method is intended for creation of phar-file format-specific stubs, and is not intended for use with tar- or zip-based phar archives.
Phar archives contain a bootstrap loader, or stub written in PHP that is executed when the archive is executed in PHP either via include:
<?php
include 'myphar.phar';
?>
php myphar.phar
This method provides a simple and easy method to create a stub that will run a startup file from the phar archive. In addition, different files can be specified for running the phar archive from the command line versus through a web server. The loader stub also calls Phar::interceptFileFuncs() to allow easy bundling of a PHP application that accesses the file system. If the phar extension is not present, the loader stub will extract the phar archive to a temporary directory and then operate on the files. A shutdown function erases the temporary files on exit.
Returns a string containing the contents of a customized bootstrap loader (stub) that allows the created Phar archive to work with or without the Phar extension enabled.
Throws UnexpectedValueException if either parameter is longer than 400 bytes.
Beispiel #1 A Phar::createDefaultStub() example
<?php
try {
$phar = new Phar('myphar.phar');
$phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
} catch (Exception $e) {
// handle errors
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::decompress — Decompresses the entire Phar archive
$extension
] )Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
For tar-based and phar-based phar archives, this method decompresses the entire archive.
For Zip-based phar archives, this method fails with an exception. The zlib extension must be enabled to decompress an archive compressed with gzip compression, and the bzip2 extension must be enabled in order to decompress an archive compressed with bzip2 compression. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
In addition, this method automatically changes the file extension of the archive, .phar by default for phar archives, or .phar.tar for tar-based phar archives. Alternatively, a file extension may be specified with the second parameter.
extension
For decompressing, the default file extensions are .phar and .phar.tar. Use this parameter to specify another file extension. Be aware that all executable phar archives must contain .phar in their filename.
A Phar object is returned.
Throws BadMethodCallException if the phar.readonly INI variable is on, the zlib extension is not available, or the bzip2 extension is not enabled.
Beispiel #1 A Phar::decompress() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar.gz');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p3 = $p2->decompress(); // creates /path/to/my.phar
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::decompressFiles — Decompresses all files in the current Phar archive
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
For tar-based phar archives, this method throws a BadMethodCallException, as compression of individual files within a tar archive is not supported by the file format. Use Phar::compress() to compress an entire tar-based phar archive.
For Zip-based and phar-based phar archives, this method decompresses all files in the Phar archive. The zlib or bzip2 extensions must be enabled to take advantage of this feature if any files are compressed using bzip2/zlib compression. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, the zlib extension is not available, or if any files are compressed using bzip2 compression and the bzip2 extension is not enabled.
Beispiel #1 A Phar::decompressFiles() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p->compressFiles(Phar::GZ);
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
$p->decompressFiles();
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(10) "myfile.txt" int(4096) bool(false) bool(true) string(11) "myfile2.txt" int(4096) bool(false) bool(true) string(10) "myfile.txt" bool(false) bool(false) bool(false) string(11) "myfile2.txt" bool(false) bool(false) bool(false)
(PHP >= 5.3.0, PECL phar >= 1.2.0)
Phar::delMetadata — Deletes the global metadata of the phar
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Deletes the global metadata of the phar
returns TRUE on success, but it is better to check for thrown exception,
and assume success if none is thrown.
Throws PharException if errors occur while flushing changes to disk.
Beispiel #1 A Phar::delMetaData() example
<?php
try {
$phar = new Phar('myphar.phar');
var_dump($phar->getMetadata());
$phar->setMetadata("hi there");
var_dump($phar->getMetadata());
$phar->delMetadata();
var_dump($phar->getMetadata());
} catch (Exception $e) {
// handle errors
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
NULL string(8) "hi there" NULL
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::delete — Delete a file within a phar archive
$entry
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Delete a file within an archive. This is the functional equivalent of calling unlink() on the stream wrapper equivalent, as shown in the example below.
entry
Path within an archive to the file to delete.
returns TRUE on success, but it is better to check for thrown exception,
and assume success if none is thrown.
Throws PharException if errors occur while flushing changes to disk.
Beispiel #1 A Phar::delete() example
<?php
try {
$phar = new Phar('myphar.phar');
$phar->delete('unlink/me.php');
// this is equivalent to:
unlink('phar://myphar.phar/unlink/me.php');
} catch (Exception $e) {
// handle errors
}
?>
(Unknown)
Phar::extractTo — Extract the contents of a phar archive to a directory
$pathto
[, string|array $files
[, bool $overwrite = false
]] )Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Extract all files within a phar archive to disk. Extracted files and directories preserve permissions as stored in the archive. The optional parameters allow optional control over which files are extracted, and whether existing files on disk can be overwritten. The second parameter files can be either the name of a file or directory to extract, or an array of names of files and directories to extract. By default, this method will not overwrite existing files, the third parameter can be set to true to enable overwriting of files. This method is similar to ZipArchive::extractTo().
pathto
Path within an archive to the file to delete.
files
The name of a file or directory to extract, or an array of files/directories to extract
overwrite
Set to TRUE to enable overwriting existing files
returns TRUE on success, but it is better to check for thrown exception,
and assume success if none is thrown.
Throws PharException if errors occur while flushing changes to disk.
Beispiel #1 A Phar::extractTo() example
<?php
try {
$phar = new Phar('myphar.phar');
$phar->extractTo('/full/path'); // extract all files
$phar->extractTo('/another/path', 'file.txt'); // extract only file.txt
$phar->extractTo('/this/path',
array('file1.txt', 'file2.txt')); // extract 2 files only
$phar->extractTo('/third/path', null, true); // extract all files, and overwrite
} catch (Exception $e) {
// handle errors
}
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::getMetadata — Returns phar archive meta-data
Retrieve archive meta-data. Meta-data can be any PHP variable that can be serialized.
No parameters.
any PHP variable that can be serialized and is stored as meta-data for the Phar archive,
or NULL if no meta-data is stored.
Beispiel #1 A Phar::getMetadata() example
<?php
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p['file.php'] = '<?php echo "hello";';
$p->setMetadata(array('bootstrap' => 'file.php'));
var_dump($p->getMetadata());
} catch (Exception $e) {
echo 'Could not modify phar:', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(1) {
["bootstrap"]=>
string(8) "file.php"
}
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::getModified — Return whether phar was modified
This method can be used to determine whether a phar has either had an internal file deleted, or contents of a file changed in some way.
No parameters.
TRUE if the phar has been modified since opened, FALSE if not.
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::getSignature — Return MD5/SHA1/SHA256/SHA512/OpenSSL signature of a Phar archive
Returns the verification signature of a phar archive in a hexadecimal string.
Array with the opened archive's signature in hash key and MD5, SHA-1, SHA-256, SHA-512, or OpenSSL in hash_type. This signature is a hash calculated on the entire phar's contents, and may be used to verify the integrity of the archive. A valid signature is absolutely required of all executable phar archives if the phar.require_hash INI variable is set to true.
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::getStub — Return the PHP loader or bootstrap stub of a Phar archive
Phar archives contain a bootstrap loader, or stub written in PHP that is executed when the archive is executed in PHP either via include:
<?php
include 'myphar.phar';
?>
php myphar.phar
Returns a string containing the contents of the bootstrap loader (stub) of the current Phar archive.
Throws RuntimeException if it is not possible to read the stub from the Phar archive.
Beispiel #1 A Phar::getStub() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
echo $p->getStub();
echo "==NEXT==\n";
$p->setStub("<?php
function __autoload($class)
{
include 'phar://' . str_replace('_', '/', $class);
}
Phar::mapPhar('myphar.phar');
include 'phar://myphar.phar/startup.php';
__HALT_COMPILER(); ?>");
echo $p->getStub();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
<?php __HALT_COMPILER(); ?>
==NEXT==
<?php
function __autoload($class)
{
include 'phar://' . str_replace('_', '/', $class);
}
Phar::mapPhar('myphar.phar');
include 'phar://myphar.phar/startup.php';
__HALT_COMPILER(); ?>
(PHP >= 5.3.0, PECL phar >= 1.2.0)
Phar::getSupportedCompression — Return array of supported compression algorithms
No parameters.
Returns an array containing any of Phar::GZ or Phar::BZ2, depending on the availability of the zlib extension or the bz2 extension.
(PHP >= 5.3.0, PECL phar >= 1.1.0)
Phar::getSupportedSignatures — Return array of supported signature types
Return array of supported signature types
No parameters.
Returns an array containing any of MD5, SHA-1, SHA-256, SHA-512, or OpenSSL.
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::getVersion — Return version info of Phar archive
Returns the API version of an opened Phar archive.
The opened archive's API version. This is not to be confused with the API version that the loaded phar extension will use to create new phars. Each Phar archive has the API version hard-coded into its manifest. See Phar file format documentation for more information.
(PHP >= 5.3.0, PECL phar >= 1.2.0)
Phar::hasMetadata — Returns whether phar has global meta-data
Returns whether phar has global meta-data set.
No parameters.
Returns TRUE if meta-data has been set, and FALSE if not.
Beispiel #1 A Phar::hasMetadata() example
<?php
try {
$phar = new Phar('myphar.phar');
var_dump($phar->hasMetadata());
$phar->setMetadata(array('thing' => 'hi'));
var_dump($phar->hasMetadata());
$phar->delMetadata();
var_dump($phar->hasMetadata());
} catch (Exception $e) {
// handle error
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true) bool(false)
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::interceptFileFuncs — instructs phar to intercept fopen, file_get_contents, opendir, and all of the stat-related functions
instructs phar to intercept fopen(), readfile(), file_get_contents(), opendir(), and all of the stat-related functions. If any of these functions is called from within a phar archive with a relative path, the call is modified to access a file within the phar archive. Absolute paths are assumed to be attempts to load external files from the filesystem.
This function makes it possible to run PHP applications designed to run off of a hard disk as a phar application.
No parameters.
Beispiel #1 A Phar::interceptFileFuncs() example
<?php
Phar::interceptFileFuncs();
include 'phar://' . __FILE__ . '/file.php';
?>
Assuming that this phar is at /path/to/myphar.phar and it contains file.php and file2.txt, if file.php contains this code:
Beispiel #2 A Phar::interceptFileFuncs() example
<?php
echo file_get_contents('file2.txt');
?>
Normally PHP would search the current directory for file2.txt, which would translate as the directory of file.php, or the current directory of a command-line user. Phar::interceptFileFuncs() instructs PHP to consider the current directory to be phar:///path/to/myphar.phar/ and so opens phar:///path/to/myphar.phar/file2.txt in the above example code.
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::isBuffering — Used to determine whether Phar write operations are being buffered, or are flushing directly to disk
This method can be used to determine whether a Phar will save changes to disk immediately, or whether a call to Phar::stopBuffering() is needed to enable saving changes.
Phar write buffering is per-archive, buffering active for the foo.phar Phar archive does not affect changes to the bar.phar Phar archive.
Returns TRUE if the write operations are being buffer, FALSE otherwise.
Beispiel #1 A Phar::isBuffering() example
<?php
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p2 = new Phar('existingphar.phar');
$p['file1.txt'] = 'hi';
var_dump($p->isBuffering());
var_dump($p2->isBuffering());
?>
=2=
<?php
$p->startBuffering();
var_dump($p->isBuffering());
var_dump($p2->isBuffering());
$p->stopBuffering();
?>
=3=
<?php
var_dump($p->isBuffering());
var_dump($p2->isBuffering());
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(false) =2= bool(true) bool(false) =3= bool(false) bool(false)
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::isCompressed — Returns Phar::GZ or PHAR::BZ2 if the entire phar archive is compressed (.tar.gz/tar.bz and so on)
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Returns Phar::GZ or PHAR::BZ2 if the entire phar archive is compressed
(.tar.gz/tar.bz and so on). Zip-based phar archives cannot be compressed as a
file, and so this method will always return FALSE if a zip-based phar archive is queried.
No parameters.
Phar::GZ, Phar::BZ2 or FALSE
Beispiel #1 A Phar::isCompressed() example
<?php
try {
$phar1 = new Phar('myphar.zip.phar');
var_dump($phar1->isCompressed());
$phar2 = new Phar('myuncompressed.tar.phar');
var_dump($phar2->isCompressed());
$phar2->compressAllFilesGZ();
var_dump($phar2->isCompressed() == Phar::GZ);
} catch (Exception $e) {
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::isFileFormat — Returns true if the phar archive is based on the tar/phar/zip file format depending on the parameter
$format
)
format
Either Phar::PHAR, Phar::TAR, or Phar::ZIP to test for the format of the archive.
Returns TRUE if the phar archive matches the file format requested by the parameter
PharException is thrown if the parameter is an unknown file format specifier.
(PHP >= 5.3.0, PECL phar >= 1.2.0)
Phar::isValidPharFilename — Returns whether the given filename is a valid phar filename
$filename
[, bool $executable = true
] )Returns whether the given filename is a valid phar filename that will be recognized as a phar archive by the phar extension. This can be used to test a name without having to instantiate a phar archive and catch the inevitable Exception that will be thrown if an invalid name is specified.
filename
The name or full path to a phar archive not yet created
executable
This parameter determines whether the filename should be treated as a phar executable archive, or a data non-executable archive
Returns TRUE if the filename is valid, FALSE if not.
(Unknown)
Phar::isWritable — Returns true if the phar archive can be modified
This method returns TRUE if phar.readonly is 0,
and the actual phar archive on disk is not read-only.
No parameters.
Returns TRUE if the phar archive can be modified
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::loadPhar — Loads any phar archive with an alias
$filename
[, string $alias
] )This can be used to read the contents of an external Phar archive. This is most useful for assigning an alias to a phar so that subsequent references to the phar can use the shorter alias, or for loading Phar archives that only contain data and are not intended for execution/inclusion in PHP scripts.
filename
the full or relative path to the phar archive to open
alias
The alias that may be used to refer to the phar archive. Note that many phar archives specify an explicit alias inside the phar archive, and a PharException will be thrown if a new alias is specified in this case.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
PharException is thrown if an alias is passed in and the phar archive already has an explicit alias
Beispiel #1 A Phar::loadPhar() example
Phar::loadPhar can be used anywhere to load an external Phar archive, whereas Phar::mapPhar should be used in a loader stub for a Phar.
<?php
try {
Phar::loadPhar('/path/to/phar.phar', 'my.phar');
echo file_get_contents('phar://my.phar/file.txt');
} catch (PharException $e) {
echo $e;
}
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::mapPhar — Reads the currently executed file (a phar) and registers its manifest
$alias
[, int $dataoffset = 0
]] )This static method can only be used inside a Phar archive's loader stub in order to initialize the phar when it is directly executed, or when it is included in another script.
alias
The alias that can be used in phar:// URLs to refer to this archive, rather than its full path.
dataoffset
Unused variable, here for compatibility with PEAR's PHP_Archive.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
PharException is thrown if not called directly within PHP execution, if no __HALT_COMPILER(); token is found in the current source file, or if the file cannot be opened for reading.
Beispiel #1 A Phar::mapPhar() example
mapPhar should be used only inside a phar's loader stub. Use loadPhar to load an external phar into memory.
Here is a sample Phar loader stub that uses mapPhar.
<?php
function __autoload($class)
{
include 'phar://me.phar/' . str_replace('_', '/', $class) . '.php';
}
try {
Phar::mapPhar('me.phar');
include 'phar://me.phar/startup.php';
} catch (PharException $e) {
echo $e->getMessage();
die('Cannot initialize Phar');
}
__HALT_COMPILER();
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::mount — Mount an external path or file to a virtual location within the phar archive
$pharpath
, string $externalpath
)Much like the unix file system concept of mounting external devices to paths within the directory tree, Phar::mount() allows referring to external files and directories as if they were inside of an archive. This allows powerful abstraction such as referring to external configuration files as if they were inside the archive.
pharpath
The internal path within the phar archive to use as the mounted path location. This must be a relative path within the phar archive, and must not already exist.
externalpath
A path or URL to an external file or directory to mount within the phar archive
No return. PharException is thrown on failure.
Throws PharException if any problems occur mounting the path.
Beispiel #1 A Phar::mount() example
The following example shows accessing an external configuration file as if it were a path within a phar archive.
First, the code inside of a phar archive:
<?php
$configuration = simplexml_load_string(file_get_contents(
Phar::running(false) . '/config.xml'));
?>
Next the external code used to mount the configuration file:
<?php
// first set up the association between the abstract config.xml
// and the actual one on disk
Phar::mount('phar://config.xml', '/home/example/config.xml');
// now run the application
include '/path/to/archive.phar';
?>
Another method is to put the mounting code inside the stub of the phar archive. Here is an example of setting up a default configuration file if no user configuration is specified:
<?php
// first set up the association between the abstract config.xml
// and the actual one on disk
if (defined('EXTERNAL_CONFIG')) {
Phar::mount('config.xml', EXTERNAL_CONFIG);
if (file_exists(__DIR__ . '/extra_config.xml')) {
Phar::mount('extra.xml', __DIR__ . '/extra_config.xml');
}
} else {
Phar::mount('config.xml', 'phar://' . __FILE__ . '/default_config.xml');
Phar::mount('extra.xml', 'phar://' . __FILE__ . '/default_extra.xml');
}
// now run the application
include 'phar://' . __FILE__ . '/index.php';
__HALT_COMPILER();
?>
...and the code externally to load this phar archive:
<?php
define('EXTERNAL_CONFIG', '/home/example/config.xml');
// now run the application
include '/path/to/archive.phar';
?>
(Unknown)
Phar::mungServer — Defines a list of up to 4 $_SERVER variables that should be modified for execution
$munglist
)Phar::mungServer() should only be called within the stub of a phar archive.
Defines a list of up to 4 $_SERVER variables that should be modified for execution. Variables that can be modified to remove traces of phar execution are REQUEST_URI, PHP_SELF, SCRIPT_NAME and SCRIPT_FILENAME.
On its own, this method does nothing. Only when combined with Phar::webPhar() does it take effect, and only when the requested file is a PHP file to be parsed. Note that the PATH_INFO and PATH_TRANSLATED variables are always modified.
The original values of variables that are modified are stored in the SERVER array with PHAR_ prepended, so for instance SCRIPT_NAME would be saved as PHAR_SCRIPT_NAME.
munglist
an array containing as string indices any of REQUEST_URI, PHP_SELF, SCRIPT_NAME and SCRIPT_FILENAME. Other values trigger an exception, and Phar::mungServer() is case-sensitive.
No return.
Throws UnexpectedValueException if any problems are found with the passed in data.
Beispiel #1 A Phar::mungServer() example
<?php
// example stub
Phar::mungServer(array('REQUEST_URI'));
Phar::webPhar();
__HALT_COMPILER();
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::offsetExists — determines whether a file exists in the phar
$offset
)This is an implementation of the ArrayAccess interface allowing direct manipulation of the contents of a Phar archive using array access brackets.
offsetExists() is called whenever isset() is called.
offset
The filename (relative path) to look for in a Phar.
Returns TRUE if the file exists within the phar, or FALSE if not.
Beispiel #1 A Phar::offsetExists() example
<?php
$p = new Phar(dirname(__FILE__) . '/my.phar', 0, 'my.phar');
$p['firstfile.txt'] = 'first file';
$p['secondfile.txt'] = 'second file';
// the next set of lines call offsetExists() indirectly
var_dump(isset($p['firstfile.txt']));
var_dump(isset($p['nothere.txt']));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(false)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::offsetGet — Gets a PharFileInfo object for a specific file
$offset
)This is an implementation of the ArrayAccess interface allowing direct manipulation of the contents of a Phar archive using array access brackets. Phar::offsetGet() is used for retrieving files from a Phar archive.
offset
The filename (relative path) to look for in a Phar.
A PharFileInfo object is returned that can be used to iterate over a file's contents or to retrieve information about the current file.
This method throws BadMethodCallException if the file does not exist in the Phar archive.
Beispiel #1 Phar::offsetGet() example
As with all classes that implement the ArrayAccess interface, Phar::offsetGet() is automatically called when using the [] angle bracket operator.
<?php
$p = new Phar(dirname(__FILE__) . '/myphar.phar', 0, 'myphar.phar');
$p['exists.txt'] = "file exists\n";
try {
// automatically calls offsetGet()
echo $p['exists.txt'];
echo $p['doesnotexist.txt'];
} catch (BadMethodCallException $e) {
echo $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
file exists Entry doesnotexist.txt does not exist
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::offsetSet — set the contents of an internal file to those of an external file
$offset
, string $value
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
This is an implementation of the ArrayAccess interface allowing direct manipulation of the contents of a Phar archive using array access brackets. offsetSet is used for modifying an existing file, or adding a new file to a Phar archive.
offset
The filename (relative path) to modify in a Phar.
value
Content of the file.
No return values.
if phar.readonly is 1, BadMethodCallException is thrown, as modifying a Phar is only allowed when phar.readonly is set to 0. Throws PharException if there are any problems flushing changes made to the Phar archive to disk.
Beispiel #1 A Phar::offsetSet() example
offsetSet should not be accessed directly, but instead used via array access with the [] operator.
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
try {
// calls offsetSet
$p['file.txt'] = 'Hi there';
} catch (Exception $e) {
echo 'Could not modify file.txt:', $e;
}
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::offsetUnset — remove a file from a phar
$offset
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
This is an implementation of the ArrayAccess interface allowing direct manipulation of the contents of a Phar archive using array access brackets. offsetUnset is used for deleting an existing file, and is called by the unset() language construct.
offset
The filename (relative path) to modify in a Phar.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
if phar.readonly is 1, BadMethodCallException is thrown, as modifying a Phar is only allowed when phar.readonly is set to 0. Throws PharException if there are any problems flushing changes made to the Phar archive to disk.
Beispiel #1 A Phar::offsetUnset() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
try {
// deletes file.txt from my.phar by calling offsetUnset
unset($p['file.txt']);
} catch (Exception $e) {
echo 'Could not delete file.txt: ', $e;
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::running — Returns the full path on disk or full phar URL to the currently executing Phar archive
$retphar = true
] )Returns the full path to the running phar archive. This is intended for use much like the __FILE__ magic constant, and only has effect inside an executing phar archive.
Inside the stub of an archive, Phar::running() returns
"". Simply use __FILE__
to access the current running phar inside a stub.
retphar
If FALSE, the full path on disk to the phar
archive is returned. If TRUE, a full phar URL is returned.
Returns the filename if valid, empty string otherwise.
Beispiel #1 A Phar::running() example
For the following example, assume the phar archive is located at /path/to/phar/my.phar.
<?php
$a = Phar::running(); // $a is "phar:///path/to/my.phar"
$b = Phar::running(false); // $b is "/path/to/my.phar"
?>
(PHP >= 5.3.0, PECL phar >= 1.2.1)
Phar::setAlias — Set the alias for the Phar archive
$alias
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Set the alias for the Phar archive, and write it as the permanent alias for this phar archive. An alias can be used internally to a phar archive to ensure that use of the phar stream wrapper to access internal files always works regardless of the location of the phar archive on the filesystem. Another alternative is to rely upon Phar's interception of include or to use Phar::interceptFileFuncs() and use relative paths.
alias
A shorthand string that this archive can be referred to in phar stream wrapper access.
Throws UnexpectedValueException when write access is disabled, and PharException if the alias is already in use or any problems were encountered flushing changes to disk.
Beispiel #1 A Phar::setAlias() example
<?php
try {
$phar = new Phar('myphar.phar');
$phar->setAlias('myp.phar');
} catch (Exception $e) {
// handle error
}
?>
(Unknown)
Phar::setDefaultStub — Used to set the PHP loader or bootstrap stub of a Phar archive to the default loader
$index
[, string $webindex
]] )Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
This method is a convenience method that combines the functionality of Phar::createDefaultStub() and Phar::setStub().
index
Relative path within the phar archive to run if accessed on the command-line
webindex
Relative path within the phar archive to run if accessed through a web browser
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
UnexpectedValueException is thrown if phar.readonly is enabled in php.ini. PharException is thrown if any problems are encountered flushing changes to disk.
Beispiel #1 A Phar::setDefaultStub() example
<?php
try {
$phar = new Phar('myphar.phar');
$phar->setDefaultStub('cli.php', 'web/index.php');
// this is the same as:
// $phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
} catch (Exception $e) {
// handle errors
}
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::setMetadata — Sets phar archive meta-data
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Phar::setMetadata() should be used to store customized data that describes something about the phar archive as a complete entity. PharFileInfo::setMetadata() should be used for file-specific meta-data. Meta-data can slow down the performance of loading a phar archive if the data is large.
Some possible uses for meta-data include specifying which file within the archive should be used to bootstrap the archive, or the location of a file manifest like » PEAR's package.xml file. However, any useful data that describes the phar archive may be stored.
metadata
Any PHP variable containing information to store that describes the phar archive
Es wird kein Wert zurückgegeben.
Beispiel #1 A Phar::setMetadata() example
<?php
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p['file.php'] = '<?php echo "hello"';
$p->setMetadata(array('bootstrap' => 'file.php'));
var_dump($p->getMetadata());
} catch (Exception $e) {
echo 'Could not create and/or modify phar:', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(1) {
["bootstrap"]=>
string(8) "file.php"
}
(PHP >= 5.3.0, PECL phar >= 1.1.0)
Phar::setSignatureAlgorithm — set the signature algorithm for a phar and apply it.
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
set the signature algorithm for a phar and apply it. The signature algorithm must be one of Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, or Phar::OPENSSL.
Note that all executable phar archives have a signature created automatically, SHA1 by default. data tar- or zip-based archives (archives created with the PharData class) must have their signature created and set explicitly via Phar::setSignatureAlgorithm().
sigtype
One of Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, or Phar::OPENSSL
privatekey
The contents of an OpenSSL private key, as extracted from a certificate or OpenSSL key file:
<?php
$private = openssl_get_privatekey(file_get_contents('private.pem'));
$pkey = '';
openssl_pkey_export($private, $pkey);
$p->setSignatureAlgorithm(Phar::OPENSSL, $pkey);
?>
Es wird kein Wert zurückgegeben.
Throws UnexpectedValueException for many errors, and a PharException if any problems occur flushing changes to disk.
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::setStub — Used to set the PHP loader or bootstrap stub of a Phar archive
$stub
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
This method is used to add a PHP bootstrap loader stub to a new Phar archive, or to replace the loader stub in an existing Phar archive.
The loader stub for a Phar archive is used whenever an archive is included directly as in this example:
<?php
include 'myphar.phar';
?>
The loader is not accessed when including a file through the phar stream wrapper like so:
<?php
include 'phar://myphar.phar/somefile.php';
?>
stub
A string or an open stream handle to use as the executable stub for this phar archive.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
UnexpectedValueException is thrown if phar.readonly is enabled in php.ini. PharException is thrown if any problems are encountered flushing changes to disk.
Beispiel #1 A Phar::setStub() example
<?php
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p['a.php'] = '<?php var_dump("Hello");';
$p->setStub('<?php var_dump("First"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>');
include 'phar://brandnewphar.phar/a.php';
var_dump($p->getStub());
$p['b.php'] = '<?php var_dump("World");';
$p->setStub('<?php var_dump("Second"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>');
include 'phar://brandnewphar.phar/b.php';
var_dump($p->getStub());
} catch (Exception $e) {
echo 'Write operations failed on brandnewphar.phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(5) "Hello"
string(82) "<?php var_dump("First"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>"
string(5) "World"
string(83) "<?php var_dump("Second"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>"
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::startBuffering — Start buffering Phar write operations, do not modify the Phar object on disk
Although technically unnecessary, the Phar::startBuffering() method can provide a significant performance boost when creating or modifying a Phar archive with a large number of files. Ordinarily, every time a file within a Phar archive is created or modified in any way, the entire Phar archive will be recreated with the changes. In this way, the archive will be up-to-date with the activity performed on it.
However, this can be unnecessary when simply creating a new Phar archive, when it would make more sense to write the entire archive out at once. Similarly, it is often necessary to make a series of changes and to ensure that they all are possible before making any changes on disk, similar to the relational database concept of transactions. the Phar::startBuffering()/Phar::stopBuffering() pair of methods is provided for this purpose.
Phar write buffering is per-archive, buffering active for the foo.phar Phar archive does not affect changes to the bar.phar Phar archive.
Es wird kein Wert zurückgegeben.
Beispiel #1 A Phar::startBuffering() example
<?php
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
} catch (Exception $e) {
echo 'Could not create phar:', $e;
}
echo 'The new phar has ' . $p->count() . " entries\n";
$p->startBuffering();
$p['file.txt'] = 'hi';
$p['file2.txt'] = 'there';
$p['file2.txt']->setCompressedGZ();
$p['file3.txt'] = 'babyface';
$p['file3.txt']->setMetadata(42);
$p->setStub("<?php
function __autoload($class)
{
include 'phar://myphar.phar/' . str_replace('_', '/', $class) . '.php';
}
Phar::mapPhar('myphar.phar');
include 'phar://myphar.phar/startup.php';
__HALT_COMPILER();");
$p->stopBuffering();
?>
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::stopBuffering — Stop buffering write requests to the Phar archive, and save changes to disk
Phar::stopBuffering() is used in conjunction with the Phar::startBuffering() method. Phar::startBuffering() can provide a significant performance boost when creating or modifying a Phar archive with a large number of files. Ordinarily, every time a file within a Phar archive is created or modified in any way, the entire Phar archive will be recreated with the changes. In this way, the archive will be up-to-date with the activity performed on it.
However, this can be unnecessary when simply creating a new Phar archive, when it would make more sense to write the entire archive out at once. Similarly, it is often necessary to make a series of changes and to ensure that they all are possible before making any changes on disk, similar to the relational database concept of transactions. The Phar::startBuffering()/Phar::stopBuffering() pair of methods is provided for this purpose.
Phar write buffering is per-archive, buffering active for the foo.phar Phar archive does not affect changes to the bar.phar Phar archive.
Es wird kein Wert zurückgegeben.
PharException is thrown if any problems are encountered flushing changes to disk.
Beispiel #1 A Phar::stopBuffering() example
<?php
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p['file1.txt'] = 'hi';
$p->startBuffering();
var_dump($p->getStub());
$p->setStub("<?php
function __autoload(\$class)
{
include 'phar://brandnewphar.phar/' . str_replace('_', '/', \$class) . '.php';
}
Phar::mapPhar('brandnewphar.phar');
include 'phar://brandnewphar.phar/startup.php';
__HALT_COMPILER();");
$p->stopBuffering();
var_dump($p->getStub());
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(24) "<?php __HALT_COMPILER();"
string(195) "<?php
function __autoload($class)
{
include 'phar://' . str_replace('_', '/', $class);
}
Phar::mapPhar('brandnewphar.phar');
include 'phar://brandnewphar.phar/startup.php';
__HALT_COMPILER();"
(PECL phar < 2.0.0)
Phar::uncompressAllFiles — Uncompresses all files in the current Phar archive
Hinweis:
Diese Methode wurde beginnend mit Version 2.0.0 der phar-Extension entfernt. Alternative Implementationen bieten Phar::compress(), Phar::decompress(), Phar::compressFiles() und Phar::decompressFiles().
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
This method decompresses all files in the Phar archive. If any files are already compressed using gzip compression, the zlib extension must be enabled in order to decompress the files, and any files compressed using bzip2 compression require the bzip2 extension to decompress the files. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, the bzip2 extension is not enabled and any files are compressed using bzip2 compression, or if any files are compressed using gzip compression and the zlib extension is not enabled.
Beispiel #1 A Phar::uncompressAllFiles() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p->compressAllFilesGZ();
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressedBZIP2());
var_dump($file->isCompressedGZ());
}
$p->uncompressAllFiles();
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressedBZIP2());
var_dump($file->isCompressedGZ());
}
} catch (Exception $e) {
echo 'Write operations failed on my.phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(10) "myfile.txt" bool(true) bool(false) bool(true) string(11) "myfile2.txt" bool(true) bool(false) bool(true) string(10) "myfile.txt" bool(false) bool(false) bool(false) string(11) "myfile2.txt" bool(false) bool(false) bool(false)
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::unlinkArchive — Completely remove a phar archive from disk and from memory
$archive
)Removes a phar archive for disk and memory.
archive
The path on disk to the phar archive.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
PharException is thrown if there are any open file pointers to the phar archive, or any existing Phar, PharData, or PharFileInfo objects referring to the phar archive.
Beispiel #1 A Phar::unlinkArchive() example
<?php
// simple usage
Phar::unlinkArchive('/path/to/my.phar');
// more common example:
$p = new Phar('my.phar');
$fp = fopen('phar://my.phar/file.txt', 'r');
// this creates 'my.phar.gz'
$gp = $p->compress(Phar::GZ);
// remove all references to the archive
unset($p);
fclose($fp);
// now remove all traces of the archive
Phar::unlinkArchive('my.phar');
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::webPhar — mapPhar for web-based phars. front controller for web applications
$alias
[, string $index = "index.php"
[, string $f404
[, array $mimetypes
[, array $rewrites
]]]]] )Phar::mapPhar() for web-based phars. This method parses $_SERVER['REQUEST_URI'] and routes a request from a web browser to an internal file within the phar archive. In essence, it simulates a web server, routing requests to the correct file, echoing the correct headers and parsing PHP files as needed. This powerful method is part of what makes it easy to convert an existing PHP application into a phar archive. Combined with Phar::mungServer() and Phar::interceptFileFuncs(), any web application can be used unmodified from a phar archive.
Phar::webPhar() should only be called from the stub of a phar archive (see here for more information on what a stub is).
alias
The alias that can be used in phar:// URLs to refer to this archive, rather than its full path.
index
The location within the phar of the directory index.
f404
The location of the script to run when a file is not found. This script should output the proper HTTP 404 headers.
mimetypes
An array mapping additional file extensions to MIME type. If the default mapping is sufficient, pass an empty array. By default, these extensions are mapped to these MIME types:
<?php
$mimes = array(
'phps' => Phar::PHPS, // pass to highlight_file()
'c' => 'text/plain',
'cc' => 'text/plain',
'cpp' => 'text/plain',
'c++' => 'text/plain',
'dtd' => 'text/plain',
'h' => 'text/plain',
'log' => 'text/plain',
'rng' => 'text/plain',
'txt' => 'text/plain',
'xsd' => 'text/plain',
'php' => Phar::PHP, // parse as PHP
'inc' => Phar::PHP, // parse as PHP
'avi' => 'video/avi',
'bmp' => 'image/bmp',
'css' => 'text/css',
'gif' => 'image/gif',
'htm' => 'text/html',
'html' => 'text/html',
'htmls' => 'text/html',
'ico' => 'image/x-ico',
'jpe' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'js' => 'application/x-javascript',
'midi' => 'audio/midi',
'mid' => 'audio/midi',
'mod' => 'audio/mod',
'mov' => 'movie/quicktime',
'mp3' => 'audio/mp3',
'mpg' => 'video/mpeg',
'mpeg' => 'video/mpeg',
'pdf' => 'application/pdf',
'png' => 'image/png',
'swf' => 'application/shockwave-flash',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'wav' => 'audio/wav',
'xbm' => 'image/xbm',
'xml' => 'text/xml',
);
?>
rewrites
An array mapping URI to internal file, simulating mod_rewrite of apache. For example:
<?php
array(
'myinfo' => 'myinfo.php'
);
?>
Es wird kein Wert zurückgegeben.
Throws PharException when unable to open the internal
file to output, or if
called from a non-stub. If an invalid array value is passed into
mimetypes or to rewrites, then
UnexpectedValueException is thrown.
Beispiel #1 A Phar::webPhar() example
With the example below, the created phar will display Hello World if one browses to /myphar.phar/index.php or to /myphar.phar, and will display the source of index.phps if one browses to /myphar.phar/index.phps.
<?php
// creating the phar archive:
try {
$phar = new Phar('myphar.phar');
$phar['index.php'] = '<?php echo "Hello World"; ?>';
$phar['index.phps'] = '<?php echo "Hello World"; ?>';
$phar->setStub('<?php
Phar::webPhar();
__HALT_COMPILER(); ?>');
} catch (Exception $e) {
// handle error here
}
?>
(No version information available, might only be in SVN)
The PharData class provides a high-level interface to accessing and creating non-executable tar and zip archives. Because these archives do not contain a stub and cannot be executed by the phar extension, it is possible to create and manipulate regular zip and tar files using the PharData class even if phar.readonly php.ini setting is 1.
$format = 9021976
[, int $compression = 9021976
[, string $extension
]]] )$format = 9021976
[, int $compression = 9021976
[, string $extension
]]] )$alias
[, string $index = "index.php"
[, string $f404
[, array $mimetypes
[, array $rewrites
]]]]] )(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::addEmptyDir — Add an empty directory to the tar/zip archive
$dirname
)With this method, an empty directory is created with path dirname. This method is similar to ZipArchive::addEmptyDir().
dirname
The name of the empty directory to create in the phar archive
no return value, exception is thrown on failure.
Beispiel #1 A PharData::addEmptyDir() example
<?php
try {
$a = new PharData('/path/to/my.tar');
$a->addEmptyDir('/full/path/to/file');
// demonstrates how this file is stored
$b = $a['full/path/to/file']->isDir();
} catch (Exception $e) {
// handle errors here
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::addFile — Add a file from the filesystem to the tar/zip archive
With this method, any file or URL can be added to the tar/zip archive. If the optional second parameter localname is specified, the file will be stored in the archive with that name, otherwise the file parameter is used as the path to store within the archive. URLs must have a localname or an exception is thrown. This method is similar to ZipArchive::addFile().
file
Full or relative path to a file on disk to be added to the phar archive.
localname
Path that the file will be stored in the archive.
no return value, exception is thrown on failure.
Beispiel #1 A PharData::addFile() example
<?php
try {
$a = new PharData('/path/to/my.tar');
$a->addFile('/full/path/to/file');
// demonstrates how this file is stored
$b = $a['full/path/to/file']->getContent();
$a->addFile('/full/path/to/file', 'my/file.txt');
$c = $a['my/file.txt']->getContent();
// demonstrate URL usage
$a->addFile('http://www.example.com', 'example.html');
} catch (Exception $e) {
// handle errors here
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::addFromString — Add a file from the filesystem to the tar/zip archive
$localname
, string $contents
)With this method, any string can be added to the tar/zip archive. The file will be stored in the archive with localname as its path. This method is similar to ZipArchive::addFromString().
localname
Path that the file will be stored in the archive.
contents
The file contents to store
no return value, exception is thrown on failure.
Beispiel #1 A PharData::addFromString() example
<?php
try {
$a = new PharData('/path/to/my.tar');
$a->addFromString('path/to/file.txt', 'my simple file');
$b = $a['path/to/file.txt']->getContent();
// to add contents from a stream handle for large files, use offsetSet()
$c = fopen('/path/to/hugefile.bin');
$a['largefile.bin'] = $c;
fclose($c);
} catch (Exception $e) {
// handle errors here
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::buildFromDirectory — Construct a tar/zip archive from the files within a directory.
Populate a tar/zip archive from directory contents. The optional second parameter is a regular expression (pcre) that is used to exclude files. Any filename that matches the regular expression will be included, all others will be excluded. For more fine-grained control, use PharData::buildFromIterator().
base_dir
The full or relative path to the directory that contains all files to add to the archive.
regex
An optional pcre regular expression that is used to filter the list of files. Only file paths matching the regular expression will be included in the archive.
Phar::buildFromDirectory() returns an associative array mapping internal path of file to the full path of the file on the filesystem.
This method throws BadMethodCallException when unable to instantiate the internal directory iterators, or a PharException if there were errors saving the phar archive.
Beispiel #1 A PharData::buildFromDirectory() example
<?php
$phar = new PharData('project.tar');
// add all files in the project
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
$phar2 = new PharData('project2.zip');
// add all files in the project, only include php files
$phar->buildFromDirectory(dirname(__FILE__) . '/project', '/\.php$/');
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::buildFromIterator — Construct a tar or zip archive from an iterator.
Populate a tar or zip archive from an iterator. Two styles of iterators are supported, iterators that map the filename within the tar/zip to the name of a file on disk, and iterators like DirectoryIterator that return SplFileInfo objects. For iterators that return SplFileInfo objects, the second parameter is required.
Beispiel #1 A PharData::buildFromIterator() with SplFileInfo
For most tar/zip archives, the archive will reflect an actual directory layout, and the second style is the most useful. For instance, to create a tar/zip archive containing the files in this sample directory layout:
/path/to/project/
config/
dist.xml
debug.xml
lib/
file1.php
file2.php
src/
processthing.php
www/
index.php
cli/
index.php
This code could be used to add these files to the "project.tar" tar archive:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/project')),
'/path/to/project');
?>
The file project.tar can then be used immediately. PharData::buildFromIterator() does not set values such as compression, metadata, and this can be done after creating the tar/zip archive.
As an interesting note, PharData::buildFromIterator() can also be used to copy the contents of an existing phar, tar or zip archive, as the PharData object descends from DirectoryIterator:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new Phar('/path/to/anotherphar.phar')),
'phar:///path/to/anotherphar.phar/path/to/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
Beispiel #2 A PharData::buildFromIterator() with other iterators
The second form of the iterator can be used with any iterator that returns a key => value mapping, such as an ArrayIterator:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'internal/file.php' => dirname(__FILE__) . '/somefile.php',
'another/file.jpg' => fopen('/path/to/bigfile.jpg', 'rb'),
)));
?>
iter
Any iterator that either associatively maps tar/zip file to location or returns SplFileInfo objects
base_directory
For iterators that return SplFileInfo objects, the portion of each file's full path to remove when adding to the tar/zip archive
PharData::buildFromIterator() returns an associative array mapping internal path of file to the full path of the file on the filesystem.
This method returns UnexpectedValueException when the
iterator returns incorrect values, such as an integer key instead of a
string, a BadMethodCallException when an
SplFileInfo-based iterator is passed without a base_directory
parameter, or a PharException if there were errors
saving the phar archive.
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::compress — Compresses the entire tar/zip archive using Gzip or Bzip2 compression
$compression
[, string $extension
] )For tar archives, this method compresses the entire archive using gzip compression or bzip2 compression. The resulting file can be processed with the gunzip command/bunzip command, or accessed directly and transparently with the Phar extension.
For zip archives, this method fails with an exception. The zlib extension must be enabled to compress with gzip compression, the bzip2 extension must be enabled in order to compress with bzip2 compression.
In addition, this method automatically renames the archive, appending .gz, .bz2 or removing the extension if passed Phar::NONE to remove compression. Alternatively, a file extension may be specified with the second parameter.
compression
Compression must be one of Phar::GZ, Phar::BZ2 to add compression, or Phar::NONE to remove compression.
extension
By default, the extension is .tar.gz or .tar.bz2 for compressing a tar, and .tar for decompressing.
A PharData object is returned.
Throws BadMethodCallException if the zlib extension is not available, or the bzip2 extension is not enabled.
Beispiel #1 A PharData::compress() example
<?php
$p = new PharData('/path/to/my.tar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p1 = $p->compress(Phar::GZ); // copies to /path/to/my.phar.gz
$p2 = $p->compress(Phar::BZ2); // copies to /path/to/my.phar.bz2
$p3 = $p2->compress(Phar::NONE); // exception: /path/to/my.phar already exists
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::compressFiles — Compresses all files in the current tar/zip archive
$compression
)For tar-based archives, this method throws a BadMethodCallException, as compression of individual files within a tar archive is not supported by the file format. Use PharData::compress() to compress an entire tar-based archive.
For Zip-based archives, this method compresses all files in the archive using the specified compression. The zlib or bzip2 extensions must be enabled to take advantage of this feature. In addition, if any files are already compressed using bzip2/zlib compression, the respective extension must be enabled in order to decompress the files prior to re-compressing.
compression
Compression must be one of Phar::GZ, Phar::BZ2 to add compression, or Phar::NONE to remove compression.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, the zlib extension is not available, or if any files are compressed using bzip2 compression and the bzip2 extension is not enabled.
Beispiel #1 A PharData::compressFiles() example
<?php
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
$p->compressFiles(Phar::GZ);
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(10) "myfile.txt" bool(false) bool(false) bool(false) string(11) "myfile2.txt" bool(false) bool(false) bool(false) string(10) "myfile.txt" int(4096) bool(false) bool(true) string(11) "myfile2.txt" int(4096) bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::__construct — Construct a non-executable tar or zip archive object
$fname
[, int $flags
[, string $alias
[, int $format = Phar::TAR
]]] )
fname
Path to an existing tar/zip archive or to-be-created archive
flags
Flags to pass to Phar parent class RecursiveDirectoryIterator.
alias
Alias with which this Phar archive should be referred to in calls to stream functionality.
format
One of the file format constants available within the Phar class.
Throws BadMethodCallException if called twice; UnexpectedValueException if the Phar archive can't be opened.
Beispiel #1 A PharData::__construct() example
<?php
try {
$p = new PharData('/path/to/my.tar', CURRENT_AS_FILEINFO | KEY_AS_FILENAME);
} catch (UnexpectedValueException $e) {
die('Could not open my.tar');
} catch (BadMethodCallException $e) {
echo 'technically, this cannot happen';
}
echo file_get_contents('phar:///path/to/my.tar/example.txt');
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::convertToData — Convert a phar archive to a non-executable tar or zip file
This method is used to convert a non-executable tar or zip archive to another non-executable format.
If no changes are specified, this method throws a BadMethodCallException. This method should be used to convert a tar archive to zip format or vice-versa. Although it is possible to simply change the compression of a tar archive using this method, it is better to use the PharData::compress() method for logical consistency.
If successful, the method creates a new archive on disk and returns a PharData object. The old archive is not removed from disk, and should be done manually after the process has finished.
format
This should be one of Phar::TAR
or Phar::ZIP. If set to NULL, the existing file format
will be preserved.
compression
This should be one of Phar::NONE for no whole-archive compression, Phar::GZ for zlib-based compression, and Phar::BZ2 for bzip-based compression.
extension
This parameter is used to override the default file extension for a converted archive. Note that .phar cannot be used anywhere in the filename for a non-executable tar or zip archive.
If converting to a tar-based phar archive, the default extensions are .tar, .tar.gz, and .tar.bz2 depending on specified compression. For zip-based archives, the default extension is .zip.
The method returns a PharData object on success and throws an exception on failure.
This method throws BadMethodCallException when unable to compress, an unknown compression method has been specified, the requested archive is buffering with Phar::startBuffering() and has not concluded with Phar::stopBuffering(), and a PharException if any problems are encountered during the phar creation process.
Beispiel #1 A PharData::convertToData() example
Using PharData::convertToData():
<?php
try {
$tarphar = new PharData('myphar.tar');
// note that myphar.tar is *not* unlinked
// convert it to the non-executable tar file format
// creates myphar.zip
$zip = $tarphar->convertToData(Phar::ZIP);
// create myphar.tbz
$tgz = $zip->convertToData(Phar::TAR, Phar::BZ2, '.tbz');
// creates myphar.phar.tgz
$phar = $tarphar->convertToData(Phar::PHAR); // throws exception
} catch (Exception $e) {
// handle the error here
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::convertToExecutable — Convert a non-executable tar/zip archive to an executable phar archive
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
This method is used to convert a non-executable tar or zip archive to an executable phar archive. Any of the three executable file formats (phar, tar or zip) can be used, and whole-archive compression can also be performed.
If no changes are specified, this method throws a BadMethodCallException.
If successful, the method creates a new archive on disk and returns a Phar object. The old archive is not removed from disk, and should be done manually after the process has finished.
format
This should be one of Phar::PHAR, Phar::TAR,
or Phar::ZIP. If set to NULL, the existing file format
will be preserved.
compression
This should be one of Phar::NONE for no whole-archive compression, Phar::GZ for zlib-based compression, and Phar::BZ2 for bzip-based compression.
extension
This parameter is used to override the default file extension for a converted archive. Note that all zip- and tar-based phar archives must contain .phar in their file extension in order to be processed as a phar archive.
If converting to a phar-based archive, the default extensions are .phar, .phar.gz, or .phar.bz2 depending on the specified compression. For tar-based phar archives, the default extensions are .phar.tar, .phar.tar.gz, and .phar.tar.bz2. For zip-based phar archives, the default extension is .phar.zip.
The method returns a Phar object on success and throws an exception on failure.
This method throws BadMethodCallException when unable to compress, an unknown compression method has been specified, the requested archive is buffering with Phar::startBuffering() and has not concluded with Phar::stopBuffering(), an UnexpectedValueException if write support is disabled, and a PharException if any problems are encountered during the phar creation process.
Beispiel #1 A PharData::convertToExecutable() example
Using PharData::convertToExecutable():
<?php
try {
$tarphar = new PharData('myphar.tar');
// convert it to the phar file format
// note that myphar.tar is *not* unlinked
$phar = $tarphar->convertToExecutable(Phar::PHAR); // creates myphar.phar
$phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
// creates myphar.phar.tgz
$compressed = $tarphar->convertToExecutable(Phar::TAR, Phar::GZ, '.phar.tgz');
} catch (Exception $e) {
// handle the error here
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::copy — Copy a file internal to the phar archive to another new file within the phar
$oldfile
, string $newfile
)Copy a file internal to the tar/zip archive to another new file within the same archive. This is an object-oriented alternative to using copy() with the phar stream wrapper.
oldfile
newfile
returns TRUE on success, but it is safer to encase method call in a
try/catch block and assume success if no exception is thrown.
throws UnexpectedValueException if the source file does not exist, the destination file already exists, write access is disabled, opening either file fails, reading the source file fails, or a PharException if writing the changes to the phar fails.
Beispiel #1 A PharData::copy() example
This example shows using PharData::copy() and the equivalent stream wrapper performance of the same thing. The primary difference between the two approaches is error handling. All PharData methods throw exceptions, whereas the stream wrapper uses trigger_error().
<?php
try {
$phar = new PharData('myphar.tar');
$phar['a'] = 'hi';
$phar->copy('a', 'b');
echo $phar['b']; // outputs "phar://myphar.tar/b"
} catch (Exception $e) {
// handle error
}
// the stream wrapper equivalent of the above code.
// E_WARNINGS are triggered on error rather than exceptions.
copy('phar://myphar.tar/a', 'phar//myphar.tar/c');
echo file_get_contents('phar://myphar.tar/c'); // outputs "hi"
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::decompress — Decompresses the entire Phar archive
$extension
] )For tar-based archives, this method decompresses the entire archive.
For Zip-based archives, this method fails with an exception. The zlib extension must be enabled to decompress an archive compressed with gzip compression, and the bzip2 extension must be enabled in order to decompress an archive compressed with bzip2 compression.
In addition, this method automatically renames the file extension of the archive, .tar by default. Alternatively, a file extension may be specified with the second parameter.
extension
For decompressing, the default file extension is .phar.tar. Use this parameter to specify another file extension. Be aware that no non-executable archives cannot contain .phar in their filename.
A PharData object is returned.
Throws BadMethodCallException if the zlib extension is not available, or the bzip2 extension is not enabled.
Beispiel #1 A PharData::decompress() example
<?php
$p = new PharData('/path/to/my.tar', 0, 'my.tar.gz');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p3 = $p2->decompress(); // creates /path/to/my.tar
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::decompressFiles — Decompresses all files in the current zip archive
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
For tar-based archives, this method throws a BadMethodCallException, as compression of individual files within a tar archive is not supported by the file format. Use PharData::compress() to compress an entire tar-based archive.
For Zip-based archives, this method decompresses all files in the archive. The zlib or bzip2 extensions must be enabled to take advantage of this feature if any files are compressed using bzip2/zlib compression.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the zlib extension is not available, or if any files are compressed using bzip2 compression and the bzip2 extension is not enabled.
Beispiel #1 A PharData::decompressFiles() example
<?php
$p = new PharData('/path/to/my.zip');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p->compressFiles(Phar::GZ);
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
$p->decompressFiles();
foreach ($p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(10) "myfile.txt" int(4096) bool(false) bool(true) string(11) "myfile2.txt" int(4096) bool(false) bool(true) string(10) "myfile.txt" bool(false) bool(false) bool(false) string(11) "myfile2.txt" bool(false) bool(false) bool(false)
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::delMetadata — Deletes the global metadata of a zip archive
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Deletes the global metadata of the zip archive
returns TRUE on success, but it is better to check for thrown exception,
and assume success if none is thrown.
Throws PharException if errors occur while flushing changes to disk.
Beispiel #1 A PharData::delMetaData() example
<?php
try {
$phar = new PharData('myphar.zip');
var_dump($phar->getMetadata());
$phar->setMetadata("hi there");
var_dump($phar->getMetadata());
$phar->delMetadata();
var_dump($phar->getMetadata());
} catch (Exception $e) {
// handle errors
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
NULL string(8) "hi there" NULL
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::delete — Delete a file within a tar/zip archive
$entry
)Delete a file within an archive. This is the functional equivalent of calling unlink() on the stream wrapper equivalent, as shown in the example below.
entry
Path within an archive to the file to delete.
returns TRUE on success, but it is better to check for thrown exception,
and assume success if none is thrown.
Throws PharException if errors occur while flushing changes to disk.
Beispiel #1 A PharData::delete() example
<?php
try {
$phar = new PharData('myphar.zip');
$phar->delete('unlink/me.php');
// this is equivalent to:
unlink('phar://myphar.phar/unlink/me.php');
} catch (Exception $e) {
// handle errors
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::extractTo — Extract the contents of a tar/zip archive to a directory
$pathto
[, string|array $files
[, bool $overwrite = false
]] )Extract all files within a tar/zip archive to disk. Extracted files and directories preserve permissions as stored in the archive. The optional parameters allow optional control over which files are extracted, and whether existing files on disk can be overwritten. The second parameter files can be either the name of a file or directory to extract, or an array of names of files and directories to extract. By default, this method will not overwrite existing files, the third parameter can be set to true to enable overwriting of files. This method is similar to ZipArchive::extractTo().
pathto
Path within an archive to the file to delete.
files
The name of a file or directory to extract, or an array of files/directories to extract
overwrite
Set to TRUE to enable overwriting existing files
returns TRUE on success, but it is better to check for thrown exception,
and assume success if none is thrown.
Throws PharException if errors occur while flushing changes to disk.
Beispiel #1 A PharData::extractTo() example
<?php
try {
$phar = new PharData('myphar.tar');
$phar->extractTo('/full/path'); // extract all files
$phar->extractTo('/another/path', 'file.txt'); // extract only file.txt
$phar->extractTo('/this/path',
array('file1.txt', 'file2.txt')); // extract 2 files only
$phar->extractTo('/third/path', null, true); // extract all files, and overwrite
} catch (Exception $e) {
// handle errors
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::isWritable — Returns true if the tar/zip archive can be modified
This method returns TRUE if the tar/zip archive on disk is not read-only.
Unlike Phar::isWritable(), data-only tar/zip archives
can be modified even if phar.readonly is set to 1.
No parameters.
Returns TRUE if the tar/zip archive can be modified
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::offsetSet — set the contents of a file within the tar/zip to those of an external file or string
$offset
, string $value
)This is an implementation of the ArrayAccess interface allowing direct manipulation of the contents of a tar/zip archive using array access brackets. offsetSet is used for modifying an existing file, or adding a new file to a tar/zip archive.
offset
The filename (relative path) to modify in a tar or zip archive.
value
Content of the file.
No return values.
Throws PharException if there are any problems flushing changes made to the tar/zip archive to disk.
Beispiel #1 A PharData::offsetSet() example
offsetSet should not be accessed directly, but instead used via array access with the [] operator.
<?php
$p = new PharData('/path/to/my.tar');
try {
// calls offsetSet
$p['file.txt'] = 'Hi there';
} catch (Exception $e) {
echo 'Could not modify file.txt:', $e;
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::offsetUnset — remove a file from a tar/zip archive
$offset
)This is an implementation of the ArrayAccess interface allowing direct manipulation of the contents of a tar/zip archive using array access brackets. offsetUnset is used for deleting an existing file, and is called by the unset() language construct.
offset
The filename (relative path) to modify in the tar/zip archive.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws PharException if there are any problems flushing changes made to the tar/zip archive to disk.
Beispiel #1 A PharData::offsetUnset() example
<?php
$p = new PharData('/path/to/my.zip');
try {
// deletes file.txt from my.zip by calling offsetUnset
unset($p['file.txt']);
} catch (Exception $e) {
echo 'Could not delete file.txt: ', $e;
}
?>
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::setAlias — dummy function (Phar::setAlias is not valid for PharData)
$alias
)Non-executable tar/zip archives cannot have an alias, so this method simply throws an exception.
alias
A shorthand string that this archive can be referred to in phar stream wrapper access. This parameter is ignored.
Throws PharException on all method calls
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::setDefaultStub — dummy function (Phar::setDefaultStub is not valid for PharData)
$index
[, string $webindex
]] )Non-executable tar/zip archives cannot have a stub, so this method simply throws an exception.
index
Relative path within the phar archive to run if accessed on the command-line
webindex
Relative path within the phar archive to run if accessed through a web browser
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws PharException on all method calls
(PHP >= 5.3.0, PECL phar >= 1.0.0)
Phar::setMetadata — Sets phar archive meta-data
Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
Phar::setMetadata() should be used to store customized data that describes something about the phar archive as a complete entity. PharFileInfo::setMetadata() should be used for file-specific meta-data. Meta-data can slow down the performance of loading a phar archive if the data is large.
Some possible uses for meta-data include specifying which file within the archive should be used to bootstrap the archive, or the location of a file manifest like » PEAR's package.xml file. However, any useful data that describes the phar archive may be stored.
metadata
Any PHP variable containing information to store that describes the phar archive
Es wird kein Wert zurückgegeben.
Beispiel #1 A Phar::setMetadata() example
<?php
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p['file.php'] = '<?php echo "hello"';
$p->setMetadata(array('bootstrap' => 'file.php'));
var_dump($p->getMetadata());
} catch (Exception $e) {
echo 'Could not create and/or modify phar:', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(1) {
["bootstrap"]=>
string(8) "file.php"
}
(PHP >= 5.3.0, PECL phar >= 1.1.0)
Phar::setSignatureAlgorithm — set the signature algorithm for a phar and apply it. The
$sigtype
)Hinweis:
Diese Methode des Phar-Objekts funktioniert nur wenn die php.ini-Einstellung phar.readonly auf 0 gesetzt ist, sonst wird eine PharException geworfen.
set the signature algorithm for a phar and apply it. The signature algorithm must be one of Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, or Phar::PGP (pgp not yet supported and falls back to SHA-1).
sigtype
One of Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, or Phar::PGP
Es wird kein Wert zurückgegeben.
Throws UnexpectedValueException for many errors, BadMethodCallException if called for a zip- or a tar-based phar archive, and a PharException if any problems occur flushing changes to disk.
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharData::setStub — dummy function (Phar::setStub is not valid for PharData)
$stub
)Non-executable tar/zip archives cannot have a stub, so this method simply throws an exception.
stub
A string or an open stream handle to use as the executable stub for this phar archive. This parameter is ignored.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws PharException on all method calls
(No version information available, might only be in SVN)
The PharFileInfo class provides a high-level interface to the contents and attributes of a single file within a phar archive.
$entry
)(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::chmod — Sets file-specific permission bits
$permissions
)PharFileInfo::chmod() allows setting of the executable file permissions bit, as well as read-only bits. Writeable bits are ignored, and set at runtime based on the phar.readonly INI variable. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed if the file is within a Phar archive. Files within PharData archives do not have this restriction.
Es wird kein Wert zurückgegeben.
Beispiel #1 A PharFileInfo::chmod() example
<?php
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar('brandnewphar.phar', 0, 'brandnewphar.phar');
$p['file.sh'] = '#!/usr/local/lib/php
<?php echo "hi"; ?>';
// set executable bit
$p['file.sh']->chmod(0555);
var_dump($p['file.sh']->isExecutable());
} catch (Exception $e) {
echo 'Could not create/modify phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true)
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharFileInfo::compress — Compresses the current Phar entry with either zlib or bzip2 compression
$compression
)This method compresses the file inside the Phar archive using either bzip2 compression or zlib compression. The bzip2 or zlib extension must be enabled to take advantage of this feature. In addition, if the file is already compressed, the respective extension must be enabled in order to decompress the file. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed if the file is within a Phar archive. Files within PharData archives do not have this restriction.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, or if the bzip2/zlib extension is not available.
Beispiel #1 A PharFileInfo::compress() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
var_dump($file->isCompressed(Phar::BZ2));
$p['myfile.txt']->compress(Phar::BZ2);
var_dump($file->isCompressed(Phar::BZ2));
} catch (Exception $e) {
echo 'Create/modify operations on my.phar failed: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::__construct — Construct a Phar entry object
$entry
)This should not be called directly. Instead, a PharFileInfo object is initialized by calling Phar::offsetGet() through array access.
entry
The full url to retrieve a file. If you wish to retrieve the information for the file my/file.php from the phar boo.phar, the entry should be phar://boo.phar/my/file.php.
Throws BadMethodCallException if __construct() is called twice. Throws UnexpectedValueException if the phar URL requested is malformed, the requested phar cannot be opened, or the file can't be found within the phar.
Beispiel #1 A PharFileInfo::__construct() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['testfile.txt'] = "hi\nthere\ndude";
$file = $p['testfile.txt'];
foreach ($file as $line => $text) {
echo "line number $line: $text";
}
// this also works
$file = new PharFileInfo('phar:///path/to/my.phar/testfile.txt');
foreach ($file as $line => $text) {
echo "line number $line: $text";
}
} catch (Exception $e) {
echo 'Phar operations failed: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
line number 1: hi line number 2: there line number 3: dude line number 1: hi line number 2: there line number 3: dude
(PHP >= 5.3.0, PECL phar >= 2.0.0)
PharFileInfo::decompress — Decompresses the current Phar entry within the phar
This method decompresses the file inside the Phar archive. Depending on how the file is compressed, the bzip2 or zlib extensions must be enabled to take advantage of this feature. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed if the file is within a Phar archive. Files within PharData archives do not have this restriction.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, or if the bzip2/zlib extension is not available.
Beispiel #1 A PharFileInfo::decompress() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
$file->compress(Phar::GZ);
var_dump($file->isCompressed());
$p['myfile.txt']->decompress();
var_dump($file->isCompressed());
} catch (Exception $e) {
echo 'Create/modify failed for my.phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
int(4096) bool(false)
(PHP >= 5.3.0, PECL phar >= 1.2.0)
PharFileInfo::delMetadata — Deletes the metadata of the entry
Deletes the metadata of the entry, if any.
No parameters.
Returns TRUE if successful, FALSE if the entry had no metadata.
As with all functionality that modifies the contents of
a phar, the phar.readonly INI variable
must be off in order to succeed if the file is within a Phar
archive. Files within PharData archives do not have
this restriction.
Throws PharException if errors occurred while flushing changes to disk, and BadMethodCallException if write access is disabled.
Beispiel #1 A PharFileInfo::delMetaData() example
<?php
try {
$a = new Phar('myphar.phar');
$a['hi'] = 'hi';
var_dump($a['hi']->delMetadata());
$a['hi']->setMetadata('there');
var_dump($a['hi']->delMetadata());
var_dump($a['hi']->delMetadata());
} catch (Exception $e) {
// handle errors
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true) bool(false)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::getCRC32 — Returns CRC32 code or throws an exception if CRC has not been verified
This returns the crc32() checksum of the file within the Phar archive.
The crc32() checksum of the file within the Phar archive.
Throws BadMethodCallException if the file has not yet had its CRC32 verified. This should be impossible with normal use, as the CRC is verified upon opening the file for reading or writing.
Beispiel #1 A PharFileInfo::getCRC32() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
echo $file->getCRC32();
} catch (Exception $e) {
echo 'Write operations on my.phar.phar failed: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
3633523372
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::getCompressedSize — Returns the actual size of the file (with compression) inside the Phar archive
This returns the size of the file within the Phar archive. Uncompressed files will return the same value for getCompressedSize as they will with filesize()
The size in bytes of the file within the Phar archive on disk.
Beispiel #1 A PharFileInfo::getCompressedSize() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
echo $file->getCompressedSize();
} catch (Exception $e) {
echo 'Write operations failed on my.phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::getMetadata — Returns file-specific meta-data saved with a file
Return meta-data that was saved in the Phar archive's manifest for this file.
any PHP variable that can be serialized and is stored as meta-data for the file,
or NULL if no meta-data is stored.
Beispiel #1 A PharFileInfo::getMetadata() example
<?php
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p['file.txt'] = 'hello';
$p['file.txt']->setMetadata(array('user' => 'bill', 'mime-type' => 'text/plain'));
var_dump($p['file.txt']->getMetadata());
} catch (Exception $e) {
echo 'Could not create/modify brandnewphar.phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(2) {
["user"]=>
string(4) "bill"
["mime-type"]=>
string(10) "text/plain"
}
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::getPharFlags — Returns the Phar file entry flags
This returns the flags set in the manifest for a Phar. This will always return 0 in the current implementation.
The Phar flags (always 0 in the current implementation)
Beispiel #1 A PharFileInfo::getPharFlags() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
var_dump($file->getPharFlags());
} catch (Exception $e) {
echo 'Could not create/modify my.phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
int(0)
(PHP >= 5.3.0, PECL phar >= 1.2.0)
PharFileInfo::hasMetadata — Returns the metadata of the entry
Returns the metadata of a file within a phar archive.
No parameters.
Returns FALSE if no metadata is set or is NULL, TRUE if metadata is not NULL
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::isCRCChecked — Returns whether file entry has had its CRC verified
This returns whether a file within a Phar archive has had its CRC verified.
TRUE if the file has had its CRC verified, FALSE if not.
Beispiel #1 A PharFileInfo::isCRCChecked() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
var_dump($file->isCRCChecked());
} catch (Exception $e) {
echo 'Create/modify operations failed on my.phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::isCompressed — Returns whether the entry is compressed
$compression_type = 9021976
] )This returns whether a file is compressed within a Phar archive with either Gzip or Bzip2 compression.
compression_type
One of Phar::GZ or Phar::BZ2,
defaults to any compression.
TRUE if the file is compressed within the Phar archive, FALSE if not.
Beispiel #1 A PharFileInfo::isCompressed() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p['myfile2.txt']->setCompressedGZ();
$file = $p['myfile.txt'];
$file2 = $p['myfile2.txt'];
var_dump($file->isCompressed());
var_dump($file2->isCompressed());
} catch (Exception $e) {
echo 'Create/modify on phar my.phar failed: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::isCompressedBZIP2 — Returns whether the entry is compressed using bzip2
Hinweis:
Diese Methode wurde beginnend mit Version 2.0.0 der phar-Extension entfernt. Alternative Implementationen bieten PharFileInfo::isCompressed(), PharFileInfo::decompress() und PharFileInfo::compress().
This returns whether a file is compressed within a Phar archive with Bzip2 compression.
TRUE if the file is compressed within the Phar archive using Bzip2, FALSE if not.
Beispiel #1 A PharFileInfo::isCompressedBZIP2() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p['myfile3.txt'] = 'hi';
$p['myfile2.txt']->setCompressedGZ();
$p['myfile3.txt']->setCompressedBZIP2();
$file = $p['myfile.txt'];
$file2 = $p['myfile2.txt'];
$file3 = $p['myfile3.txt'];
var_dump($file->isCompressedBZIP2());
var_dump($file2->isCompressedBZIP2());
var_dump($file3->isCompressedBZIP2());
} catch (Exception $e) {
echo 'Create/modify on phar my.phar failed: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::isCompressedGZ — Returns whether the entry is compressed using gz
Hinweis:
Diese Methode wurde beginnend mit Version 2.0.0 der phar-Extension entfernt. Alternative Implementationen bieten PharFileInfo::isCompressed(), PharFileInfo::decompress() und PharFileInfo::compress().
This returns whether a file is compressed within a Phar archive with Gzip compression.
TRUE if the file is compressed within the Phar archive using Gzip, FALSE if not.
Beispiel #1 A PharFileInfo::isCompressedGZ() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p['myfile3.txt'] = 'hi';
$p['myfile2.txt']->setCompressedGZ();
$p['myfile3.txt']->setCompressedBZIP2();
$file = $p['myfile.txt'];
$file2 = $p['myfile2.txt'];
$file3 = $p['myfile3.txt'];
var_dump($file->isCompressedGZ());
var_dump($file2->isCompressedGZ());
var_dump($file3->isCompressedGZ());
} catch (Exception $e) {
echo 'Create/modify on phar my.phar failed: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true) bool(false)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::setCompressedBZIP2 — Compresses the current Phar entry within the phar using Bzip2 compression
Hinweis:
Diese Methode wurde beginnend mit Version 2.0.0 der phar-Extension entfernt. Alternative Implementationen bieten PharFileInfo::isCompressed(), PharFileInfo::decompress() und PharFileInfo::compress().
This method compresses the file inside the Phar archive using bzip2 compression. The bzip2 extension must be enabled to take advantage of this feature. In addition, if the file is already compressed using gzip compression, the zlib extension must be enabled in order to decompress the file. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, or if the bzip2 extension is not available.
Beispiel #1 A PharFileInfo::setCompressedBZIP2() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
var_dump($file->isCompressedBZIP2());
$p['myfile.txt']->setCompressedBZIP2();
var_dump($file->isCompressedBZIP2());
} catch (Exception $e) {
echo 'Create/modify operations on my.phar failed: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::setCompressedGZ — Compresses the current Phar entry within the phar using gz compression
Hinweis:
Diese Methode wurde beginnend mit Version 2.0.0 der phar-Extension entfernt. Alternative Implementationen bieten PharFileInfo::isCompressed(), PharFileInfo::decompress() und PharFileInfo::compress().
This method compresses the file inside the Phar archive using gzip compression. The zlib extension must be enabled to take advantage of this feature. In addition, if the file is already compressed using bzip2 compression, the bzip2 extension must be enabled in order to decompress the file. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, or if the zlib extension is not available.
Beispiel #1 A PharFileInfo::setCompressedGZ() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
var_dump($file->isCompressedGZ());
$p['myfile.txt']->setCompressedGZ();
var_dump($file->isCompressedGZ());
} catch (Exception $e) {
echo 'Create/modify operations on my.phar failed: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true)
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::setMetadata — Sets file-specific meta-data saved with a file
PharFileInfo::setMetadata() should only be used to store customized data in a file that cannot be represented with existing information stored with a file. Meta-data can significantly slow down the performance of loading a phar archive if the data is large, or if there are many files containing meta-data. It is important to note that file permissions are natively supported inside a phar; it is possible to set them with the PharFileInfo::chmod() method. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed if the file is within a Phar archive. Files within PharData archives do not have this restriction.
Some possible uses for meta-data include passing a user/group that should be set when a file is extracted from the phar to disk. Other uses could include explicitly specifying a MIME type to return. However, any useful data that describes a file, but should not be contained inside of it may be stored.
metadata
Any PHP variable containing information to store alongside a file
Es wird kein Wert zurückgegeben.
Beispiel #1 A PharFileInfo::setMetadata() example
<?php
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p['file.txt'] = 'hello';
$p['file.txt']->setMetadata(array('user' => 'bill', 'mime-type' => 'text/plain'));
var_dump($p['file.txt']->getMetaData());
} catch (Exception $e) {
echo 'Could not create/modify phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(2) {
["user"]=>
string(4) "bill"
["mime-type"]=>
string(10) "text/plain"
}
(PHP >= 5.3.0, PECL phar >= 1.0.0)
PharFileInfo::setUncompressed — Uncompresses the current Phar entry within the phar, if it is compressed
Hinweis:
Diese Methode wurde beginnend mit Version 2.0.0 der phar-Extension entfernt. Alternative Implementationen bieten PharFileInfo::isCompressed(), PharFileInfo::decompress() und PharFileInfo::compress().
This method decompresses the file inside the Phar archive. Depending on how the file is compressed, the bzip2 or zlib extensions must be enabled to take advantage of this feature. As with all functionality that modifies the contents of a phar, the phar.readonly INI variable must be off in order to succeed.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Throws BadMethodCallException if the phar.readonly INI variable is on, or if the bzip2/zlib extension is not available.
Beispiel #1 A PharFileInfo::setUncompressed() example
<?php
try {
$p = new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$file = $p['myfile.txt'];
$file->setCompressedGZ();
var_dump($file->isCompressed());
$p['myfile.txt']->setUncompressed();
var_dump($file->isCompressed());
} catch (Exception $e) {
echo 'Create/modify failed for my.phar: ', $e;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(false)
(Unknown)
The PharException class provides a phar-specific exception class for try/catch blocks.
(Unknown)
PharException — The PharException class provides a phar-specific exception class for try/catch blocks.
Rar is a powerful and effective archiver created by Eugene Roshal. This extension gives you possibility to read Rar archives but doesn't support writing Rar archives, because this is not supported by the UnRar library and is directly prohibited by its license.
More information about Rar and UnRar can be found at » http://www.rarlabs.com/.
Diese Erweiterung benötigt für die Kompilierung keine externen Bibliotheken.
Rar is currently available through PECL » http://pecl.php.net/package/rar.
Also you can use the PECL installer to install the Rar extension, using the following command: pecl -v install rar.
You can always download the tar.gz package and install Rar by hand:
Beispiel #1 Rar installation
gunzip rar-xxx.tgz tar -xvf rar-xxx.tar cd rar-xxx phpize ./configure && make && make install
Windows users will enable php_rar.dll inside of php.ini in order to use these functions. Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
This extension registers three internal classes: The archive representations returned by rar_open() – RarArchive –, the entry representations returned by rar_list() and rar_entry_get() – RarEntry and the exception type RarException.
This extension also register a stream resource, called "rar" and a URL wrapper called "rar wrapper" and registered under the prefix "rar".
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.
RAR_HOST_MSDOS
(integer)
RarEntry::HOST_MSDOS instead.
RAR_HOST_OS2
(integer)
RarEntry::HOST_OS2 instead.
RAR_HOST_WIN32
(integer)
RarEntry::HOST_WIN32 instead.
RAR_HOST_UNIX
(integer)
RarEntry::HOST_UNIX instead.
RAR_HOST_BEOS
(integer)
RarEntry::HOST_BEOS instead.
See also the examples under rar:// wrapper.
Beispiel #1 On-the-fly decompression
<?php
if (!array_key_exists("i", $_GET) || !is_numeric($_GET["i"]))
die("Index unspecified or non-numeric");
$index = (int) $_GET["i"];
$arch = RarArchive::open("example.rar");
if ($arch === FALSE)
die("Cannot open example.rar");
$entries = $arch->getEntries();
if ($entries === FALSE)
die("Cannot retrieve entries");
if (!array_key_exists($index, $entries))
die("No such index: $index");
$orfilename = $entries[$index]->getName(); //UTF-8 encoded
$filesize = $entries[$index]->getUnpackedSize();
/* you could check HTTP_IF_MODIFIED_SINCE here and compare with
* $entries[$index]->getFileTime(). You could also send a
* "Last modified" header */
$fp = $entries[$index]->getStream();
if ($fp === FALSE)
die("Cannot open file with index $index insided the archive.");
$arch->close(); //no longer needed; stream is independent
function detectUserAgent() {
if (!array_key_exists('HTTP_USER_AGENT', $_SERVER))
return "Other";
$uas = $_SERVER['HTTP_USER_AGENT'];
if (preg_match("@Opera/@", $uas))
return "Opera";
if (preg_match("@Firefox/@", $uas))
return "Firefox";
if (preg_match("@Chrome/@", $uas))
return "Chrome";
if (preg_match("@MSIE ([0-9.]+);@", $uas, $matches)) {
if (((float)$matches[1]) >= 7.0)
return "IE";
}
return "Other";
}
/*
* We have 3 options:
* - For FF and Opera, which support RFC 2231, use that format.
* - For IE and Chrome, use attwithfnrawpctenclong
* (http://greenbytes.de/tech/tc2231/#attwithfnrawpctenclong)
* - For the others, convert to ISO-8859-1, if possible
*/
$formatRFC2231 = 'Content-Disposition: attachment; filename*=UTF-8\'\'%s';
$formatDef = 'Content-Disposition: attachment; filename="%s"';
switch (detectUserAgent()) {
case "Opera":
case "Firefox":
$orfilename = rawurlencode($orfilename);
$format = $formatRFC2231;
break;
case "IE":
case "Chrome":
$orfilename = rawurlencode($orfilename);
$format = $formatDef;
break;
default:
if (function_exists('iconv'))
$orfilename =
@iconv("UTF-8", "ISO-8859-1//TRANSLIT", $orfilename);
$format = $formatDef;
}
header(sprintf($format, $orfilename));
//cannot send error messages from now on (headers already sent)
//replace by real content type, perhaps infering from the file extension
$contentType = "application/octet-stream";
header("Content-Type: $contentType");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $filesize");
if ($_SERVER['REQUEST_METHOD'] == "HEAD")
die();
while (!feof($fp)) {
$s = @fread($fp, 8192);
if ($s === false)
break; //useless to send error messages
echo $s;
}
?>
This example opens a RAR file and presents the requested file inside the RAR archive for download to the client.
Beispiel #2 RAR extension filesystem extraction example
<?php
$rar_file = rar_open('example.rar') or die("Can't open Rar archive");
$entries = rar_list($rar_file);
foreach ($entries as $entry) {
echo 'Filename: ' . $entry->getName() . "\n";
echo 'Packed size: ' . $entry->getPackedSize() . "\n";
echo 'Unpacked size: ' . $entry->getUnpackedSize() . "\n";
$entry->extract('/dir/extract/to/');
}
rar_close($rar_file);
?>
This example opens a RAR file archive and extracts each entry to the specified directory.
(PECL rar >= 3.0.0)
rar_wrapper_cache_stats — Cache hits and misses for the URL wrapper
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
Diese Funktion hat keine Parameter.
(No version information available, might only be in SVN)
This class represents a RAR archive, which may be formed by several volumes (parts) and which contains a number of RAR entries (i.e., files, directories and other special objects such as symbolic links).
Objects of this class can be traversed, yielding the entries stored in the respective RAR archive. Those entries can also be obtained through RarArchive::getEntry() and RarArchive::getEntries().
(PECL rar >= 2.0.0)
RarArchive::close -- rar_close — Close RAR archive and free all resources
Objektorientierter Stil (method):
Prozeduraler Stil:
Close RAR archive and free all allocated resources.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 2.0.0 | The RAR entries returned by RarArchive::getEntry() and RarArchive::getEntries() are now invalidated when calling this method. This means that all instance methods called for such entries and not guaranteed to succeed. |
Beispiel #1 Objektorientierter Stil
<?php
$rar_arch = RarArchive::open('latest_winrar.rar');
echo $rar_arch."\n";
$rar_arch->close();
echo $rar_arch."\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
RAR Archive "D:\php_rar\trunk\tests\latest_winrar.rar" RAR Archive "D:\php_rar\trunk\tests\latest_winrar.rar" (closed)
Beispiel #2 Prozeduraler Stil
<?php
$rar_arch = rar_open('latest_winrar.rar');
echo $rar_arch."\n";
rar_close($rar_arch);
echo $rar_arch."\n";
?>
(PECL rar >= 2.0.0)
RarArchive::getComment -- rar_comment_get — Get comment text from the RAR archive
Objektorientierter Stil (method):
Prozeduraler Stil:
Get the (global) comment stored in the RAR archive. It may be up to 64 KiB long.
Hinweis:
This extension does not support comments at the entry level.
Returns the comment or NULL if there is none.
Hinweis:
RAR has currently no support for unicode comments. The encoding of the result of this function is not specified, but it will probably be Windows-1252.
Beispiel #1 Objektorientierter Stil
<?php
$rar_arch = RarArchive::open('commented.rar');
echo $rar_arch->getComment();
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
This is the comment of the file commented.rar.
Beispiel #2 Prozeduraler Stil
<?php
$rar_arch = rar_open('commented.rar');
echo rar_comment_get($rar_arch);
?>
(PECL rar >= 2.0.0)
RarArchive::getEntries -- rar_list — Get full list of entries from the RAR archive
Objektorientierter Stil (method):
Prozeduraler Stil:
Get entries list (files and directories) from the RAR archive.
Hinweis:
If the archive has entries with the same name, this method, together with RarArchive foreach iteration and array-like access with numeric indexes, are the only ones to access all the entries (i.e., RarArchive::getEntry() and the rar:// wrapper are insufficient).
rar_list() returns array of RarEntry objects
Im Fehlerfall wird FALSE zurückgegeben..
| Version | Beschreibung |
|---|---|
| 3.0.0 | Support for RAR archives with repeated entry names is no longer defective. |
Beispiel #1 Objektorientierter Stil
<?php
$rar_arch = RarArchive::open('solid.rar');
if ($rar_arch === FALSE)
die("Could not open RAR archive.");
$rar_entries = $rar_arch->getEntries();
if ($rar_entries === FALSE)
die("Could retrieve entries.");
echo "Found " . count($rar_entries) . " entries.\n";
foreach ($rar_entries as $e) {
echo $e;
echo "\n";
}
$rar_arch->close();
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Found 2 entries. RarEntry for file "tese.txt" (23b93a7a) RarEntry for file "unrardll.txt" (2ed64b6e)
Beispiel #2 Prozeduraler Stil
<?php
$rar_arch = rar_open('solid.rar');
if ($rar_arch === FALSE)
die("Could not open RAR archive.");
$rar_entries = rar_list($rar_arch);
if ($rar_entries === FALSE)
die("Could retrieve entries.");
echo "Found " . count($rar_entries) . " entries.\n";
foreach ($rar_entries as $e) {
echo $e;
echo "\n";
}
rar_close($rar_arch);
?>
(PECL rar >= 2.0.0)
RarArchive::getEntry -- rar_entry_get — Get entry object from the RAR archive
Objektorientierter Stil (method):
Prozeduraler Stil:
Get entry object (file or directory) from the RAR archive.
Hinweis:
You can also get entry objects using RarArchive::getEntries().
Note that a RAR archive can have multiple entries with the same name; this method will retrieve only the first.
rarfile
A RarArchive object, opened with rar_open().
entryname
Path to the entry within the RAR archive.
Hinweis:
The path must be the same returned by RarEntry::getName().
Returns the matching RarEntry object Im Fehlerfall wird FALSE zurückgegeben..
Beispiel #1 Objektorientierter Stil
<?php
$rar_arch = RarArchive::open('solid.rar');
if ($rar_arch === FALSE)
die("Could not open RAR archive.");
$rar_entry = $rar_arch->getEntry('tese.txt');
if ($rar_entry === FALSE)
die("Could get such entry");
echo get_class($rar_entry)."\n";
echo $rar_entry;
$rar_arch->close();
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
RarEntry RarEntry for file "tese.txt" (23b93a7a)
Beispiel #2 Prozeduraler Stil
<?php
$rar_arch = rar_open('solid.rar');
if ($rar_arch === FALSE)
die("Could not open RAR archive.");
$rar_entry = rar_entry_get($rar_arch, 'tese.txt');
if ($rar_entry === FALSE)
die("Could get such entry");
echo get_class($rar_entry)."\n";
echo $rar_entry;
rar_close($rar_arch);
?>
(PECL rar >= 3.0.0)
RarArchive::isBroken -- rar_broken_is — Test whether an archive is broken (incomplete)
Objektorientierter Stil (method):
Prozeduraler Stil:
This function determines whether an archive is incomplete, i.e., if a volume is missing or a volume is truncated.
Returns TRUE if the archive is broken, FALSE otherwise. This function may also
return FALSE if the passed file has already been closed. The only way
to tell the two cases apart is to enable
exceptions with RarException::setUsingExceptions(); however,
this should be unnecessary as a program should not operate on closed files.
Beispiel #1 Objektorientierter Stil
<?php
function retnull() { return null; }
$file = dirname(__FILE__) . "/multi_broken.part1.rar";
/* Third argument is used to omit notice */
$arch = RarArchive::open($file, null, 'retnull');
var_dump($arch->isBroken());
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
bool(true)
Beispiel #2 Prozeduraler Stil
<?php
function retnull() { return null; }
$file = dirname(__FILE__) . "/multi_broken.part1.rar";
/* Third argument is used to omit notice */
$arch = rar_open($file, null, 'retnull');
var_dump(rar_broken_is($arch));
?>
(PECL rar >= 2.0.0)
RarArchive::isSolid -- rar_solid_is — Check whether the RAR archive is solid
Objektorientierter Stil (method):
Prozeduraler Stil:
Check whether the RAR archive is solid. Individual file extraction is slower on solid archives.
Returns TRUE if the archive is solid, FALSE otherwise.
Beispiel #1 Objektorientierter Stil
<?php
$arch1 = RarArchive::open("store_method.rar");
$arch2 = RarArchive::open("solid.rar");
echo "$arch1: " . ($arch1->isSolid()?'yes':'no') ."\n";
echo "$arch2: " . ($arch2->isSolid()?'yes':'no') . "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
RAR Archive "C:\php_rar\trunk\tests\store_method.rar": no RAR Archive "C:\php_rar\trunk\tests\solid.rar": yes
Beispiel #2 Prozeduraler Stil
<?php
$arch1 = rar_open("store_method.rar");
$arch2 = rar_open("solid.rar");
echo "$arch1: " . (rar_solid_is($arch1)?'yes':'no') ."\n";
echo "$arch2: " . (rar_solid_is($arch2)?'yes':'no') . "\n";
?>
(PECL rar >= 2.0.0)
RarArchive::open -- rar_open — Open RAR archive
Objektorientierter Stil (method):
$filename
[, string $password = NULL
[, callable $volume_callback = NULL
]] )Prozeduraler Stil:
$filename
[, string $password = NULL
[, callable $volume_callback = NULL
]] )Open specified RAR archive and return RarArchive instance representing it.
Hinweis:
If opening a multi-volume archive, the path of the first volume should be passed as the first parameter. Otherwise, not all files will be shown. This is by design.
filename
Path to the Rar archive.
password
A plain password, if needed to decrypt the headers. It will also be used by default if encrypted files are found. Note that the files may have different passwords in respect to the headers and among them.
volume_callback
A function that receives one parameter – the path of the volume
that was not found – and returns a string with the correct path
for such volume or NULL if such volume does
not exist or is not known. The programmer should ensure the
passed function doesn't cause loops as this function is called
repeatedly if the path returned in a previous call did not
correspond to the needed volume. Specifying this parameter omits
the notice that would otherwise be emitted whenever a volume is
not found; an implementation that only returns NULL
can therefore be used to merely omit such notices.
Prior to version 2.0.0, this function would not handle relative paths correctly. Use realpath() as a workaround.
Returns the requested RarArchive instance Im Fehlerfall wird FALSE zurückgegeben..
| Version | Beschreibung |
|---|---|
| 3.0.0 |
volume_callback was added.
|
Beispiel #1 Objektorientierter Stil
<?php
$rar_arch = RarArchive::open('encrypted_headers.rar', 'samplepassword');
if ($rar_arch === FALSE)
die("Failed opening file");
$entries = $rar_arch->getEntries();
if ($entries === FALSE)
die("Failed fetching entries");
echo "Found " . count($entries) . " files.\n";
if (empty($entries))
die("No valid entries found.");
$stream = reset($entries)->getStream();
if ($stream === FALSE)
die("Failed opening first file");
$rar_arch->close();
echo "Content of first one follows:\n";
echo stream_get_contents($stream);
fclose($stream);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Found 2 files. Content of first one follows: Encrypted file 1 contents.
Beispiel #2 Prozeduraler Stil
<?php
$rar_arch = rar_open('encrypted_headers.rar', 'samplepassword');
if ($rar_arch === FALSE)
die("Failed opening file");
$entries = rar_list($rar_arch);
if ($entries === FALSE)
die("Failed fetching entries");
echo "Found " . count($entries) . " files.\n";
if (empty($entries))
die("No valid entries found.");
$stream = reset($entries)->getStream();
if ($stream === FALSE)
die("Failed opening first file");
rar_close($rar_arch);
echo "Content of first one follows:\n";
echo stream_get_contents($stream);
fclose($stream);
?>
Beispiel #3 Volume Callback
<?php
/* In this example, there's a volume named multi_broken.part1.rar
* whose next volume is named multi.part2.rar */
function resolve($vol) {
if (preg_match('/_broken/', $vol))
return str_replace('_broken', '', $vol);
else
return null;
}
$rar_file1 = rar_open(dirname(__FILE__).'/multi_broken.part1.rar', null, 'resolve');
$entry = $rar_file1->getEntry('file2.txt');
$entry->extract(null, dirname(__FILE__) . "/temp_file2.txt");
?>
(PECL rar >= 3.0.0)
RarArchive::setAllowBroken — Whether opening broken archives is allowed
Objektorientierter Stil (method):
$allow_broken
)Prozeduraler Stil:
This method defines whether broken archives can be read or all the operations that attempt to extract the archive entries will fail. Broken archives are archives for which no error is detected when the file is opened but an error occurs when reading the entries.
rarfile
A RarArchive object, opened with rar_open().
allow_broken
Whether to allow reading broken files (TRUE) or not (FALSE).
Returns TRUE Im Fehlerfall wird FALSE zurückgegeben.. It will only fail if the file has
already been closed.
Beispiel #1 Objektorientierter Stil
<?php
function retnull() { return null; }
$file = dirname(__FILE__) . "/multi_broken.part1.rar";
/* Third argument omits "volume not found" message */
$a = RarArchive::open($file, null, 'retnull');
$a->setAllowBroken(true);
foreach ($a->getEntries() as $e) {
echo "$e\n";
}
var_dump(count($a));
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
RarEntry for file "file1.txt" (52b28202) int(1)
Beispiel #2 Prozeduraler Stil
<?php
function retnull() { return null; }
$file = dirname(__FILE__) . "/multi_broken.part1.rar";
/* Third argument omits "volume not found" message */
$a = rar_open($file, null, 'retnull');
rar_allow_broken_set($a, true);
foreach (rar_list($a) as $e) {
echo "$e\n";
}
var_dump(count($a));
?>
(PECL rar >= 2.0.0)
RarArchive::__toString — Get text representation
Provides a string representation for this RarArchive object. It currently shows the full path name of the archive volume that was opened and whether the resource is valid or was already closed through a call to RarArchive::close().
This method may be used only for debugging purposes, as there are no guarantees as to which information the result contains or how it is formatted.
Diese Funktion hat keine Parameter.
A textual representation of this RarArchive object. The content of this representation is unspecified.
Beispiel #1 RarArchive::__toString() example
<?php
$rar_arch = RarArchive::open('latest_winrar.rar');
echo $rar_arch."\n";
$rar_arch->close();
echo $rar_arch."\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
RAR Archive "D:\php_rar\trunk\tests\latest_winrar.rar" RAR Archive "D:\php_rar\trunk\tests\latest_winrar.rar" (closed)
(No version information available, might only be in SVN)
A RAR entry, representing a directory or a compressed file inside a RAR archive.
$dir
[, string $filepath = ''
[, string $password = NULL
[, bool $extended_data = false
]]] )RarEntry::HOST_MSDOS
If the return value of RarEntry::getHostOs() equals this constant, MS-DOS was used to
add this entry. Use instead of RAR_HOST_MSDOS.
RarEntry::HOST_OS2
If the return value of RarEntry::getHostOs() equals this constant, OS/2 was used to
add this entry. Intended to replace RAR_HOST_OS2.
RarEntry::HOST_WIN32
If the return value of RarEntry::getHostOs() equals this constant, Microsoft Windows was used to
add this entry. Intended to replace RAR_HOST_WIN32.
RarEntry::HOST_UNIX
If the return value of RarEntry::getHostOs() equals this constant, an unspecified UNIX OS was used to
add this entry. Intended to replace RAR_HOST_UNIX.
RarEntry::HOST_MACOS
If the return value of RarEntry::getHostOs() equals this constant, Mac OS was used to add this entry.
RarEntry::HOST_BEOS
If the return value of RarEntry::getHostOs() equals this constant, BeOS was used to
add this entry. Intended to replace RAR_HOST_BEOS.
RarEntry::ATTRIBUTE_WIN_READONLY
Bit that represents a Windows entry with a read-only attribute. To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
Bit that represents a Windows entry with a hidden attribute. To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_SYSTEM
Bit that represents a Windows entry with a system attribute. To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_DIRECTORY
Bit that represents a Windows entry with a directory attribute (entry is a directory). To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows. See also RarEntry::isDirectory(), which also works with entries that were not added in WinRAR.
RarEntry::ATTRIBUTE_WIN_ARCHIVE
Bit that represents a Windows entry with an archive attribute. To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_DEVICE
Bit that represents a Windows entry with a device attribute. To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_NORMAL
Bit that represents a Windows entry with a normal file attribute (entry is NOT a directory). To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows. See also RarEntry::isDirectory(), which also works with entries that were not added in WinRAR.
RarEntry::ATTRIBUTE_WIN_TEMPORARY
Bit that represents a Windows entry with a temporary attribute. To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_SPARSE_FILE
Bit that represents a Windows entry with a sparse file attribute (file is an NTFS sparse file). To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_REPARSE_POINT
Bit that represents a Windows entry with a reparse point attribute (entry is an NTFS reparse point, e.g. a directory junction or a mount file system). To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_COMPRESSED
Bit that represents a Windows entry with a compressed attribute (NTFS only). To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_OFFLINE
Bit that represents a Windows entry with an offline attribute (entry is offline and not accessible). To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_NOT_CONTENT_INDEXED
Bit that represents a Windows entry with a not content indexed attribute (entry is to be indexed). To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_ENCRYPTED
Bit that represents a Windows entry with an encrypted attribute (NTFS only). To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_WIN_VIRTUAL
Bit that represents a Windows entry with a virtual attribute. To be used with RarEntry::getAttr() on entries whose host OS is Microsoft Windows.
RarEntry::ATTRIBUTE_UNIX_WORLD_EXECUTE
Bit that represents a UNIX entry that is world executable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_WORLD_WRITE
Bit that represents a UNIX entry that is world writable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_WORLD_READ
Bit that represents a UNIX entry that is world readable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_GROUP_EXECUTE
Bit that represents a UNIX entry that is group executable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_GROUP_WRITE
Bit that represents a UNIX entry that is group writable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_GROUP_READ
Bit that represents a UNIX entry that is group readable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_OWNER_EXECUTE
Bit that represents a UNIX entry that is owner executable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_OWNER_WRITE
Bit that represents a UNIX entry that is owner writable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_OWNER_READ
Bit that represents a UNIX entry that is owner readable. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_STICKY
Bit that represents the UNIX sticky bit. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_SETGID
Bit that represents the UNIX setgid attribute. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_SETUID
Bit that represents the UNIX setuid attribute. To be used with RarEntry::getAttr() on entries whose host OS is UNIX.
RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET
Mask to isolate the last four bits (nibble) of UNIX attributes
(_S_IFMT, the type of file mask). To be used with
RarEntry::getAttr() on entries whose host OS is UNIX and with the
constants RarEntry::ATTRIBUTE_UNIX_FIFO,
RarEntry::ATTRIBUTE_UNIX_CHAR_DEV,
RarEntry::ATTRIBUTE_UNIX_DIRECTORY,
RarEntry::ATTRIBUTE_UNIX_BLOCK_DEV,
RarEntry::ATTRIBUTE_UNIX_REGULAR_FILE,
RarEntry::ATTRIBUTE_UNIX_SYM_LINK and
RarEntry::ATTRIBUTE_UNIX_SOCKET.
RarEntry::ATTRIBUTE_UNIX_FIFO
Unix FIFOs will have attributes whose last four bits have this value. To be used with
RarEntry::getAttr() on entries whose host OS is UNIX and with the
constant
RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET.
RarEntry::ATTRIBUTE_UNIX_CHAR_DEV
Unix character devices will have attributes whose last four bits have this value. To be used with
RarEntry::getAttr() on entries whose host OS is UNIX and with the
constant
RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET.
RarEntry::ATTRIBUTE_UNIX_DIRECTORY
Unix directories will have attributes whose last four bits have this value. To be used with
RarEntry::getAttr() on entries whose host OS is UNIX and with the
constant
RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET. See also
RarEntry::isDirectory(), which also works with entries that
were added in other operating systems.
RarEntry::ATTRIBUTE_UNIX_BLOCK_DEV
Unix block devices will have attributes whose last four bits have this value. To be used with
RarEntry::getAttr() on entries whose host OS is UNIX and with the
constant
RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET.
RarEntry::ATTRIBUTE_UNIX_REGULAR_FILE
Unix regular files (not directories) will have attributes whose last four bits have this value. To be used with
RarEntry::getAttr() on entries whose host OS is UNIX and with the
constant
RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET. See also
RarEntry::isDirectory(), which also works with entries that
were added in other operating systems.
RarEntry::ATTRIBUTE_UNIX_SYM_LINK
Unix symbolic links will have attributes whose last four bits have this value. To be used with
RarEntry::getAttr() on entries whose host OS is UNIX and with the
constant
RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET.
RarEntry::ATTRIBUTE_UNIX_SOCKET
Unix sockets will have attributes whose last four bits have this value. To be used with
RarEntry::getAttr() on entries whose host OS is UNIX and with the
constant
RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET.
(PECL rar >= 0.1)
RarEntry::extract — Extract entry from the archive
$dir
[, string $filepath = ''
[, string $password = NULL
[, bool $extended_data = false
]]] )
RarEntry::extract() extracts the entry's data.
It will create new file in the specified
dir with the name identical to the entry's name,
unless the second argument is specified. See below for more information.
dir
Path to the directory where files should be extracted. This parameter is
considered if and only if filepath is not. If both
parameters are empty an extraction to the current directory will be
attempted.
filepath
Path (relative or absolute) containing the directory and filename of the
extracted file. This parameter overrides both the parameter
dir and the original file name.
password
The password used to encrypt this entry. If the entry is not encrypted, this value will not be used and can
be omitted. If this parameter is omitted and the entry is encrypted, the password given to
rar_open(), if any, will be used. If a wrong password is given, either explicitly
or implicitly via rar_open(), CRC checking will fail and this method will fail and return FALSE.
If no password is given and one is required, this method will fail and return FALSE.
You can check whether an entry is encrypted with RarEntry::isEncrypted().
extended_data
If TRUE, extended information such as NTFS ACLs and Unix owner information will be set in the extract
files, as long as it's present in the archive.
Prior to version 2.0.0, this function would not handle relative paths correctly. Use realpath() as a workaround.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
| Version | Beschreibung |
|---|---|
| 3.0.0 |
extended_data was added.
|
| 3.0.0 | Support for RAR archives with repeated entry names is no longer defective. |
Beispiel #1 RarEntry::extract() example
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");
$entry->extract('/dir/to'); // create /dir/to/Dir/file.txt
$entry->extract(false, '/dir/to/new_name.txt'); // create /dir/to/new_name.txt
?>
Beispiel #2 How to extract all files in archive:
<?php
/* example by Erik Jenssen aka erix */
$filename = "foobar.rar";
$filepath = "/home/foo/bar/";
$rar_file = rar_open($filepath.$filename);
$list = rar_list($rar_file);
foreach($list as $file) {
$entry = rar_entry_get($rar_file, $file);
$entry->extract("."); // extract to the current dir
}
rar_close($rar_file);
?>
(PECL rar >= 0.1)
RarEntry::getAttr — Get attributes of the entry
Returns the OS-dependent attributes of the archive entry.
Diese Funktion hat keine Parameter.
Returns the attributes or FALSE on error.
Beispiel #1 RarEntry::getAttr() example
<?php
$rar_file = rar_open('example.rar') or die("Can't open Rar archive");
$entry = rar_entry_get($rar_file, 'dir/in/the/archive') or die("Can't find such entry");
$host_os = $entry->getHostOs();
$attr = $entry->getAttr();
switch($host_os) {
case RAR_HOST_MSDOS:
case RAR_HOST_OS2:
case RAR_HOST_WIN32:
case RAR_HOST_MACOS:
printf("%c%c%c%c%c%c\n",
($attr & 0x08) ? 'V' : '.',
($attr & 0x10) ? 'D' : '.',
($attr & 0x01) ? 'R' : '.',
($attr & 0x02) ? 'H' : '.',
($attr & 0x04) ? 'S' : '.',
($attr & 0x20) ? 'A' : '.');
break;
case RAR_HOST_UNIX:
case RAR_HOST_BEOS:
switch ($attr & 0xF000)
{
case 0x4000:
printf("d");
break;
case 0xA000:
printf("l");
break;
default:
printf("-");
break;
}
printf("%c%c%c%c%c%c%c%c%c\n",
($attr & 0x0100) ? 'r' : '-',
($attr & 0x0080) ? 'w' : '-',
($attr & 0x0040) ? (($attr & 0x0800) ? 's':'x'):(($attr & 0x0800) ? 'S':'-'),
($attr & 0x0020) ? 'r' : '-',
($attr & 0x0010) ? 'w' : '-',
($attr & 0x0008) ? (($attr & 0x0400) ? 's':'x'):(($attr & 0x0400) ? 'S':'-'),
($attr & 0x0004) ? 'r' : '-',
($attr & 0x0002) ? 'w' : '-',
($attr & 0x0001) ? 'x' : '-');
break;
}
rar_close($rar_file);
?>
(PECL rar >= 0.1)
RarEntry::getCrc — Get CRC of the entry
Returns an hexadecimal string representation of the CRC of the archive entry.
Diese Funktion hat keine Parameter.
Returns the CRC of the archive entry or FALSE on error.
| Version | Beschreibung |
|---|---|
| 2.0.0 | This method now returns correct values for multiple volume archives. |
(PECL rar >= 0.1)
RarEntry::getFileTime — Get entry last modification time
Gets entry last modification time.
Diese Funktion hat keine Parameter.
Returns entry last modification time as string in format
YYYY-MM-DD HH:II:SS, or FALSE on error.
(PECL rar >= 0.1)
RarEntry::getHostOs — Get entry host OS
Returns the code of the host OS of the archive entry.
Diese Funktion hat keine Parameter.
Returns the code of the host OS, or FALSE on error.
Beispiel #1 RarEntry::getHostOs() example (version >= 2.0.0)
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");
switch ($entry->getHostOs()) {
case RarEntry::HOST_MSDOS:
echo "MS-DOS\n";
break;
case RarEntry::HOST_OS2:
echo "OS2\n";
break;
case RarEntry::HOST_WIN32:
echo "Win32\n";
break;
case RarEntry::HOST_MACOS:
echo "MacOS\n";
break;
case RarEntry::HOST_UNIX:
echo "Unix/Linux\n";
break;
case RarEntry::HOST_BEOS:
echo "BeOS\n";
break;
}
?>
Beispiel #2 RarEntry::getHostOs() example (version <= 1.0.0)
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");
switch ($entry->getHostOs()) {
case RAR_HOST_MSDOS:
echo "MS-DOS\n";
break;
case RAR_HOST_OS2:
echo "OS2\n";
break;
case RAR_HOST_WIN32:
echo "Win32\n";
break;
case RAR_HOST_MACOS:
echo "MacOS\n";
break;
case RAR_HOST_UNIX:
echo "Unix/Linux\n";
break;
case RAR_HOST_BEOS:
echo "BeOS\n";
break;
}
?>
(PECL rar >= 0.1)
RarEntry::getMethod — Get pack method of the entry
RarEntry::getMethod() returns number of the method used when adding current archive entry.
Diese Funktion hat keine Parameter.
Returns the method number or FALSE on error.
Beispiel #1 RarEntry::getMethod() example
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");
echo "Method number: " . $entry->getMethod();
?>
(PECL rar >= 0.1)
RarEntry::getName — Get name of the entry
Returns the name (with path) of the archive entry.
Diese Funktion hat keine Parameter.
Returns the entry name as a string, or FALSE on error.
| Version | Beschreibung |
|---|---|
| 2.0.0 | As of version 2.0.0, the returned string is encoded in Unicode/UTF-8. |
Beispiel #1 RarEntry::getName() example
<?php
//this example is safe even in pages not encoded in UTF-8
//for those encoded in UTF-8, the call to mb_convert_encoding is unnecessary
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");
echo "Entry name: " . mb_convert_encoding(
htmlentities(
$entry->getName(),
ENT_COMPAT,
"UTF-8"
),
"HTML-ENTITIES",
"UTF-8"
);
?>
(PECL rar >= 0.1)
RarEntry::getPackedSize — Get packed size of the entry
Get packed size of the archive entry.
Hinweis:
Note that on platforms with 32-bit longs (that includes Windows x64), the maximum size returned is capped at 2 GiB. Check the constant
PHP_INT_MAX.
Diese Funktion hat keine Parameter.
Returns the packed size, or FALSE on error.
| Version | Beschreibung |
|---|---|
| 2.0.0 | This method now returns correct values of packed sizes bigger than 2 GiB on platforms with 64-bit integers and never returns negative values on other platforms. |
Beispiel #1 RarEntry::getPackedSize() example
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");
echo "Packed size of " . $entry->getName() . " = " . $entry->getPackedSize() . " bytes";
?>
(PECL rar >= 2.0.0)
RarEntry::getStream — Get file handler for entry
$password
] )Returns a file handler that supports read operations. This handler provides on-the-fly decompression for this entry.
The handler is not invalidated by calling rar_close().
The resulting stream has no integrity verification. In particular, file corruption and decryption with a wrong a key will not be detected. It is the programmer's responsability to use the entry's CRC to check for integrity, if he so wishes.
password
The password used to encrypt this entry. If the entry is not encrypted, this value will not be used and can
be omitted. If this parameter is omitted and the entry is encrypted, the password given to
rar_open(), if any, will be used. If a wrong password is given, either explicitly
or implicitly via rar_open(), this method's resulting stream will produce wrong
output. If no password is given and one is required, this method will fail and return FALSE.
You can check whether an entry is encrypted with RarEntry::isEncrypted().
The file handler Im Fehlerfall wird FALSE zurückgegeben..
| Version | Beschreibung |
|---|---|
| 3.0.0 | Support for RAR archives with repeated entry names is no longer defective. |
Beispiel #1 RarEntry::getStream() example
<?php
$rar_file = rar_open('example.rar');
if ($rar_file === false)
die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt');
if ($entry === false)
die("Failed to find such entry");
$stream = $entry->getStream();
if ($stream === false)
die("Failed to obtain stream.");
rar_close($rar_file); //stream is independent from file
while (!feof($stream)) {
$buff = fread($stream, 8192);
if ($buff !== false)
echo $buff;
else
break; //fread error
}
fclose($stream);
?>
(PECL rar >= 0.1)
RarEntry::getUnpackedSize — Get unpacked size of the entry
Get unpacked size of the archive entry.
Hinweis:
Note that on platforms with 32-bit longs (that includes Windows x64), the maximum size returned is capped at 2 GiB. Check the constant
PHP_INT_MAX.
Diese Funktion hat keine Parameter.
Returns the unpacked size, or FALSE on error.
| Version | Beschreibung |
|---|---|
| 2.0.0 | This method now returns correct values of unpacked sizes bigger than 2 GiB on platforms with 64-bit integers and never returns negative values on other platforms. |
Beispiel #1 RarEntry::getUnpackedSize() example
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");
echo "Unpacked size of " . $entry->getName() . " = " . $entry->getPackedSize() . " bytes";
?>
(PECL rar >= 0.1)
RarEntry::getVersion — Get minimum version of RAR program required to unpack the entry
Returns minimum version of RAR program (e.g. WinRAR) required to unpack the entry. It is encoded as 10 * major version + minor version.
Diese Funktion hat keine Parameter.
Returns the version or FALSE on error.
Beispiel #1 RarEntry::getVersion() example
<?php
$rar_file = rar_open('example.rar') or die("Failed to open Rar archive");
$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");
echo "Rar version required for unpacking: " . $entry->getVersion();
?>
(PECL rar >= 2.0.0)
RarEntry::isDirectory — Test whether an entry represents a directory
Tests whether the current entry is a directory.
Diese Funktion hat keine Parameter.
Returns TRUE if this entry is a directory and FALSE otherwise.
This function is only available starting with version 2.0.0, but one can also test whether an entry is a directory by checking the entry attributes, like this (only works for files compressed in RAR for Windows or Unix):
<?php
//...
//Open file, get entry and store in variable $e...
//...
$isDirectory = (bool) ((($e->getHostOs() == RAR_HOST_WIN32) && ($e->getAttr() & 0x10)) ||
(($e->getHostOs() == RAR_HOST_UNIX) && (($e->getAttr() & 0xf000) == 0x4000)));
?>
(PECL rar >= 2.0.0)
RarEntry::isEncrypted — Test whether an entry is encrypted
Tests whether the current entry contents are encrypted.
Hinweis:
The password used may differ between files inside the same RAR archive.
Diese Funktion hat keine Parameter.
Returns TRUE if the current entry is encrypted and FALSE otherwise.
(PECL rar >= 2.0.0)
RarEntry::__toString — Get text representation of entry
RarEntry::__toString() returns a textual representation for this entry. It includes whether the entry is a file or a directory (symbolic links and other special objects will be treated as files), the UTF-8 name of the entry and its CRC. The form and content of this representation may be changed in the future, so they cannot be relied upon.
Diese Funktion hat keine Parameter.
A textual representation for the entry.
(No version information available, might only be in SVN)
This class serves two purposes: it is the type of the exceptions thrown by the RAR extension functions and methods and it allows, through static methods to query and define the error behaviour of the extension, i.e., whether exceptions are thrown or only warnings are emitted.
The following error codes are used:
(PECL rar >= 2.0.0)
RarException::isUsingExceptions — Check whether error handling with exceptions is in use
Checks whether the RAR functions will emit warnings and return error values or whether they will throw exceptions in most of the circumstances (does not include some programmatic errors such as passing the wrong type of arguments).
Diese Funktion hat keine Parameter.
Returns TRUE if exceptions are being used, FALSE otherwise.
Beispiel #1 RarException::isUsingExceptions() example
<?php
//The default is not to use exceptions
var_dump(RarException::isUsingExceptions());
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
bool(false)
(PECL rar >= 2.0.0)
RarException::setUsingExceptions — Activate and deactivate error handling with exceptions
$using_exceptions
)
If and only if the argument is TRUE, then, instead of emitting warnings and returning a special value indicating error when the UnRAR library encounters an error, an exception of type RarException will be thrown.
Exceptions will also be thrown for the following errors, which occur outside the library (their error code will be -1):
using_exceptions
Should be TRUE to activate exception throwing, FALSE to deactivate (the default).
Beispiel #1 RarException::setUsingExceptions() example
<?php
var_dump(RarException::isUsingExceptions());
$arch = RarArchive::open("does_not_exist.rar");
var_dump($arch);
RarException::setUsingExceptions(true);
var_dump(RarException::isUsingExceptions());
$arch = RarArchive::open("does_not_exist.rar");
var_dump($arch); //not reached
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
bool(false)
Warning: RarArchive::open(): Failed to open does_not_exist.rar: ERAR_EOPEN (file open error) in C:\php_rar\trunk\tests\test.php on line 3
bool(false)
bool(true)
Fatal error: Uncaught exception 'RarException' with message 'unRAR internal error: Failed to open does_not_exist.rar: ERAR_EOPEN (file open error)' in C:\php_rar\trunk\tests\test.php:8
Stack trace:
#0 C:\php_rar\trunk\tests\test.php(8): RarArchive::open('does_not_exist....')
#1 {main}
thrown in C:\php_rar\trunk\tests\test.php on line 8
Diese Extension ermöglicht den transparenten Lese- und Schreibzugriff auf ZIP-komprimierte Archive und die darin enthaltenen Dateien.
Die mit PHP 4 ausgelieferte Version der Extension benötigt die » ZZIPlib Bibliothek von Guido Draheim ab Version 0.10.6
Die Extension nutzt nun Funktionalität der » zlib von Jean-loup Gailly und Mark Adler.
Hinweis:
ZIP Unterstützung war bis zum Erscheinen von PHP 4.1.0 nur experimentell.
Da die PHP 4 ZIP Extension nicht mehr gepflegt wird empfiehlt es sich hier die PECL Version der Extension an stelle der gebündelten zu verwenden.
Um diese Funktionen nutzen zu können muss PHP mit Hilfe der Option --with-zip[=DIR] mit ZIP-Unterstützung kompiliert werden. DIR ist dabei das Installationsverzeichnis der » ZZIPlib Bibliothek.
Windows Benutzer müssen php_zip.dll in ihrer php.ini laden um diese Funktionen nutzen zu können.
Un diese Funktionen nutzen zu können müssen sie PHP mit der Option --enable-zip übersetzen.
Windows Benutzer müssen php_zip.dll in ihrer php.ini laden um diese Funktionen nutzen zu können.
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/zip.
Eine DLL-Datei für diese PECL-Erweiterung steht derzeit nicht zur Verfügung. Weitere Details finden Sie im Abschnitt zum Kompilieren für Windows.
Für PHP 4 finden Sie die DLL im extensions/-Verzeichnis der PHP-Windows-Binärdistribution.
Diese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini.
Die Zip Extension benutzt zwei Resourcetypen, einen für Verzeichnisse innerhalb eines Zip-Archivs und einen für die eigentlichen Dateieinträge innerhalb des Archivs.
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.
ZipArchive nutzt Klassenkonstanten. Es gibt drei Arten von Konstanten für Flags (FL_), Fehler (ER_) und Modi (ohne Prefix).
ZIPARCHIVE::CREATE
(integer)
ZIPARCHIVE::OVERWRITE
(integer)
ZIPARCHIVE::EXCL
(integer)
ZIPARCHIVE::CHECKCONS
(integer)
ZIPARCHIVE::FL_NOCASE
(integer)
ZIPARCHIVE::FL_NODIR
(integer)
ZIPARCHIVE::FL_COMPRESSED
(integer)
ZIPARCHIVE::FL_UNCHANGED
(integer)
ZIPARCHIVE::CM_DEFAULT
(integer)
ZIPARCHIVE::CM_STORE
(integer)
ZIPARCHIVE::CM_SHRINK
(integer)
ZIPARCHIVE::CM_REDUCE_1
(integer)
ZIPARCHIVE::CM_REDUCE_2
(integer)
ZIPARCHIVE::CM_REDUCE_3
(integer)
ZIPARCHIVE::CM_REDUCE_4
(integer)
ZIPARCHIVE::CM_IMPLODE
(integer)
ZIPARCHIVE::CM_DEFLATE
(integer)
ZIPARCHIVE::CM_DEFLATE64
(integer)
ZIPARCHIVE::CM_PKWARE_IMPLODE
(integer)
ZIPARCHIVE::CM_BZIP2
(integer)
ZIPARCHIVE::ER_OK
(integer)
ZIPARCHIVE::ER_MULTIDISK
(integer)
ZIPARCHIVE::ER_RENAME
(integer)
ZIPARCHIVE::ER_CLOSE
(integer)
ZIPARCHIVE::ER_SEEK
(integer)
ZIPARCHIVE::ER_READ
(integer)
ZIPARCHIVE::ER_WRITE
(integer)
ZIPARCHIVE::ER_CRC
(integer)
ZIPARCHIVE::ER_ZIPCLOSED
(integer)
ZIPARCHIVE::ER_NOENT
(integer)
ZIPARCHIVE::ER_EXISTS
(integer)
ZIPARCHIVE::ER_OPEN
(integer)
ZIPARCHIVE::ER_TMPOPEN
(integer)
ZIPARCHIVE::ER_ZLIB
(integer)
ZIPARCHIVE::ER_MEMORY
(integer)
ZIPARCHIVE::ER_CHANGED
(string)
ZIPARCHIVE::ER_COMPNOTSUPP
(integer)
ZIPARCHIVE::ER_EOF
(integer)
ZIPARCHIVE::ER_INVAL
(integer)
ZIPARCHIVE::ER_NOZIP
(integer)
ZIPARCHIVE::ER_INTERNAL
(integer)
ZIPARCHIVE::ER_INCONS
(integer)
ZIPARCHIVE::ER_REMOVE
(integer)
ZIPARCHIVE::ER_DELETED
(integer)
Beispiel #1 Erstellen eines Zip-Archivs
<?php
$zip = new ZipArchive();
$filename = "./test112.zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$zip->addFromString("testfilephp.txt" . time(), "#1 This is a test string added as testfilephp.txt.\n");
$zip->addFromString("testfilephp2.txt" . time(), "#2 This is a test string added as testfilephp2.txt.\n");
$zip->addFile($thisdir . "/too.php","/testfromfile.php");
echo "numfiles: " . $zip->numFiles . "\n";
echo "status:" . $zip->status . "\n";
$zip->close();
?>
Beispiel #2 Ausgabe eines detailierten Archivlistings
<?php
$za = new ZipArchive();
$za->open('test_with_comment.zip');
print_r($za);
var_dump($za);
echo "numFiles: " . $za->numFiles . "\n";
echo "status: " . $za->status . "\n";
echo "statusSys: " . $za->statusSys . "\n";
echo "filename: " . $za->filename . "\n";
echo "comment: " . $za->comment . "\n";
for ($i=0; $i<$za->numFiles;$i++) {
echo "index: $i\n";
print_r($za->statIndex($i));
}
echo "numFile:" . $za->numFiles . "\n";
?>
Beispiel #3 Zip Stream Wrapper, Auslesen von OpenOffice Metainformationen
<?php
$reader = new XMLReader();
$reader->open('zip://' . dirname(__FILE__) . '/test.odt#meta.xml');
$odt_meta = array();
while ($reader->read()) {
if ($reader->nodeType == XMLREADER::ELEMENT) {
$elm = $reader->name;
} else {
if ($reader->nodeType == XMLREADER::END_ELEMENT && $reader->name == 'office:meta') {
break;
}
if (!trim($reader->value)) {
continue;
}
$odt_meta[$elm] = $reader->value;
}
}
print_r($odt_meta);
?>
Das folgende Beispiel benutzt das alte PHP 4 API, es öffnet eine Zip-Datei, liest jede einzelne Datei im Archiv und gibt deren Inhalt aus. Die in diesem Beispiel genutzte test2.zip Datei ist Teil des Testarchivs des ZZIPlib Quellcodes.
Beispiel #4 Zip Beispiel
<?php
$zip = zip_open("/tmp/test2.zip");
if ($zip) {
while ($zip_entry = zip_read($zip)) {
echo "Name: " . zip_entry_name($zip_entry) . "\n";
echo "Actual Filesize: " . zip_entry_filesize($zip_entry) . "\n";
echo "Compressed Size: " . zip_entry_compressedsize($zip_entry) . "\n";
echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "\n";
if (zip_entry_open($zip, $zip_entry, "r")) {
echo "File Contents:\n";
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo "$buf\n";
zip_entry_close($zip_entry);
}
echo "\n";
}
zip_close($zip);
}
?>
(No version information available, might only be in SVN)
Ein Dateiarchiv, komprimiert mit Zip.
$filename
[, string $localname = NULL
[, int $start = 0
[, int $length = 0
]]] )Status des Zip-Archives
System Status des Zip-Archives
Anzahl Dateien im Archiv
Dateiname im Dateisystem
Kommentar für das Archiv
(PHP 5 >= 5.2.0, PECL zip >= 1.8.0)
ZipArchive::addEmptyDir — Fügt ein neues Verzeichnis hinzu
$dirname
)Fügt dem Archiv ein neues Verzeichnis hinzu.
dirname
Das hinzuzufügende Verzeichnis.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Erstellt ein neues Verzeichnis im Archiv
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
if($zip->addEmptyDir('newDirectory')) {
echo 'Neues Rootverzeichnis erstellt.';
} else {
echo 'Konnte Verzeichnis nicht erstellen.';
}
$zip->close();
} else {
echo 'Fehler';
}
?>
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
ZipArchive::addFile — Fügt eine Datei von einem gegebenen Pfad zu einem ZIP-Archiv hinzu
$filename
[, string $localname = NULL
[, int $start = 0
[, int $length = 0
]]] )Fügt eine Datei von einem gegebenen Pfad zu einem ZIP-Archiv hinzu.
filename
Der Pfad zur hinzuzufügenden Datei.
localname
Falls übergeben, ist dies der lokale Name innerhalb des
ZIP-Archives, der den filename
überschreibt.
start
Dieser Parameter wird nicht genutzt, aber benötigt, um ZipArchive zu erweitern.
length
Dieser Parameter wird nicht genutzt, aber benötigt, um ZipArchive zu erweitern.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Dieses Beispiel öffnet ein ZIP-Dateiarchiv test.zip und fügt die Datei /pfad/zur/datei.txt als neuername.txt hinzu.
Beispiel #1 Öffnen und extrahieren
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->addFile('/pfad/zur/datei.txt', 'neuername.txt');
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
Hinweis:
Falls eine Datei zu einem Archiv hinzugefügt werden soll, wird PHP versuchen, die Datei zu sperren; die Sperre wird erst gelöst, nachdem die ZIP Operation beendet ist. Kurz gesagt bedeutet dies, dass eine hinzugefügte Datei erst gelöscht werden kann, nachdem das Archiv geschlossen(close()) wurde.
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
ZipArchive::addFromString — Fügt eine Datei unter Verwendung ihres Inhalts zu einem ZIP-Archiv hinzu
$localname
, string $contents
)Fügt eine Datei unter Verwendung ihres Inhalts zu einem ZIP-Archiv hinzu.
localname
Der Name des anzulegenden Eintrags.
contents
Der Inhalt, der zum Erstellen des Eintrags verwendet werden soll. Dieser wird im Binary safe-Modus verwendet.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Einen Eintrag zu einem neuen Archiv hinzufügen
<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'Dateiinhalt kommt hier');
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
Beispiel #2 Eine Datei zu einem Verzeichnis innerhalb eines Archivs hinzufügen
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->addFromString('dir/test.txt', 'file content goes here');
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
ZipArchive::close — Schließt das aktive Archiv (geöffnet oder neu erstellt)
Schließt das geöffnete oder neu erstellte Archiv und speichert die Änderungen. Diese Methode wird am Ende des Skripts automatisch aufgerufen.
Diese Funktion hat keine Parameter.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
(PHP 5 >= 5.2.0, PECL zip >= 1.5.0)
ZipArchive::deleteIndex — Löscht einen Archiveintrag unter Verwendung seines Index
$index
)Löscht einen Archiveintrag unter Verwendung seines Index.
index
Index des zu löschenden Eintrags.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Löschen einer Datei aus dem Archiv unter Verwendung ihres Index
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->deleteIndex(2);
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
(PHP 5 >= 5.2.0, PECL zip >= 1.5.0)
ZipArchive::deleteName — Löscht einen Archiveintrag unter Verwendung seines Namens
$name
)Löscht einen Archiveintrag unter Verwendung seines Namens.
name
Name des zu löschenden Eintrags.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Eine Datei und ein Verzeichnis unter Verwendung ihrer Namen aus einem Archiv löschen
<?php
$zip = new ZipArchive;
if ($zip->open('test1.zip') === TRUE) {
$zip->deleteName('testfromfile.php');
$zip->deleteName('testDir/');
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
ZipArchive::extractTo — Extrahiert den Archivinhalt
Extrahiert das komplette Archiv oder die gegebenen Dateien in das angegebene Ziel.
destination
Stelle, an die die Dateien extrahiert werden sollen.
entries
Die zu extrahierenden Einträge. Es wird entweder ein einzelner Eintragsname oder ein Array von Namen akzeptiert.
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiel #1 Alle Einträge extrahieren
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->extractTo('/mein/ziel/verzeichnis/');
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
Beispiel #2 Zwei Einträge extrahieren
<?php
$zip = new ZipArchive;
$res = $zip->open('test_im.zip');
if ($res === TRUE) {
$zip->extractTo('/mein/ziel/verzeichnis/', array('pear_item.gif', 'testfromfile.php'));
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
ZipArchive::getArchiveComment — Gibt den ZIP-Archiv-Kommentar zurück
$flags
] )Gibt den ZIP-Archiv-Kommentar zurück.