html/0040755000101200010120000000000011272550147013022 5ustar docbuilderdocbuilderhtml/copyright.html0100644000101200010120000000410511272547374015725 0ustar docbuilderdocbuilder Copyright
PHP-Handbuch
PHP Manual

Copyright

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

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


PHP-Handbuch
PHP Manual
html/preface.html0100644000101200010120000001455411272547374015333 0ustar docbuilderdocbuilder Vorwort
PHP-Handbuch
PHP Manual

Vorwort

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

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

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

Autoren und Mitwirkende

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

Autoren und Editoren

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

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

User Note-Betreuer

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

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


PHP-Handbuch
PHP Manual
html/manual.html0100644000101200010120000000223511272547374015174 0ustar docbuilderdocbuilder PHP-Handbuch
PHP-Handbuch
PHP Manual

PHP-Handbuch


PHP-Handbuch
PHP Manual
html/intro-whatis.html0100644000101200010120000001120111272547374016340 0ustar docbuilderdocbuilder Was ist PHP?
Introduction
PHP Manual

Was ist PHP?

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

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

Beispiel #1 Ein einführendes Beispiel

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

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

    </body>
</html>

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

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

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

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


Introduction
PHP Manual
html/intro-whatcando.html0100644000101200010120000002244511272547375017026 0ustar docbuilderdocbuilder Was kann PHP?
Introduction
PHP Manual

Was kann PHP?

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

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

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.

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.


Introduction
PHP Manual
html/introduction.html0100644000101200010120000000250011272547375016434 0ustar docbuilderdocbuilder Introduction
Einführung
PHP Manual

Introduction

Inhaltsverzeichnis


Einführung
PHP Manual
html/tutorial.requirements.html0100644000101200010120000001023211272547375020301 0ustar docbuilderdocbuilder Was brauche ich?
Kleines Tutorial
PHP Manual

Was brauche ich?

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

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

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


Kleines Tutorial
PHP Manual
html/tutorial.firstpage.html0100644000101200010120000002245711272547375017556 0ustar docbuilderdocbuilder Ihre erste PHP-erweiterte Seite
Kleines Tutorial
PHP Manual

Ihre erste PHP-erweiterte Seite

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

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

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

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

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

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

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

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

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

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

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

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

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

Beispiel #2 Hole Systeminformationen mit PHP

<?php phpinfo(); ?>


Kleines Tutorial
PHP Manual
html/tutorial.useful.html0100644000101200010120000002631211272547375017067 0ustar docbuilderdocbuilder Nützliches
Kleines Tutorial
PHP Manual

Nützliches

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

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

Um die Variable auszugeben, schreiben Sie einfach:

Beispiel #1 Variable ausgeben (Array-Element)

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

Die Ausgabe dieses Beispiel könnte so aussehen:


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

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

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

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

Beispiel #2 Beispiel, das Kontrollstrukturen und Funktionen benutzt

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

Die Ausgabe dieses Skripts könnte so aussehen:

Sie benutzen Microsofts Internet Explorer.<br />

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

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

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

Beispiel #3 HTML- und PHP-Modus vermischt

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

Die Ausgabe dieses Skripts könnte so aussehen:

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

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


Kleines Tutorial
PHP Manual
html/tutorial.forms.html0100644000101200010120000001635211272547375016715 0ustar docbuilderdocbuilder Formulare verarbeiten
Kleines Tutorial
PHP Manual

Formulare verarbeiten

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

Beispiel #1 Ein einfaches HTML-Formular

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

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

Beispiel #2 Daten des Formulars ausgeben

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

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

Die Ausgabe des Skripts könnte dann so aussehen:

Hallo Joe.
Sie sind 22 Jahre alt.

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

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


Kleines Tutorial
PHP Manual
html/tutorial.oldcode.html0100644000101200010120000001154511272547375017177 0ustar docbuilderdocbuilder Alten Code mit neuen PHP-Versionen benutzen
Kleines Tutorial
PHP Manual

Alten Code mit neuen PHP-Versionen benutzen

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

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

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


Kleines Tutorial
PHP Manual
html/tutorial.whatsnext.html0100644000101200010120000000362411272547375017612 0ustar docbuilderdocbuilder Und weiter?
Kleines Tutorial
PHP Manual

Und weiter?

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

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


Kleines Tutorial
PHP Manual
html/tutorial.html0100644000101200010120000000431011272547375015557 0ustar docbuilderdocbuilder Kleines Tutorial
Einführung
PHP Manual

Kleines Tutorial

Inhaltsverzeichnis

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.


Einführung
PHP Manual
html/getting-started.html0100644000101200010120000000356111272547375017030 0ustar docbuilderdocbuilder Einführung
PHP-Handbuch
PHP Manual

Einführung


PHP-Handbuch
PHP Manual
html/install.general.html0100644000101200010120000001174211272547375017005 0ustar docbuilderdocbuilder Generelle Überlegungen
Installation und Konfiguration
PHP Manual

Generelle Überlegungen

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

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

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

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

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

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

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


Installation und Konfiguration
PHP Manual
html/install.unix.apache.html0100644000101200010120000003273111272547375017574 0ustar docbuilderdocbuilder Apache 1.3.x auf Unix-Systemen
Installation auf Unix-Systemen
PHP Manual

Apache 1.3.x auf Unix-Systemen

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

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

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

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

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

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

11. make
12. make install

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

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

13. Ihre php.ini Datei einrichten:

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

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

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

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

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

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

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

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

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

Alternativ, um PHP als statisches Objekt zu installieren:

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

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

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

10. cd ../apache_1.3.x

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

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

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

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

    AddType application/x-httpd-php .php

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

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

Beispiel #3 Beispielbefehle, um Apache neu zu starten

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

User nobody
Group "#-1"

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

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.apache2.html0100644000101200010120000002554011272547375017656 0ustar docbuilderdocbuilder Apache 2.0 auf Unixsystemen
Installation auf Unix-Systemen
PHP Manual

Apache 2.0 auf Unixsystemen

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

Warnung

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

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

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

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

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

Beispiel #1 Installationsanweisungen (Apache 2 Shared Module Version)

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

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

9.  cd ../php-NN

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

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

11. make
12. make install

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

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

13. Ihre php.ini einrichten

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

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

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

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

    Für PHP 4:

      LoadModule php4_module modules/libphp4.so

    Für PHP 5:

      LoadModule php5_module modules/libphp5.so

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

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

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

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

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

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

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

      /usr/local/apache2/bin/apachectl start

          - ODER -

      service httpd restart

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

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

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.lighttpd-14.html0100644000101200010120000001342611272547375020414 0ustar docbuilderdocbuilder Lighttpd 1.4 on Unix systems
Installation auf Unix-Systemen
PHP Manual

Lighttpd 1.4 on Unix systems

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

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

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

Letting Lighttpd spawn php processes

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

Beispiel #1 Partial lighttpd.conf

server.modules += ( "mod_fastcgi" )

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

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

Spawning with spawn-fcgi

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

Spawning php-cgi

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

Beispiel #2 Spawning FastCGI Responders

#!/bin/sh

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

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

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

PHP_FCGI_CHILDREN=16
PHP_FCGI_MAX_REQUESTS=10000

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

echo $! > "$PHP_PID"

Connecting to remote FCGI instances

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

Beispiel #3 Connecting to remote php-fastcgi instances

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

Installation auf Unix-Systemen
PHP Manual
html/install.unix.caudium.html0100644000101200010120000000637511272547375020007 0ustar docbuilderdocbuilder Caudium
Installation auf Unix-Systemen
PHP Manual

Caudium

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

Beispiel #1 Caudium Installation Instructions

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

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

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.fhttpd.html0100644000101200010120000000425411272547375017643 0ustar docbuilderdocbuilder fhttpd related notes
Installation auf Unix-Systemen
PHP Manual

fhttpd related notes

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

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.sun.html0100644000101200010120000004075511272547375017165 0ustar docbuilderdocbuilder Sun, iPlanet and Netscape servers on Sun Solaris
Installation auf Unix-Systemen
PHP Manual

Sun, iPlanet and Netscape servers on Sun Solaris

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

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

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

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

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

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

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

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

  7. Run make followed by make install.

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

Configuration Instructions for Sun/iPlanet/Netscape

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

CGI environment and recommended modifications in php.ini

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

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

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

variables_order = "GPCS"
register_globals = On

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

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

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

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

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

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

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

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

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

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.commandline.html0100644000101200010120000001042411272547375020634 0ustar docbuilderdocbuilder CGI and command line setups
Installation auf Unix-Systemen
PHP Manual

CGI and command line setups

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

Warnung

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

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

Testing

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

Using Variables

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.hpux.html0100644000101200010120000000415011272547375017331 0ustar docbuilderdocbuilder HP-UX specific installation notes
Installation auf Unix-Systemen
PHP Manual

HP-UX specific installation notes

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

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

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

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.openbsd.html0100644000101200010120000001434011272547375020001 0ustar docbuilderdocbuilder OpenBSD installation notes
Installation auf Unix-Systemen
PHP Manual

OpenBSD installation notes

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

Using Binary Packages

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

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

Beispiel #1 OpenBSD Package Install Example

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

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

Using Ports

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

Common Problems

Older Releases

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.solaris.html0100644000101200010120000000663411272547375020032 0ustar docbuilderdocbuilder Solaris specific installation tips
Installation auf Unix-Systemen
PHP Manual

Solaris specific installation tips

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

Required software

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

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

Using Packages

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


Installation auf Unix-Systemen
PHP Manual
html/install.unix.debian.html0100644000101200010120000002233211272547375017571 0ustar docbuilderdocbuilder Debian GNU/Linux Installationshinweise
Installation auf Unix-Systemen
PHP Manual

Debian GNU/Linux Installationshinweise

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

APT verwenden

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

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

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

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

Beispiel #1 Die beiden Dotdeb Zeilen

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

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

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

Beispiel #2 Debian Installationsbeispiel mit Apach 1.3.x

# apt-get install libapache-mod-php4

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

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

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

Bessere Kontrolle über die Konfiguration

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

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

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

# dpkg -l 'php4-*'

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

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

Beispiel #5 PHP mit MySQL, cURL und GD installieren

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

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

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

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

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

Üblcihe Probleme


Installation auf Unix-Systemen
PHP Manual
html/install.unix.html0100644000101200010120000001356411272547375016357 0ustar docbuilderdocbuilder Installation auf Unix-Systemen
Installation und Konfiguration
PHP Manual

Installation auf Unix-Systemen

Inhaltsverzeichnis

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

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

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

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

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.


Installation und Konfiguration
PHP Manual
html/install.macosx.packages.html0100644000101200010120000000525311272547375020437 0ustar docbuilderdocbuilder Verwendung von Paketen
Installation unter Mac OS X
PHP Manual

Verwendung von Paketen

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

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


Installation unter Mac OS X
PHP Manual
html/install.macosx.bundled.html0100644000101200010120000002265411272547375020302 0ustar docbuilderdocbuilder Das enthaltene PHP verwenden
Installation unter Mac OS X
PHP Manual

Das enthaltene PHP verwenden

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

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

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

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

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

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

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

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

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

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

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

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

    <?php phpinfo(); ?>

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

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


Installation unter Mac OS X
PHP Manual
html/install.macosx.server.html0100644000101200010120000001310411272547375020161 0ustar docbuilderdocbuilder Kompilieren für OS X Server
Installation unter Mac OS X
PHP Manual

Kompilieren für OS X Server

Mac OS X Server Installation

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

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

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

    setenv OPTIM=-O2

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

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

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

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

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

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

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


Installation unter Mac OS X
PHP Manual
html/install.macosx.client.html0100644000101200010120000001006611272547375020135 0ustar docbuilderdocbuilder Kompilieren unter MacOS X Client
Installation unter Mac OS X
PHP Manual

Kompilieren unter MacOS X Client

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

Warnung

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

Installieren Sie wie folgt:

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

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

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

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

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


Installation unter Mac OS X
PHP Manual
html/install.macosx.html0100644000101200010120000000370711272547375016664 0ustar docbuilderdocbuilder Installation unter Mac OS X
Installation und Konfiguration
PHP Manual

Installation unter Mac OS X

Inhaltsverzeichnis

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


Installation und Konfiguration
PHP Manual
html/install.windows.installer.html0100644000101200010120000000736411272547375021063 0ustar docbuilderdocbuilder Windows Installer (PHP 5.1.0 and earlier)
Installation on Windows systems
PHP Manual

Windows Installer (PHP 5.1.0 and earlier)

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

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

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

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

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

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

Warnung

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


Installation on Windows systems
PHP Manual
html/install.windows.installer.msi.html0100644000101200010120000001561611272547375021651 0ustar docbuilderdocbuilder Windows Installer (PHP 5.2 and later)
Installation on Windows systems
PHP Manual

Windows Installer (PHP 5.2 and later)

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

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

Normal Install

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

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

Warnung

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

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

Silent Install

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

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

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

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

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

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

The current list of Features to install is as follows:

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

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

Upgrading PHP with the Install

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


Installation on Windows systems
PHP Manual
html/install.windows.manual.html0100644000101200010120000003356211272547375020342 0ustar docbuilderdocbuilder Manual Installation Steps
Installation on Windows systems
PHP Manual

Manual Installation Steps

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

Selecting and downloading the PHP distribution package

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

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

The PHP package structure and content

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

Beispiel #1 PHP 5 package structure


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

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

Changing the php.ini file

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

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

Required directives:

Optional directives

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.


Installation on Windows systems
PHP Manual
html/install.windows.activescript.html0100644000101200010120000001022311272547375021552 0ustar docbuilderdocbuilder ActiveScript
Installation on Windows systems
PHP Manual

ActiveScript

This section contains notes specific to the ActiveScript installation.

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

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

Hinweis: You should read the manual installation steps first!

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

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

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

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

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

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

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


Installation on Windows systems
PHP Manual
html/install.windows.iis.html0100644000101200010120000000345011272547375017642 0ustar docbuilderdocbuilder Microsoft IIS
Installation on Windows systems
PHP Manual

Microsoft IIS

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


Installation on Windows systems
PHP Manual
html/images/0040755000101200010120000000000011272550127014265 5ustar docbuilderdocbuilderhtml/images/b4cf2bb34e3c20eebcf8f9e8e7949efd-iis6anonauth.png0100644000101200010120000006246111272547375024464 0ustar docbuilderdocbuilderPNG  IHDR&/ܳsRGBgAMA a cHRMz&u0`:pQ<dIDATx^=]7{ _88Bgvfg# m"8{er&gLN`*TnrYÏCp!>,$? l@(@D^Z75MpbP 4W=ٽ&z]#v ń)(@PvR|5FP @(> KؗO/w~'/?LvP @(`WN}z/W|ՏvqY>縣P lKZ{o[yRV+ Ww?ݿ/wO/}=95--* Pz]Vk7`4{T֗ZI`ۿ=~gO޿{ݟowo޽}﷯_ǘs} vJé6%ၭ|,Szưi[@!^_sӓϟxۻo_w_z/\acC]12c lHuU&Nw|.:#D; źiqC]"H֢UdE3b`oR\_|vu{\Kxqx_]_};$v / l -{=˵ILZxSEE-Ӂ6nQ @(Uw go/zv'?-|O//hrI/SQ;z],*I?֥$sY(CҠ(訏U$ۦ0 U]`urFE}3JnzG C(1Cخă׏_:N_~y`?z|ed0JRF7ݠ$`g}:R!c"L,D'w~>+>.'uZRz`3'PL}<۟xO lcdѶ qR)Jl9P @|t0to.I+`-9BSLZ P^*`g?]_w~zɯ<|Ϙ8m[nCi`*ySi:i#z^)` Ue)%G!>ӗ.~½EPFl(l$rJ{f!~%i"E.ˈP+2UGl3V !vGyG;žKZ !SDnü5c¨(vV {{x4{z`GSd 5Yt*Ͷ%d F wh D3lSOtf|) m:~褬T6{fր{>׿_\立O>ǩs˞^P 4QWw?ݿ/wO/}=}˵`/7d*P=|w߿߿yͻo?ܣ,ҹwU\0uus0N@H_'?wg_w_zyME8EVG-~jNN' u2Z؁P 7]]|׿=^<<}W~W>;c[pځoP7ќ {?reӑ~K0*^|O>xy[l;`?ǟ^^|fvH~b,MktځP.dӱx2S?_}Ko?<W`K̔<\)`VvB(N ^o-|Ta;`6[dسP`xZȰ'O_R;,t7͟acTS !";s젣F1Ͽ{|GOG;}ӻ)0Vn^gUqf}:|+`g5G( l_߸Ǔ?>~OUlRlffC$^e7ζlZ`l)-0 rC+{*i00*W_ؾCKW ͓aG7.$VslgSJ >j=VJ(0tǶz&N@(p0?_?׿;l~WO~ͤ4̤SӓNM%KSx&MIwv!_dW(eaZYh+8lr$}[zg/dlth-G<57䴑n`2ѝet1;ɳ"f{/}RvQ XN^vKwg`eḱ=Q"t]S KH) ۲`(5dn45jZn$Vl*άxi7;O89S1`3ZoʰYK`Gh^"zhQ.G-˳L~T9m}-OeW<ճs H/W.qIk=2Z٬̧݃2lSqkƬSv/ T<m}lhL8/?sc6w'rgRUI"k)T Xnt<{ݭQkmv 7X]l<$Tl{[T4Le}\l:i, X-]yuP6vl y`Lo4x zqأl\Тyޢn@vP 0\[]Ǝm!.4 F`C^x{jǨg| tk>څ v@`˓C2lc(:#r5gתmI(VϓX3Fۭ2싋GGȰ+#ޔ-XW2͂*Q=2.M"x Sʁ*ѲKafܻ$5N9GU#obW7?ߺl\9'g=?أ2l*~ہivx+vY ȺR8_1U1.W$ )`3;Z`YSOt 9`:xe%n̑ ] DgL@(lR4 l}֣Gw0k #6`{"CڝgQ`{ !'2)BH+Kˆ u! ۑhaOTP#rWPcJm~?/Ȱ` -4 h~uaf6ێH}(p`t#rݪ'C( >0%,gVl۔;>g8%> 0MvʑLì"|긱GZ-B(0]遳(ڵ_2lgO]2lyl(FgA2 ūˆb**c˵;*eLz?Z붭f~c=[1;d' e;('~nD(DhȢmܬr( -FW7S&tˀ߻v ;yh)#s:_l0|٦ ;L9z細(1=GvӁm1xNJؖ1IvNև6wfmf/; #c{H=ibQF꜃^X*=HH_5Z>1oꅏG6R(\"E(R,K]YPW(XR|EP`.h;4>|<Tܫז-[kZx+G1vlY2ZK6#$>-l[+{Tly%ؕh-|7`Gr+> )1BY6ar('eېVNia= wD*{alCғB EƲvQ`3m-KrkfҚyTͮgSt**{6=}X`Hx4.1;(` ;C-Qpn$}*JUߔV YK>{բUq;sPm}V2F[.P* ;Ml|4te[Qkl,¿g+4+%%\F+HG12;`EZEB*g>)+9r=2oS[h(CtcDgBtRUje&xRHl^N+`@)BȦM3+9Jά 3*!^e `aؔaAc/kG.aܸu.I(*`c]`ܵEķNC9h&`rOr<NE؋܆{*]c޽{G=y=.?zqu淕}Ӷ`O;4p ̣@c`;Z?~ fGY =* 4_yN{f{l;`MlO @c`Lڥ7v_^| hÎ >Z]B(72W(W"^mH(wteN` }nB3߷lv7?w%ܩw)k6em7v6I}}zX(bGkԛ.>)zl SLRvHswڽ=4~/_/CKRՃ3J3>=W-3Awn(2r{piJ篸[j-o> oi4}+a6(|6[7a  ģ[0T+/ }2`J} 1 "+JѬ{(_͖CUxMm 4QKøe+.– o.w:$ [.ˀ-4Iv`Gtg~ ٿ)٫d4"r%wAcuel vHY3S}-fD `]E,lR҈"[' lY^B `w yȰУV ln|?`OfC=5lʘp*k+[,dAHƃ=æK4SE î y6]3&ԡ8G<ܿLNԑu/H'8@`g=ĕg{7{fnoHܔAcuˑxTR(&hJ`r4  n*&dIԦ/yݑaӥv #vu kͤ&޶@B)JxQ2UY+zE"J)5L"2 OUl@װp [n(22mAh0Dw 94Z{i!0 ;fߔBG]{Nj2k 90-Ye9;۴cHm5- aPIf 5SwݽAڳ9keM#{#>=bG2,&i(g*sMSF23d|zkZ,fȔft~I+H8`Oܖˤl?=n2a)G8Cbe> v4EDÁ+ Bڑ;<K/(; nNF ly =?4Z^gѩ8%6s&jg޲!_]Y(~6Ii,*r-HgW``g03l᧵&M#]hlf,2,BnZdXSvM"dt] OEJb`v k2'ܺf{oH`Gw@nWޓßdIDb`gZ{nvri_7I] SNs1No7v2l /)epE> bU;M6 Mp?`/c8$K>< o6Ei4fԧHV2rG=d1Lh`Oد}\h/{yذف>x$~GaSJ2BMK*}Y-S'_2KWR6Qu?~ϗL-xC}-Y>HK{+MOS'#PQRӿ$;-ލtoGM@c+0%R{oZ߽/%^: l<>/-wCN~s؇µl7xr`~g*= .=M%)ذQS|5Vhll%.1IS .XFAj[9+ͰV2.VoJ8~ޗ_%+g .rvKyFw_e ;q0e6'P;%kH9 x2QlKHve-`/ cN}["鵻׎ ag9e <6'VrpH.[׮zxxq8W(Y?|x{6a^ U@oژh76R<Ɗ=,W؛T';v~'ZH 74L (BMZ #i:NjnT67)ŚPh]{%`?{M>-<3CǧjPK6ɰx)Ё9k2lvӯ&Mkz Nlz+BvPm^ a7˕XH<̘囄k 5`¯س;!æN=]6喿O}wGû|Xk4,ۚQwOcOF5=4`vC`X3~ `G"{O21$릦Px8,mcMgۀ]{Y`,yrh=F|ݙMh˜c%,\>kPak ׀dy-SgIwv$.3VfvB lv"oyMa-qNK}ɁmO.2|%u?ZK(0/% G&`^5Qf+fxu'GC8+~[]ԫ `a0 9@VC;77ցM-o:Ft=(JN}[?=ԝq$~em %i؛79PY>ڣ1 *0;Sa16dvB!Q(8TkUGւ-IXGR`v`g37U/?}_O??S*X82#AXE(vPa;N;<_lIf728 W`v`oJiNlilG~?v}̳\  +0;ސ!vg7~?>=.d>l$lU7h6&ʞOo8*;`1??LWFEG`728 W`v`oʰS`^`y{Zߥq@PyO`+4ʦEr?E(vPlkJ;ja}߼-ַWs^nylao٠T ;D:4X)vYu{Lf4S6}ɑ♻#3>  C7G_|3+_|[m3`G_.Z)0;e ?0;d{ٗ_|Ͱe"ʿVy];cϡn  3>{$̾ͧoŗyb|ә~$`6k^n0_ف]aӊ)XڧwOH.:Z!>nu2l-س*0;fةOD`)}_ʟo|w垸dQKuH؛:da2.CJNA(`>ֵ)Z؝;`Ǜ7|=p.Zib؛:da2.CJNA(`À).W|o>o8Zy' \ q.}8 Ec Te.{80o Q-l˔BP Mف5DN݄C}U' `c@(U`v`027W2MU)`g ge T*0;-{Kp_끻2 #v >Fu^@ ɳ>'p9~Js=l+&_4+ϴW5fP DI4 Q}r { ~Z ڲ<3}۳N=^k;WWr(euo$]B̍k<6 ҶVOXT`y`o(3z6jߞIQ^ ^aд ^m}0es.3rv[}4"%Ir<)g=Dw*P[CWt U`^`!}e{_aKftP/6u# ~a+Yy] X1ІdwG.NʁhQ4.5XT`^`$5zQ0 bN`Gؔd2vIY1`Ѧ)Ysll؇ h!}pᠮ[ɛ%rnv7`m ~Beس$ ?i>DP;S%whdXkkP L1]/K)ΰݏy|E]⩛pgEdHdV-_bWd}T`b%/jȔ7l=I@P`f&v6"LkGk=6æPKv$/fR:òv|"%lE?xg왣$|(0#72ڝ~;B_tM/'jpCQP  ~z Hmg(`aG(P?'n"]9Ql{W+v}Y["Nn >q+{aY~'W m^3N30 RP T*`7ofƣv'aa P;*`0P6WfBf BlA쎸Zh%tr$,B*`vGFUt tR;Ӭ],`U(06 `wT<=(6W N؝Y(pBl/t~aˣ_OOt `ۣAT~ \+ж#}-2P X`STi:lHZ-Ae(S?Қ4nA1+lbQ*bhKvUw%a&ԂP@*`!N!9[l]myRу}ZmSeƇli ],@zenuhEt{YӖE"'V`Nv'JZlDRGriqH^kv@k|Ȟح`Oɮ,F8ّNpC -Sa**}4>2}5BQ`lwXB,v\ea:r6q`T ϶RQz`P,NQFi} !l6FVvʰ!hOC=팟ӱ&vvJ]12:ȚflbsYS6W-%fۛ L`L+oؖ6Awo94aziٔ~P`-^$6]uv6fKfkx @IN B',B3+`"Zu*nLzRj_W]+P`Zl#X{4lfYuvjl#MP+޲rsQyXވ 7Vi`ø\ 7p @?~Kf+͒o]``<M)5fp&.8v/aoy=2lF,Vu3??Y``$࢛PF^6Y voP&ll.p3}-5Q uI{hw!`+4J @9}nBl#X{[͡~6;sV:;v%W$i~̎i|S')S7B7 gƺdRlkﶖD ;u EbE&V>_bd`m_inDqBM{X>*'%Yg6![F/6adz.F*69}D 6v}[̙bvYv9Qcb5B̥kMKv/.lIkoz'hakE-CbUL[u~G(}ݰx@f!+^݌V;b҆ث^䔅crSݱ7f0wgJhCLp}ʥBjVqi9F6WM[aY쓉`J*ˌF`*?i跔OAދ{FVioH(EDK2ŘU9Cbs[Sl#  `"N1.vv4l"{6T M>@m頒P/$3Z`!ַ^H`gqn$e:1Sc|KU:Ţ6S /WjJ7XJ`Ul`SfSq'Gv_gYMO4Ҡc4,f%$( P^B,;͒R+vY}/38|Q<уOFn.l?#ݿkFqɮbbv4&Fc ,*)7sޜnQ yBt+, 525VFg}Еݒ&2zVYX tNJ2̲ PՒFRVN%^J79SWR fYq*ciPt;:1G:S&\3^h,F3)]Ѧ!m}] 'T 4y<ߧgy̭`}&o P*EM ,AM=^vn+مtF} ̭`WcT1]vxh,(O(P]* v >FՁbǘ*`Wᶾ2g(:b[[Gy(v=s,؋nv3ON)e%};Aԇn2om;L*`Wᶾ2=vLz+`3‚ez1 ԕv,=^ In@V ̭`KilLo/Tb֍0 [&<^ 3oRm}e{|=j&QuYf|Y. K*`3e&\-d /b~ǚҁ]sKγ31(p *W*{$f',*Ijxb*WՍ, ljgL3&)S!4;-3E, ~eT@)[UVK?W=E+ȧ;2c֩O7ɍmKޜJe݂`YWm}eKTLrAR;TRi\ -Tb4ɺPTb5%lJaϰٽ\gzt=22lO/ ZFrq+xU|U{aBfNh,&e> G=nY/s:`'\xׇvEnJɔ([Vl#7xUVNNNU޶l686=W\Z:`o 9l{/Μ.'i.!8e*zޮaky_Eܿ*ţsEDQ`WΝ6=^{` M1 ̖Ŀdzײmϰ6{h8Y\f\` % HzjzՐR6FfD0R݅lZ^K\4nae9yxl{6cWYTYHeL$+Z+27T/u,!e#dcRƕFV Pi `TKb3K;06d-˳H-D HU{S*3n\- YJ]Kv(JJ٪"ov`8jady!@o , h1N&{ Ol6J@І씢6-I!!+]v˕ kS*':gx\?gk6ΒESO4˕ðE ]KIFz9 ^RЭRQlr|Mkcθ T+`Fٓr T)"*xx(9\z SWԔ4BTvsSYBz`]i wj. *$k]@`OƺqH`حϖ[yz`".=b =Pf B& F*n,XQ7P0@PEbV66b*`#"C(`Q[2(38vhGǺ+` VinػI 6=^{ ϡn x\6ݧmvhG+` VinػI 6=^&|iu#<V 5#G_y8g F1(T 9j2vhnGktRj5ہO-oXIaOaFt[.PPJN `l&`[i5L=; -RSXY'Mmo*,իgL)q.1SgşP@J,(BǂZV' lVC,Z=Oͫ۩XT1&FZ)`X* ,Z^˭f%%m@&n̼g_Dg`/P@_ aQZ"Ca}K!gN=IViVTau%2Ο倭ϓ$2V5:ef& '}g`ز'Q+<֣Kh{XIGiS4o z4cͶPr(/ ktoة~EfOm Mi1cN2OQgtg9(`)ژudDJa%KtZW!ng`+}L(@eld16# RW1/= "< /l&**0 l+UlVV; K [FոBD6@dCQW.˰SkvlvZ|7vs` @{hw`a236|ɓ$1-L4K~jg{4 OJ SP F*:w/H@N ؽHl `wk/x (`ګ=d(=ۈ(0v/]jlW_@V^=C#GvTd;#X]v՗P[x{P 6zfu#L^lI;G-V`>W6.š_~V ,T^t6b 4Uf({h:0aB%;] .ؖPnK_Pf[!<_C'oU3p85?뎅NvF]fKRfm%ֻt-8,^Y lde]Vs  WTJq( v.M2nW,i`H@тDlf0KߨT]E@0eD,CLEB`A6 \~ӊ[02l;[]9m^,b[Vԭjtye9O;j\7wEQrӔ75(,v?mWBRk aQ{U,vevem%e6 r ضCYXTv۠kP ؃!QOX,l%7GGh `7|()ogCli0*2ݨ ykv@(p6l=n8)x`;cC;P 4Tar={j)9j=lfÞʷ@(P.6; Vhs9p[s{1xNl_r` ˓pCV+s lꇒZ(V` լe$jE;U+I[ 66sl֡wo֦-9z=P9Oh4_idku|וSJc#vp5>}(<ol{\aEY/+/ϮK<9+Mndu&tJ!UO1'f[:E%keLM$sʱ b)dؽHl;'u_eN(,]f\MWXȳ!~.FF7C+#7FSڪyV|!\rF*D-ԮF*6Ͼl؊3lɖQv2mb6)/i<K|΢1PkT1 (he ֶQh)hj%Q*&advġkAN+i$š1FWv5`"fkE)~Eh1cl(!H'S; PU. *ڌFXYl":$RWTgH1o,AQv-H) :.ܕ;`UlN`%@/)e[]?HEFZL Ztxj /K[cBedl z$QY;dZJtuԖMFdghEbig?[i9Uw={^ l p/#=/cM5tP$f Qy[QZ`?lLexI˲)g,;TߣJ2eFnWeOsFCztg MsQgvٖy+Y ZKEgږ OݦJlCfd휳@b^i{`"aٸk'ZR %3H Ò٤b䨾\SnXP=7!wn r(׫غ 2Ww[k5kuB(Uvv sʩ[gyk +`ګ؜зLL=vEA& ؽHl;!Hg8ח+$8g^NŽCE(p^$6ڝ ƻv;+8W mkb9q]MM.PaP`^$6ڝ؛-sg{ecvMO6(](z SȦ簳Ff8g2=h @ F*6-锒$ӺS,X J_fX5؉l! `-A(`QEbݙm@&yͶ;Zg%e&}c蟬I- BSqW)f?3^`;خ#:˖%–+)~SlƬ'# ;EIi5 *hŎ݋FGvX* e@<+D1'ވؾ<6u>}P -I#c6=Ѿ>X|)]a  `=6 l 6d,i,fltbnRG3LTÞdc$l>`YjWˆ9cY`98Q `#WMh,>J1,\A~2Bu*t3ڒ'X,6=/j9T#XsxIRTƅ&4}fAi[{BkliPNDeS75` vHiMq}!|BaJ_4m9nVږo ~1:e9LT^) `ϋ}F4ϰif3yRd--UX>dIh 1m6stӋua\ҳ+|ٌ':fCe(/RPXW2N]2Evv4;gJA,#`[TW~Qzy3]2iW?30Mpw˰- 2;=vU6v@xrҜ8kS%vv8;EvQ&z.#<Y7YaZ@uWdClcvmj-l K 5bW؄N ` l?:E揬Ů: Ju_VWoPJ݊(PR{#`[+g1G tUnM{*#?@썀m]!?g2Xh0.ׁMC(Oc[VW-m8[çKsd jґn @}qL;3OԴ;t\q u88~kX`دM/XT_u6Uɸe=^GmY/`O;ء^- ` >95``U&i}`7o nU cGj`ϰ==^ĭ ` tI h87`WWu{T>d=Q)- Ӌ9-qBE?{֯Fs_;˶@Rq+xU+JR0HFi _ ë {64ݞY-7|Pv%X{UuMle!x;c#{쐵İܰrmٹ/5EJv󹾢AoaSiB+nԯLs`K kvzib+ګ:o/dyO`{Y7;'g4%OR{&fmXv/.anW4?Ý#. +Mr'ey]IdؓOrv8`BEZrah[`S0{E 6𩓪v^]*iAjlDu{G=P_8WY1Ze6=/m;4ج-ߐgd6gX}A{6˹Y>=Ȱgi ⣦mq5챃v0: `H|^ ~89s jܲ{.[ W2ŗeP "=w[oemV svUPz1.Mg(pmk v.v*S 57ҎG]6{:`6ڂ*`7Co!{ѕm]fC*P [f>᪓]1 *`qY-;;GP>(PRz ؕ3c#z*`qY-^8HO(0Pz gۈ(6z;c* d$pSF>g;x9pq١zmks8 M}톔_4C^{M67;W }` ǐF{ ތ9 5] ɰ';쨏YY`p ih\L #X/U6s>՗>f嵋5ն2l鬣m'kϐF-m-Q6](`wTY;m;*7Y=쬬@ mlŢ !-{l%w5gV;A:jo^찖hcxә0z묚h>_J1rݾȓzj>)%Lv" *Vl< `4/O]9,\T BM&Vo-)(OerUO՗8u8Rk{`Gz [O;c^&aM mcJFw~NߠapL(Y+%z$f3 Îgn‡/h>  ]? 98< ؞٬6ݾb!fVlBS^e6V2(Sn5G[ka8VYw +=T} 7hsMSX>~8ho8aޖl@`ӤY0?웳QvP~?`S}޵ѭ ԔGM;̰)15m]mZKfٚ(U: hNлtl63kv--@I7w44w =JҚv ǐFkTJld3 ÿw0&XoR2C1ؽW][ofXkKc65`Z<^q ǐF{CZ%U!{}>"EȪԶŊ&X+0U!1G{D[bREKԵsγYon;4:p @V q`j63d84D.P`6lSMoS8V+&+`X}yM[W+k,3(Z)`h5M׵`;v ̦WֳM. 'Q~w?E`; -B(pxB [&V¡<Pjq c `Tx^"P@Qv-q  @(CnIkInB(W`; 6q$AÿP U+'4{Pn0'x{\P @(vr0( ڸ7IENDB`html/images/b4cf2bb34e3c20eebcf8f9e8e7949efd-iis6defaultdoc.png0100644000101200010120000002031611272547375024752 0ustar docbuilderdocbuilderPNG  IHDR5sRGB pHYs+PLTE$k8QcAYYYyacicic989!A91iB9qZ!i9a!i111)BABRQRRQZJYZYRy)ZisByJyRiBsJZZB1sA9{YBsYsqskis{y{cakicysq{ysq{y{qsqsyckkksks{knjAa1aZqJqi֔Rޜ֔ƜΜƄ9Ƅǥ8ΥQyBq֭Ƶֽ޽޵ޥεޭέֵ֭εΞBΞc֦1Ʀs޾kζƾƾǽZJ1sהόoIDATx݇]F4rO8BԧcaB k_LP2 ILbbTHp֝Dl)ݝ7;+~oL!@L+DI@L&`'B@IQH1_?~7~wbalH[=n;W񓟄I'FvVQM~7|ۿeɓ)`p1_M??)QjW24s3Lgo/ԧ^|ހh~KI6 b23M|ݻ/G?Klf~/TFYUf72~E(O&5$L*lR h~[_߽KɨRϟE[DɖmyƤ|&7>|՘,9>P9#-3kdy7RIM*,OF'&.?o~6OFaRSɨ*)%=7߶ܬ¥mD_JbRPO~g_~ٻIj&uU3]ߍfw,Mw\R*|x9YT,o4dýVvG5&W 4ߟ4Mv9?W~?~ן rɪhcG=Nq?~/LFUjZ."GTD̻L=??ܚ)lQ7>/o>0:ζ%)8Qt `rf& Ul*dOYS*dEl2ID-+Zn#k飚 Wv#hu&0N&0ɢ--L"lkIkOa$‹I=ҚnRkKk$ƒɲꚋI-me15$RLdJ#ˤޖV΄&Ld̓YXmRoKkL$dS+* 6x_?tk}U*Y(τŢPo>en >"nC̲$kR--'v=MPz_@o2Os̓ΤҖ3~"&ad9|Rʬ kjK[cvI$0iZ&}ɨƤҖ1)nTwb`ңj̓QoRTmiZ‘~o¸m"S~ վ]4'onXΧY9up9gDٖXy kZ&7Y"GjJ#O&ݾda3|/ON )Jj7dێԔ݂7sAE+=Ok5&S1nyĥ ;_$FI9粛KYWMz!0꟒05?'b霹޷'Y>Imkd<3Yh:$-į]~LڢIBuuo_Vr#̆x7,@V'ԝ^ 8ZkӤ`Mrqp'̬Iɐ'a&DxamI$nQ"EBw"MLp4R L"&jN&؟&i2d{߾xqm&l5/0h1wZ;1/$b&o啃vH0~w>zUzM6 ɽGo$7)L¤ɴer/6'nb+m%'ˊՓ0 &9uO%qjRf{sT?I8b&vX7O>yiTuw2ɜcGL?O s`5ZM&(TM=Mf͡f?'UO2 o_L'${ϛrzh4I`j ;2KڄD{WJ&H$ JY9*OGV͠ny&G7i`'>L"ɤCܫv&qԦ')j9J Gpc՛ /'qǁL ub) 4c˜՚ oZ3əT:.w&sɢJUU eyrt2&05Y%o:xL͓DT/.1g!&gë jcD8VIi^|0MR*X¤{jU,i-_ŤngcԪT{4;v>ʓd0Jݤ7uuzj^3THR&gzWˬ35)㺹aRԟd[ %kIuOj+8$F,-duLIQOFqqq!&ÀRK5VR3""4`H}gɅI'&`e7%dImW{<=~z&ɼ:ƁUl?zw?\I#0ݤ~j&ivt1c'0I&%&'o]|vE'ary2['1ʋáLu*Ȭ!嬺@y[p&y[]SQZ '/_fs(&`ry8e)7?r֭ޥKE̔ '%L9Ovb/_>L䥧,(LzʓRBfsyfh 7KŅy3/`_Mn.&(Mn bry'w͓Z l.<Lz1-魥 #O ~&a2I73~7L&ݚI}M&e.jD6Iwk&f֡L.1K+ &Ifn3O&0|zO0 MJ4~8Ad.0 L 09I{nQMv Il6are&mm9$L$L$L$L$L$L$L.d>G6(o\L6ϪH܊o6NkY0/GwY ~dsc}VK?}0 08dQ$Lˑ~Td3:"3I,!~ݤ۬IΤYeTy0i/GG7ovVi,6iLorkuk|5kVG_aV'O4VL7)55NQ5)Ԗ-s䧡񭖰${!sB۸Ù4*GZBp-L֓-&%)"lLMIaD*l,aݤ}#ֲ[Ia Dm{'0 0906&ǹ ILNä/ɱLҠn2]'XS33Y\I&ɗIXYgXYpLa&cG)<ϕNګSLLL_[$VA^Vk44snSz_JYiO:T/X׽UUh㴷4Y&Y8Dj0m$8ɾy2JkbKd}hr"ewe2XK Rq|l淲;1Nz ?D_vI_i̒fT÷:~ ;ALʎ (a&Cϰ<2զ/!Lf0 0 09I:p07w$brIL"`&0ID$L¤WZW`%61@ ߱AI }L"S DL-oȗhBpIENDB`html/images/b4cf2bb34e3c20eebcf8f9e8e7949efd-iis7vistacgi.png0100644000101200010120000013562611272547375024465 0ustar docbuilderdocbuilderPNG  IHDRw)sRGBgAMA a cHRMz&u0`:pQ<IDATx^w|b|ιs߳gɖ,+YheJ$RHA9gٖ-YV)As9AUuOOO DӶ215 ;ݧT$Ld'-wL,cr+<[=o}k׮Gyͷ36` sfm6,HV>$&5ep)+}^cL҇:a`go`&(LK@;j$Pn];,?z&k6pkhB-jΆa͚PfEnӌjGtcv,Ը? gev,jt{ L mDI=JLX ,RE3Ɂ+Cm1jU+-J;`jFbf40vh]NCX.C[b Onp1Yi<"ʬA;lR)\bSŦrO'){J sM* DŽ/d!op P ,rdhș!&А78'_Fƭ% m0Dؼ!14d(oqt'rf8yԔ;b9b999ȋZ0P0pdb\|ݹ]G͹$sc,~iut~lْiӦdz +bȃq )m*Gqc`;iNS0s`zA! @{\U;FT0 QXB(BoD@1-8J9Hnl jvI( uD Mǘ>"SRWxW #@hQ01ct 򶫼JwXӐQ"rM  -X 8X'[^q0:sHmR;5[^gUX+-=rڪ(AzAlRա& &MI%8A$Kް}LFa^? T|tDzf(SꑘRV'rV3该{z4t^"}Z,0yQlRr 6L nCm]7"֡4vb.(ɺ ޸HfFAА .C34UȬc B"Ne`PFu3Jp>6(aor#4ts4$@$LH8H;np~ZI!Wp{g I'8֍i^^ݑc{Gk;ql^߱_==ٗ8KO=}b~;5}cLݧ=Oud^9v C&#|n:AbBpc(Hp8GQg MS%8Y,sj*kPa!6d}C&߀ :L*5sXA#V GO]x+aSԪo Ikeׂ^t9w}d^0\i*%6]QU׬oV6rMʓMfMa &VJ2W͐L ze*R*sV9+R >g9+9pe]֒.[QPb²ӊeq^Wj|޲^d{v(u(KR^GE^i.!f)wʺqZ6'tȷ,{FIlVv]<Q59HQG`b (Dhq0R5΁`bqmV [\֘a.jnţzuV3}HLJ?h#z@[=zb" b3n^k|7v)Peܻ˰we.]{wZK2ֿx–i5olDͰkݾV~-cC__d? S :[n%릻G;1!lhl j{XsuN؈5bpf߄?iOS=8-6[pz,0eƁdk5[zu=.CUPީ4T+dKXi(0u;Uq]Wܦ6WX*սNSy ZTyɺ'U?Z-;\wPњFun pi,뵕9TIAU^chJֲN+VJ,CdZ%=v'ZЪo6N6slیymNkI4sAN l3wVC\A@z")CÌr4ka-6CQ݀"=DRg!vԀ2WP(7)v:2DH7h`! ݜZ0P69&3&L (PN"[GdZok-ˠ؀2)v48T&Q>-5&Mɩ2:ln[}\mXQph-0ةFV.'4Ⱦٿk5Ů];_ک۵Ӱk雝ovھif_g#辂^qXrsݟھݧ>3}Ou|ןȿd9+/=$:jRF]uҠ5o;>/kTWsTv,YVG@(-1')GhIlzX'mqwjOi*!O2!Kn*C׈CH &P[*SCVSZİb&+Ȋ@G2qDh")fu˴>M(AC+Cn[T` {:`n34j{UuE]S֦*hڵ8Xe@@]D[ڮ)hZyVeQE] 8v: ]vcYP"j9uٵ5ǫVQ;T}`uFe^acYRXJ;Mt͚&mn&Aۤ49 ''5ړ-`V4٭XלhT?X!;PwRvj`5CU'M9ƢN9EWЮkӃ3Auzxx2Qתoc۬F dlPUlP²y-B^P/0~J&nۤ eBBv#MFnX\; jԢo(i8c4lݚulЎo9QzU" /nAmw_%Swb9FLjsXi[Tfhl.oB;; \x jCZd܌57:?x냷?|÷>zK[5[R}>㿚>~?,P8F?-;~[Oކ?yۺO|Gmo|Lο*.]n !H خ=KTtE G(d34 M4Wxw6ZOm-5s A̡0FZ[ }˥ ;t->P{@iaD5G8^'?7`Dڡz@SQԮGXPGr$B!aiF'XroBR`/pGAD8>d;'iari(@yez'0z}h FIDV.kh⬥GڧlU*%RDVk:eNZ"UK*?i:[Us`KKF?Xij둷*Z{uL:nF]Yz^I;ay//J|y_Wo<#|#~Ʒ^ҿ/j/7_r/!z_jKGo,7ԡptyJAd׶kzEY޺![ByR-$򝬬w13`8&+NWh=<z;+6ѻ* OyfeekdФ?Xh@Ʌ_ir* 0T _| PټZ-)f7v Ԑ?B(1{fZ\B =4!j[ϐGaUY;MACۀOУPV+u:YN,doU(95e;\ѵHrHHE5)rE-:9@2F߾B }o~^Y[ .v29ZDsxM~(}E]Kz(_ TPCiޒK+|ɮ_khgG??T/7u]mtP5A_DjE?HwN`YosZt+[܁P}Nw'[˓ = )R:*໬HyҞeM6Th1ፊ;8GG!DJC ƄBTȅ\9>&Bb ) IHȡxBD !yEߓPYA'0r׽HzT8Y?|=J_{{XP?]xdI?'k;Q/`^ՁJ1U"呂#yU'JKO+iHo_5\Stե^]yU5_6˖~)헝vb}-w׮[suߚkzΫ%w^vMw^xuw\]}5_St5&7r߻ $ dڥYw?-wum`?͈=#Ѿwge@p̥ʿ@ÆI/uǵStrp wpū.+z &^ˢA4t鬄hM^*jKV֛ ##0 ahfK]|)]vil氋4hT&ftMhATFB2Y4-]ɀثVW+*ezi^M/ x$&m*lSP$?YDu߉D@ "ЫC|tn0QS?H0NS;N'}ym?)hۓC!y{:mٓߺ{Oqº#C'~oTg,E|{mWv;_Ca=ȭۢ߾+9-kH'+?W{+?9XO~yc_f.ۃ:޲5/[I )Cq٭n] A ͓|]ndMo&yc_܇ b}] $8%?t->7iۍx/MvH< SPQyk 9ZG#oJ"*LBRY ֮}˾?Zo:O+k+wC9UTm=t%.h'/CVzIP~BXCUum{7G~{ّ\v??۟yKKjگHrEq{kZ.[|-﮹wtiMtiMtiMTpI]k/͡M;9`~egJ5}6А AVG퀋"{i< &ϻm$݅@D9(L[x<@ā  :A4/H[k!H+I^x+eeWz3 $ K 1v2 Pt.4WjZ;rS琹Ufhw;튒~* آD< ",C\& 7 P͑M:#dWܵ)E=:.hd>?\O}z ohW'Znݕ'Sֿrj }ꇎxp?ȋ2MjD0i A{|`- Q}W7>mNC}]^{C8B!0*xq,TPw&BX"D\O58>4@#ԎIa0FȔD.<(zqkU{OT9V݇K,(S|H~#uskdW5Kzپ!)s|o6)Sem'Y)?Z@PWS&}޽7_skN|ɛɽ[,[ۮjۯl;k<\.)Dvuu]Wy5w^Sw5$ۮ.[ɦ:v-;߿VDqw֚|v rCp5pН^r~~WKʂ r !aTЭFaUeqq qyZUh$ iQ/fJw+8TsRv?ANz4)ڴyxQ?|NTUJہ|2 ay/^Ӷhݫx00Mw^Ө8V-Cs_IBo r%{Q5K }Wn'?p8/5dW'Q5|W& 8j P<9X)=T*v7'[n&;P]صG >Ewzqt?+CN6}1g7iKz27P5&J8ȡtEЋ#sPsV}h0R;Fv}qL ~C1t*yurjeW=A*3~ha:Vt8@l l{vWd95ieUxxq3G kgY{c﻾7\r_~` mt};7ش 7VojT|kọG9/? Jgޣr^f8 ~5SӀ g[cpOBtl]uÁiyto&kAo% | yڬ h,QcR%DAKvtTt\?l$Z{T5V"[m p^ rPnrEJy%x>-x1uD8ИhrLMrd*7z5x_,mSiJbѕuC ʻԗkZ>DUԪD9]yM*$C;nCI;MD-zF7!2uAiPd[txڡ/4k&~H:7ʞ {@@'9\9xrpeaDU[Cyί :PG&}s%XٝV=u}Jk`8֩r[u޴͎@4AWGZ+e^I7~ PΣ5jn@J*9Xܹ(m._z%z*$=#L"=čBaB ׯo= VMP&ݪPAFƇ(r+;ڎ+n9R u=h'r%ٰn#O:2/i/EH9C'j|TuRòBҭӹ.=n][umVo_[}mk^Gz.ػl⎂b)ݏ <غG5l}H7gj E(Ab$06/[OEOU޺wa?|oYw4 IbuG fbl`uHI lb>EeE|#R'_9ysuLЄgSMLm&·QMF_Vז\:ǀkI1dm Xu "CcUt&+f,CAK%Z0f5:`Y #C*zU}tCN3"?2U2^;t,SO?ޠOMC+U.k7?tiӣ" crG\9Ec{%ÈA2nV1\<8ǖ!!Tǡ@02~B¸$|XqI 1W>X2XT++VTTWUVvcWuUvcY@!eq.^T)=Ÿ:{a vGޢ^^ھznY+-4J#VR'EV_SyQA+^W?/lozq[K_WU^,_*{m q{İmۥ~X%/ooy{K^QW=GyG<Wa\H88>Xz$6u=zT3Lv_ kaB8HzX#z;HXC>wp' %Bq0Hy"w-~޹CƆ$2'Ԃ;h0AxC$SF986@bμ$6Ѱ&ȣχpRHX r[G_eF7J^=1~kc^!%ZFjZ1bZЧi?j lע z" 0t0CP?Dt*,lӠq# !`k1(ARkx;A]=C:*J hs\L:T$!P ;-c~!̀>7-,c:x t@gČ&%>gq\ꄕt[1D0Ynؤk@bz~;:W ;PSQUпۂN^Re9uK:8P9toj0܅ߋ-r0ҋp#UnjGin|H(0ATH^GFڥ#8@uTiִZ`6Vee.+r,+ZVSVZRW1{EdYKFMCTðBv$ V+Qjڕx=*j^/?Z|$}z~Ns>70Ż(#zDzx9ٻuZx5wv|C, m?=7A8.%z$m xӍ7`IB"M8oI{Q}10A՘OB;NiP(zct QQG~][]QŻe:yOB{}#m>udu15!yyMA/I_+ W#{y(9?э m 6Gb#|0ԛAd$ԉW1x1_ O]Y8趍 3($\zSYjtRag "pb@q>+`0>tH1cwd\]7X`( 08V9#6詆Bw͠JU+zl2Atb'c?W!sUHp"(:WaH\/؊0wd `법tً)2ڤCROU+dxHGF{0؎è>áq>2c `d]aj0*Ī#ޅAMyeƈ䉁I^l 4vzcy2iFDhdxC Hۑ?:4 iGth""4Hp!n2A'* 0ZtLlز㭿 1YdiVO_b[Lo }i?/0*$Xdǘ-~=zr_W9rUI$_[f(5ʈs`'5WeU9QusU:+r\;1iV\]q#?gyrCΨYb Ǚ]lj| V_GMˠa~-ڿmmm F1$\[k:=w &`Ĭ5w B@w>FDeVAh8apq,J_Ռ4MmxVT5# N"5 }!w!Ʉ~>+;5d g3Ri>(!cJk`Nl!H:5vMiQzЕ!: rwiBa,B0xH-PB ";)"82uKiT aJ@[;X{1i1CekV:fQJ!?1 =:/r[)wI]rś<ԼJ/ jAUi$7t2yTJT>t!6䫕9CVJ0DTaFYwCﮓTVHaЈ%yq̙0 (H.) ;Aüxeb'uBXB-1{12*PtLI=.{3ȀfDAvM@F݇~/6nmP"%oc8wCn|v tc_aKaֳvzY3;dgns͗󨝿lE{v!+}g;w1V7Fy PԹי]AsrƦiiAXy;wdPT#:W 3 ץqf92vىMD~ ~0I6r f0ɂd$5 #^(!vk-x_6k-=`>@t~ߦ EZkVTtЖ&m-4a&Klo0b=EA(5(USC%؈%]QRP.AWACm0#jf r!gI3SF #<1:Rr'u>q!8> gZۇ IMT T891=aBW0t7bܠq(!I6\e9[`J *;,dPa"" G4"'m YV §*4d LK5ViUΨV?j: ,N1E9¨p'E "[ ^& yuxu" \kk[ժQE5{m@o'uHwIH&.JiO6Fp ZM;ʳo_)!%B[DO jMv !+jU FT12Q#*P\2CՏL$ڂP-L;ӌ`%b& l $T i0#+F`*QWU5Ǹ%1M2|۠Kbk,D׺Q=҈Bd4A@%b#D̕ ͂DY:z^˚q%pfm@GBj ü< ɣh^ {M}1i@! i+Aԝ@pY 1rRtOz` F#79Q>!0LX9Aыo rK'Qd&HL S jBc UO&!,f5549lC?:41oiӜl5Em4dEkl?IMx}.?}f8jIתHF@ ׈f*M%KD/ REE KRYS A8-bӌ4jFZm8]U@f{*kHŢ[o>Hi(`A=J|QJ" !TIuBTNZO%!O"!$WQ!hњҐ0>1 i]@-xc1QD 8< @=sN`4`c}F"oo9rC!^7#0aDZR"1Z,v)`D.M1vSJ ̭-v["My[hss$ 32J9Ez%r,ɟt;t88A"T?j\jtӒ…$(TjEQPScDTU)& O87DLW$2k&Z:E ??Id23 I o蒮(9xO6 _NE4*߮)hlXQ[56 񈵨Gqֈ퐷FTE=t|! AFEJ@TzDs6AW ꡂT I# #1 Z" FH 2 H :\K~ś ;Zp ]S lF(e"ܷ5C`LHO%1&!5vG&((L 1)X;W+)YV|UлFQ{$i]G?!MH^+kn4#R]kW\s̓v\AX.(1u׷ XǤ m*ޮH4MK^,xw옊q(4 4zwukݘ K2D4WMHA/< q&Gĵ X#h#("De* A4%E[ iM|ͱL)Rߒ\dFv$# h=>rnw!#QF8 A8~Ꝉ_("9 F%UGQˉdZ%7Q[%؀KhEHqQܻo舿3̣$J԰! ,DKW,؈)#U$1R!#KTOR #Eґ7:Q'A{}N j[mN愎4~< x |2zaT (tG0DFf`qjCN:ӡWQ!ڌ(PF[{ 5|5Ȗ9",*y9Vn.Xi+vJ{R/>]|b"2ASe٫BnHHO0ޕK!%uQi+vX $8A;T3жN2Y IDIebI֩?[#!k6'j7[0Q wn G̯Ѐ2"*^'#D !g-4ɇ8Q #ī6$}%'" W-Q{tn=Hǡ@$L@,ZPSM՘-v:a TAk;~|%c2 Ԁ?ၬI)8}Dp?HO$R2cLVXưoђ~BO:#mOznv 0Y0HC>D:rCu䜟$aA nJ<71]wtf )&P'u~Lidιevf&52o1{?YlNZdXMGE'N-**_ Z ErѶb&7 E~3B*0n9R SQ/9F# wp2DCئ`AQGhGw"LzJCφ3+/ #DCg{:t[݃K+ŰNtAwhsPQqvu<1(O{]rxJz 8|@駂.) Š1YsAsN}A}Iݬk3KTvY +2i2ei l"#)g#u`-7-:tv4ѿ=1Nr[TpO>8t!q1kҞl2 @݄>@ WEGhXFGhkVa VTGk*C%DCl*Zab&p͐ݢz!mVc>;ysn;VI&I?bi1CryHnѝ$(CO@K~@b ;Q!}ucuGdby ۰]1} ;M06@b 'F@ƥѹP-L;y`He*ЗvbPe$[ -RR XFLPnIw$% uYo _;rsʂȮWO8He,51C}FjACq2(/0(dEq_K0 s )T.L)%xlgIr!4d1 MJڇ,B {۠}Va SKߌUl p$ hd. S8ȍ rsqEzƟq@HUa&'˂Aנ4Y-nd ,fAbN FPúk, d=!ъDfD !y lhbEiDDO*E&Nhns6+آwˍ$D|3 PIme-d1yHdd1m r@e Щ p7~^:$0z!3v֧"&Uaѯur3`Z!$#36 dd_0y<$ RanwA (6V:_ FژL`= s3Psss-3t2-\7 Yr'K8^ߚ!Ks_Qr*Z]>"셌9]XҔdTD^Vbt 7n6h8Ab$ Ć"F>:F }DnlĤ*KM>P =7'QA 9䈎iDG8IO\GgyiN^ E;HE;Au֑I:nYB.dvP:a.2s+DsbQ(6J8#^oѣv;?=p08@pᓏ<2?=v<ǭOɗ<⦇۸?a>uCOϬߊ?S=z$_a˽>qCOb=[_ud=[\w<7?l_<!츁N3|ry=$Y>}[@y~ög \yp\Ar{6?~/faX8Er %@(d-O`GJBs{)zgQ͏/qˎgI 0⟭Zέl|d_K{qc/nz*9gɷ?7x=k[ѵCPz!%8r (φp=888}(' gG}/u/NjZ0Rzv©my8^bb0۰/ +X2$$ɟč܅dr$^+Ʉϐ|Bp -!ʀksyG_|W`۞~ w=ܟ{Dd۞z^Ľ ϬG1襹ݸFOQ'p-?áqe7һ7Æܾ1;';rq,y4[wu2A(ãwoDyvHk6lsÎ;߁X!FHo_I{٢spף۟(b qf#ww@!D[n}SsKr Հ>+{RO>nm0C02KΆyy-<7܆(ddw mmESc;^4qb>׋iqyI10hjDC#:щ3[yy`5xM=2׋.jTyA#*t 7D?jp O ϙ+8[2`n :f?2:ԋ1Zm̊# 2>7.o6AŃQNj C3|< hj:-ps1QbH84G v{ SQu~" C!"j92lye0F3PR]~UrdXxm@T0An~U~sgX8z~+°?q˞A:K },=iV=?(.jiab#B !%'~,/黕d`Ȝ)jX7wvo JBagn[&\1<ꮬ{:x:qx{ Ҧ/ݕu-EσI<ȟ9@ާ?ѡ?2{ <]pTmF$K4NiX ?` ď'q0$51cij.ɒpѽ{ﮬWx9pPp.@qd]\oeu \Uz3t]5'6P_\di39|2G?jr49(@'KcKb7 8渧,j*y.f`dtdt7?+C2$NӆMfR9n7eAo< EpL`e:YT㺨E9=";|QxmW>- o:w/ZƯ5CH [uab!rѣF<( JH?YPCwؘ]/Z' ,"▼h3t,}0Z$QUFi&QL6Dq>|J 9d>7_+EjRp i\DrRxcIw\-t fizcj?PϾ#m竿.s7!q:gq} N؀[aKA,G"xp6&:\\X9O4. 9$k3H_r̿!ljYpC[?߯䛏Q>g\wνWo809HP$s&_$ƴEX)k|]%8+bE׵cs} _4A*Hzjyisb(~=+EOuY˜b*ኚ"Θ`l38TZCp^+_w}Pv7w=Gސ}Ն_.Cx=W/c!sJ4O `l1:W::e3H$'vzq{ʖ у)LJ Bg#J]IJtԍqPR7'_ssRpD={*++˻;;MET?U{ ]~wC_aU;{~b\+;tXF`$Gc0If;?`|8MZ˓$ɒez<Bޝp᳽MJYfEx!"͔W6ܺmz_oc*X[u͆/6Υ7ӧ<}'o'cLNlP'u9A>L#m"̋&t3Wĸ4EM0&z?o׋E>O-KZųǃ֋S^*.h塯+?5=}[V]r{Ӄ/4Iڏ _3`< ;HU8Ht}FY5-ro?b4ޓcUW҉GJڴE%kOlЌ}V?'ƫrE5kg~O2;)Bc'Y$liˁ[:՟|^R4qu?]AKp4qpa<) J'qX<Ҝ`rBq\CwM3kK2i4q #gD1iwt%.M8t*vd+ 5YP@?VgAA˿o,vj QGA.#tCFaf`& ϙF叼'W $$z%``XnoxBLGMޓb\nyy M`~p$ӣFWjOyy`ylx=jO oKXx]^Vb4<_Lfp$2L`8i%a`X~dz?oѕ?`X 9 30>$}:75Vѣ>Jo9}<<,=pσOؽýjGѥrtΌ/V9˿,] <<uOpq{ì}p)ԙVn~ I5Nz@?It Bʽؙ1fГ.x0x.RN!k7Kć+*Щ{tj委ü 0Î3ޟnL?s{LNb)JaWXr_aOANq\ݜ3>mry,N,Lds*̉甕PRΩsJ<˷FqaNcyc*[HeVZ E'!D9NS!\NI(sM?3~-`Vs8}ǵbbQNĸVBM:Hb2Q݅|[  ߉`fsf~hyt;εTjH83ɹr˘i@)o:zs^Y #/yrEY v77s5SQܥLx90.5w%܋AAVOHNv)rlK,LIEgqL0; J;YisHт4ȵ^сf) 0w:sbIo!Anf`w#PoJ艍'9鷢|.mX.UQFϸV.yG8{HX9e m:IsżIECT;ΥTh\{c/6Y%;Ob&mW(,yι0'GSNnIu ~PR? 'ƈ"Obzwc swhG`gjFOx)$$7܎A@PS΋kq8$qLu*@ʱz %~u*;|8ʽ?r0Ğrʻy cڿĩ pp|T$=#7=jOW3Taw8քOa=s:>⤏Y_}Q+ ӿg>|n6蜼VIM|RzAܓܓQSVDr>^+?IƸ6Ec|qߥ4&)I|k6x7FZ_,v733 9F7w΅Ciݸ9_hLk46u =,74iɒ ixd{Oy#JOe)L>GƓ@}(Ɲ|a``XXn;AQCokdž3skN͏-saEc``lOim࿞qvϯ60< .dZTcwBwozt>a000,aܹ~Xe*K,UYY(Lc /saEc``8jmjK,US(!KntPg|wmw<7ìayi ibwa%I)fNkyX9ʌ~Ts/,R/3I(%s6/4 5^/?&bx2w .]fbC:$%P4nep0Eo4*SԳsǜ~fMVܹ?oxd@'~׆ D>=I(<46U<@xy9(q\דq0:d9ݞj??ΕsJ?'?"ϯTuZWcMQ73<2w`Z{Pk Bs7WL"LBWE?8w޸.Bzl|LUK2DrϠ=XYqH:-b4A;;U4 {fY41 y) 0LETJwYB-!O^_nHU߄}ӾLI̭>QX3d\:Ш0z_o'z?:_6y&WF7?N1pZ CKR ]}iKp54SI#”7_gQ(_z{$rե9,A ,zID"\ɇĹ"&4"у[:d:i:TIk*iީM,D ҫ-C'cg'@њKS=ީo3TfW d\ݏ:?ko MX#V(1t؋i& W<bEf/t`3/1[3!mI&M,RLTZ"=KlG%4gsa&&dg*g/l,џ \ s_ٮ\G4-hρoV3B^Gs~qpǸ%C0%"Dc>3b .g`d`*' Kusk$Z IyRO!ѓ)_9q0`8l%ފIْy^w_>;|Q8qof|D\sm#㓎ggz*Mrr?ة~㒥13D!zԛq!V׋2ߐx1gS|‰R/~uS:;%qΒzqB*R#;d74\S|L;55枙آ3zqWpCxq9P/BDYQ8 pl6?30Nm KEYdt|=5s$aEߓķ&Jcb(OH3%B6ir0EN'yO2SHiL,RJ&e}b(Z+q!nk'g>*fQ?$Jb̹qfspi͠9nZW$>'ijH*66z;4!G}L,_^ `08Nm탣@qxdč[zmWJ՝qpi^Q*ۉn`=ɹ+8H xy;+%G{w`uGuۛAd#]oNƒ _826As ;]>J<<<;0 sGϏ'׍۽Ü9|ؽ=V,-CV0K2o'_|Uׂ6O !w.򹲬zMzCN|tt/~VW; qt3fܿ#yu/~CAw&pۗyb2004XWPzt3fܰ=^ ^ߒ$ F^|}ۖyb200끻6><<2 cLĄ9KvtlDސC 툷gzc`X..xdc6wjb~ O`$iu=<<<<03}qL=ɒ<_H?jt$c|rp<<<1 r<ЄĀ|~nK3kg=|4pξ>4aFŨ>8vfT{︇]Gku.˘yy4x ĸ:OpTa*,A9$zCP>(>Uȋ>8 Y>Ν\w*&8 Yo <<1d<7g=כ|݆X>ܡ a͏2Oӂԋl  YpXl.˘yy4x ◚RS8k  ݭ_]/l8(]&:+&@J` BX u^@43vLtNLjvfna93-(&jJ:: q NY:Jֶ> ;o%O9RxT]IhE6G6fMT3W|H8Rs8#؁*WFGn3*bI }Uf&@R xQ>7=7ҩwj__y;I1ghy˕9NtG*8վA07k-[^Ehx e48a(hvM؂R64OqxVE@pV njBTĖĬMJ<0G$rۿ]ve9,p-Q[6rƃE`Iy5@ɄnS>JZ[AZ6(hz*JBHD#/2qx"CL,!Aa4¸l#*.glЗ$9},9@9G?ꫯ~9x'`cAfˬ.?~4g/b1YNLYa*j*hϭ4v93(Q{"A@PTk_7PBM7.5JPނi20dwߪ2:5}'sjxb֋_BAypT!oZCkf`H}^ ]gKcp՛7oل0~y3r4>j4+r@F8Ńھx0/5 Ry˟ni8U}")yy`y    5 ƴ 2$Lp}1:ͨJZUAH?jb\d10,#d78cu#@㋗ 2}YQmOx[CNf﷑$JmӜ٦ObG w˄y`yy ) _: ?9zNAG`VZS@&81HkRCfGŃg?9~Dó|p濝37zԧ~搆&67$-)jYGk)=ݓdV2͏da db?H8N FOw |Z*ՓC|Hr3aQF 4Ù:'aΑ)ig\z #0g,G OX+>ISi:{_g.}jyqQӛ3 .9.P6gH'^K=QXiGG Sq\~vܯwr'3G yRaIΚ !$P g݅gh4XSGQċN]SQV^$Y%/^QTfbŦ _ǻ .CSGWGis:}*<8xƷȗ]빻v5-upWDZh@I"==Kbp'4DD!f I3v6%=G񓶈J(˼!W,Vىe{ cvbDۃy;#9[dtۏyYݜ3^?ׯ_ =j㕫gIf%LOAAҽafz|l(\%mz2, 7+s0z(/Q:Y9o]a*jL>JăBژLّRy&%m p<A@h4 5Tljuݽ'NH>epzU=ƲN}E1:\! xgHq3vӣry}`_RŃգ+{f҅N řO2̌T+JtbȄSIߓz g< p𫯾 x VWrWZ'/[|e6Ma,YFI'Yz tOlV8r1 v{0JR Jjk{6?xKZEM1;:x .5WZʻL=2, OuY¸S9xȄ*K<< n9\H52'8x/`ezp0Bָ%DUtQ+J3̢3LNlS}>Łx%,œ>dy7!mPx>^oy.A+]3g=^!,;@&81>ج7) CFHZaԬ 7I5, !Y98ËY[HRj&&H8(2UP:zWEt4q$Y-r\7=ny\u.7#@pI? sxPX_B Aq$J{EA~3?N,d  ֧OZ^-8E}w숼 DsFq\Nzv\S` = _3t#; -c9:E9 `Pcb3zQCuN=+0 ZEm::IN/3p0$Lz{UTOaegbʭ=/sΝ9'O*9qpFw~*I}A߬/NWkt1!d}d2v_8ؾ={r#ʶrpƇu5'jWH՛8Ƚ-\3L:XtKz===s}_|VHAma+?"rbGR2,Sd^aZ[+K;D.?NgaYp0zԱ.E_;-lIBq$H1}YfwXO"2X%"֩캴`V21n#\~WU#4b=b1xNoŰeUbKLgPA1:94&4獳yxAdЛ1Gzn[7!: ^ 'Y =jc'q*1Iz#c@Hh+ 1]Y3.;Yf< Bk 7C*?=v4oi4O$q+B|(  5'hJ՚L.g* Xx}VBbD5D_h$'Qbuz 5׏ գLmFN;H rh_OEKԔo='mbx%l5)8$g,XD%QN%w.B g&$D>LpH<8ҬiюFF GQp+^pT#M^/Mr[7>9R3䯕zeۉVMLn~4ppQGj۸0L-7s$.W~/̺7Z'Bmcx4rQ$=",clg0ݜgV}t!-3p̍o?/=sw5YYk^9o8վA07k-[^Ehx eTwLx4su96{I!.5o!ƎhtP?pai䂫h]3V%9U]c-g>P5-p$ķH:^:1K$yOPDdUl朞"x{ ČTuZ0pl)q[A޲ذexm]wgqG/G>>oϕk: hUYw˫ muAy݃)ʯ4O3hvc.WG,c$I (_g̿\^sGDEAmKm95il  T5Xi$+%*\-$SJ똆$k SڧiFIH=Z8P*BsYDt\VppyJw7;c2oz(X#=\9xc\$Zj;ymJ9@@S\lg x`Q9huJ{eR{W^< 1ƥYz!YˮoԞluX%f#cKz\]dQy`yx`Q9x/~crJW UU*- ;V.?.8ӣ^w=+%@*]E=vʴXz1s/4f||cM햛o_qݔ堀B?Le]-}lZdB֧`f?>bOK-H Yy`)x BB>Σ||Տ=wmҫn{rp6k^ Y/'a5{`8_?>Ʈƞ+~w `{7~njl"IMsѣ :`t%POLXl2g_$Z?}r赏>_\{-u/T,zdCv7@COlm"oxyCÞ!灀;]ۓ\^~\02?voHvJ" UyX}A[|`.~)/̼1mRM?I{J _,CGadBiݣM"b7fNÐ:LRfqڷ|P 1Ce~MKNWEW]k tVmNRat28DkJ(&YNBX $MSHAaقM1`,sKӷ3q0ɫ%i(tpyRc+2kl۞^^\ZBqT "AAIէb6V/SNE2@qߊ A atuzZ:駈i 9A:'a񗇋b5iI?qEfi`Q9x~5)fQ3Gxe fZ:9<7i;b)B"/%h$;A֙:Qbq0$IdȞ("^,eĹ3VTkޱ#2 ke+^t黨.wx04J #V؃O9x C(+"]R3c'qjXTbb_x<뱐=_].kteFȚq0`<5ZܽȔ>-#t\jW33B֌KN_a\׆ Y/ Z=8Z<;o恈2A[p23z3^n<%q28+΄3_@8dM[f&d=Oݘy s4GQsqFGG…^0m#ׇ`9%eX*bkt>T;ǔc(B-SiU֞Mo\ȸ%OQ: f&:4Kwi}IdmtĒ&d p!!D9SۻdI]n=v y5)ޕWI(`ҡ:$Qy;j欒e",wu-\+!8vk%]׭tK,P/H6ʙ ԬxR'yR~W^NMci"QJ06dy sǁBqpAِJ7@p3?p RĘUZam [S^Cy`cEP AQ:cu"xDeK*.UwXC6! gEVo88ۇ`ckGkj_v.ݴ˭/Ւzoq : zִmQ7=^=g~BٸmR$R/iqz #kWLTE/eFghϞ\Dֳ9}=1hH9@ZݓE %x͛*ePR t |}]|[keC۝NَƨW͵0Y0btZM&ؒǪЦA1Y08>UcV/ýqGݸ1l? *,}ɻͺ ࠼َ-^Pbz88\%1H+'-[ @$GqU7 r1)M-mvWlGNiyl6  EQI MoXji׀CS-0-q q6lj\^3܈rL=, jʮ쇜ݬZ#?Im\>Usw?0tf8h @PR[u Gn,[kom,U ly騺}2tiCZ\ s G\ #)Cjq$942ܡ+p qkֆ"D+!pǓ4@\$p=Os j} (!}pՔTQWIsMrP 9(TkeIs|1v̌xT$F:y`f Q;NAi^2#d}*%ZrqxY\E*d8h6C@!2fr2!Ly廚 G7z;ɌI#f\n+=!b?Av88"QK2B-jQ'Ms|,r@F9(qpFIʒ2;_r3=%wX2A2Ń)ufr_549zqn(G)ϲ|W@!jع2,7dW5f\n7+/*@F9(ŃuF2]}XlFx*Q'ri/fzԫieg)d\H^Aoq0eMjttCJuXu"p(砀B&A:PUҽPKSjh VbGAQqiz:!H8׬,d\rW(QZryt?-FHspIQ]yb&U^Lq30P0>y';caV֧^e: 0У'K[鶗X,%GMV(W9Ug`<ͮXW?G_`LAِJ7Anz_T.1=jzqp`8񛛜~W- ƇcL`ckGkj_v.ݴ˭/Ւ-9=D%m z*Β;qpe\g JmBM}ID'_?K7U\-Cӣ  XkZhy_0p/ɺ\Fhj2lm~e}1ӣf2By StrlԎ7E݊Lznn@A6cD'wq֕$S fN<8`.5? K6푿~tK< ljHAX8 Q!ŃwQSE;wB,]%aՓ ;d$tKx 4 g`9m88]VG>x^MAxnc!̬\1e` ȦuJe~{vdaB0^cCO!z`>FAb2AM *0}1`:f\:xpVQtΉaX$ {Óf:͓֧Y<}qld\0+܂x ?NVAfκ_x/s@F9(Ńs,QsLzneIR{qpLz_+Awp0aLXX<tĒԭ݇j^zRcD8RNZԼl}=Sܻ R2AB2$aC0LDQ2X')V)vreZdf88}1t&uM?i Y<*ۻdI]n=v yx tW=o#rؾӵ=Ύ -؍p#(QkVY瑝rnM ׋P7')OfJ=B){KF0M'恨-&pv9Q**Oŷ"Q'7"O~(~"03a'5%iDAkM'-V:90 0&^񛛍S~rw>ˌ̼uFļ"c9xn(US9h2`"3G-?(jQ@XՑ 'Y$L /)8j5SՋY&.d$ρy`I9x _~S*_0>,`"$L=Ń#^s|WE}ZϚ0q0!؅Q/{왹"?}\`L 8 Y,shOqb+TZŀO;;^*q袋~J?g}W_cǎ>W x`2w̥so{58ƃ֭ۼy󫯾zj@paAr͐f[=ѻˆrP6MA?7yE}B$ĘUZam^N}M)@.F4z8~DR Q̍B%媗cʴ=>U_|#GH$ ՂŃ<) 7ңFMaD<#Ac_8hZn|.02&+Q:iKR+Q/ljnzx<^܌ĉ)' BT\YzԳrpIj!#L\q W.]A>{+\<pIj=3.狕syx q0s 8X`8޻$iLWH/,RrLDD0qPéspPh``$Lzy?XJq8X0p#F4ȁQ/gvz gI8ȡ0xd%y8(pp惱oR/s(L3\gȊ<<< xL+ă qИ#vR+sP@!ʾ1ZAwhA" ŒYǓZ?g`Xa230ZIE{_ܨbd M&(g@!?ogzXx V>3ޠiP6 yƃ ajld\;=U{>.Ϲ+p.8t.Ν;_~gV3JzU{V1\ )à!kky ܣf:4UZWO ùp^3_w{O>J\pF8Y-OuV +CUCZEܒrdseoK(kj m?:K`?+ddX8m [ h7t\ar7]%gA>suY\v8@eoeH49?z~z=^rzG2WE_*Q/s3 $N-3z1J߼!r6>uߛp.84A\?=[jD>| tG!\J&OH{_/{uߖwWjzD a<^\;c.5wdҥYkRgUsTKT5^gq)~7IKV5CHO=E[X'Sj_sG1 k|p.8tbcшje|p.8#׬8.b V)]AʘgssyDO+egp.8tN|6kG{t00,_A}̬3xq`<<1ۅyy`Ez ]+`'<<89p?ʼ쬘`b)VA/Z7;+U8 N5`zĮ};ێgx w-͐Fȭ2e'ۍ&DfA3^SFDnE? k3NIiiZbj7N!VovQ p3B3e_6& Sm6٫E7ިSjd#uz٬@z\򘫎;@̓(y5jÂ5BV +V V+'Z͐/5`Un} *ج F%d.:B[uz2A0<4fY7qu {y N(K( qWJRO}2+2L. XYm/I,9mv6s~׉Ta'ha$fN$g.3`GHX0t&0NtM%=C&ȡ|cMvV9Z%W)•C*H 8΀0B1ˈ&8#9F2VkdF1#(Gg'#pD2R=CLB8a/rpkU?ء8(aJr)PA0nfr"YAa:ԢiY(l7FQب +@!4\(쳌]w]֫޼]Pd^0W-< ]Q].v3ӞA,.; >Ñz~'gINN44tGu[;sT7j4i7֤&K?d-:QnՍ o~LbqD mV$ӌ4a,-hG$_a|Hz%Y3֬`M`b0P$ z}=.o~_,E%3 _#0 18(TÕ$X,8VRJd80 2|}%aԥ!A6/ 9 Jsq?F ôCB@!!BD @f+%* rQ!BBUD !!Ό$ĭ0Ca ?{onذ!޼yu۞c~ǾwA8ôyqN'HGvy͖M-M#c-#l9fnEgilVcvXPfo*TX?P;d̑ 6kõ:2h"8m@%]5@,X66XAQqhPkT 7X6"u؎_ Yyd#]i!$"}2T3~nOv+}uy\E}PH"2)I`PSKdW=>)q!ltA[cY!I \ {v{qݑ+ 6D=)ՎgB)ƃ\59q!ʮs(D W;B™Q8C xGoƇ~8?iӦKno(̌yyy`zWU[>M7ݴm6Yg_sοKn:+~ze?9ҟR;낟Τ+Xb Yw^s/&v!]!)# 1K~DfB%;{ 2Mo?[}e\x;gX [b_@KeȾ| )h 8-9=3"EEQ`Ys5 Υ(쬟]gʫs"G6q$s̩+λ0c` 8ϻ+~u=Q~G/YuzyIENDB`html/images/b4cf2bb34e3c20eebcf8f9e8e7949efd-iis7w2k8cgi.png0100644000101200010120000015243111272547375024123 0ustar docbuilderdocbuilderPNG  IHDR" gAMA a pHYs(JtEXtSoftwarePaint.NET v3.22}ԗIDATx^xTG7{={޸^s:1&s9!@ 3 DɮZԸu4 gFzsNwWWSs+&I"H@$  JgϜi7tp:}9(Yd s@2d4HIJ?4AۇzJ9 s@:9b"}'ϝ$ d9 s@1nsA!5s" "ѿQn^?ç;>^/S2dI*eS_a;Q:[?*^َGs{|>@cĴ*?v-y>8m}g74)&Vd+s@́7DvCX \Xd+9 s@@&cQOO?!!눶[)QJk @4 lDBYFN)B1zk`VG? D,hy,eL랗Sú-ҘY (>34N- ! d\?,) NBfר1 ) D6m9 s@́:̚1nvuXM riFYDzZ|fnmC._ F@O2^9,p}3vuO^l1-$& A_֕>Pm< A'ߟ2o@dڔzi&$8F Lͯ2MK3.-"ju([=6D ,*W/*dnVv S4XXpg(ͮ|$۽jʾ躨3: DV,-,5xF7E"[2d49`=Qy+iUZpxQ , 3poĦUn㾮ye7c¨A}9o1Ӥj|LJS~,"ߟ|2d)60LE2d9s`؅Ա}GWwf,D$d9 s@os?noMs[@6ŏH9 s@:9jx?^uN,29 s@2us"׮]u H@$  D%`"%]+ D"@ "D$  D"FFt, D""H@$  4|"'OB̦ԔtJNN4JJTשNWDPҕ&׮u(7JJLg8hE"H@$ h< D222ĹԦPj;/鳯[ӈc(5=6дhĤi4`>~"ČCÆw0կ,OҳH@$  D&Hff&iƒ:-b*SN)4ev<L#ǎcQcgK=u1ISTF_j4AH"H@$  4|">XA/Hёch6oKhʬm6~Q#4D+3)&)0^֤PQA:}mu%!=D"H@$_N.\3kQ~6RJNX43Ihuz)m;EAvmGkr)6!D"H@$а `i搲x*`qکIEdv^fFXDFO󖯧UqٔTp( F_GJ`a+K3ȸ􆕄& D"@Kg ]D%Ҷ]{x^eOY{(]D.taj꘱ci"y7Jgt%J9@K2M|vڮv*H!Lh\c E: D"Ha$Ȩ 4{n=CҨ ސ9:Q3r NL! 6*2sIm"ZSH?EEPq>ZMUޯ+{)%w'IiIH/"H@$  4|"YY6&"'S 4'h5 ?KLz3gӨI3ޡ*O9FP$Ek{gRQAVXVbSs\(ҡH@$  D #߀͔Eakiy{j׹u5zK ĩi4b  +iļ8 OG՛X7Oc_8HQЪx:qlHBz D"H%IڤR` 0z M? I=LnC&Pރhڬ4e4m3FM_BoXpLYkow |*J+M)H)m+;L.]ipH"H@$  Կ|"Yr(2&/_M͢w]{Q.}%d\ Df_DSզ)3Uoi4ui,d*0Fç:F9Z$d}^HH$H@$  O>վhJ3n*ޏuC'&P~õdVP# 41/Fl{i}J.Q\| ۼ+h/fQ&8Bn*4|pBSaI D" H6,B#iԹ4|x3qZYD҄he4[YNAŴ4LӔc?e\r]MA[hUl:vYo_}[o&!;|^CTTtMT^^Kt_ @ߟ4ś D"-H#N9Fy;(~c!mV9r)+w_FKW%hAp(]N,*OfgRȆu9IۏQ\Nڰ7o]j^:q_$KM111 Ԯ]:" /`bΜ9^ G!*{r_/rRz$H@$  x#6)1uB.Ђ5>!27o lW $B*+PHf%+h|.OL+ԞUy*9Oui[ѓތe]g"<)f1ڡ? Frf_ u̙3} H@$ h dffѲ4i|8}۱;uڛzÉ٘ 4~"6j2ZVP$BU,Z%ӗӈY4~zd8w* [FD,^S((.v=#u҅~_o~zg5={7LAAAt!޽;y睺"k׮[nRRRt^xA/7n~|rV{hiGgΜq D***讻Ç:P| {>q&A{롿GS//zȉzcrqzw5BXgڰa{W;a084ϙPڸq#WV襗^'jy@D"HeH' 0>t,uқ>}ݡ+u> C=ރFR"BW+(P,[E Tʹ%EQc~K 3}߿r6m'm_JÆ g_W BâaM.sz_nͭVA}<7˰܂10?P,]TQG"knßԑ#G駟`]13 C>sݏ@m۶Ç__DH@$  DRg9 WROz7jiMԾ^-t03YDW֒?,=ݶE7ѽsfuG~~>vmBӦMロvȮ/V@@ t_E#PSOv$kz= eݺu?IkhB1%--~81`?3 >`@"V411LyZδR$  \ D6nUOA#S]!ԭ3d<6 INq ^e 3*:"Rxy?^_4;~"7o֧f+1p93L ("hy^7a9xR ҥKԱcGzu5?>qdz?X8۷|AG9x:d ,;vp Dx8@L[{RP: gI"H@$2$ISIr}۶3ާ_QNݨKQM-2ǧRJ&JH̠4Su$TgFEѭoMo -K3:_^#aqmsy`9p5Z7:{ƴmMz:q9/Ҁ'hWi644[g) 'C D".HEd9uއwAmԆv? bpe62(@m<~[/VǼwOK+S evex Pq@/'7?LbZW& D"@Hw B*z o:tSV84belT- l-?DSCR Nw)Pʏ#k~K3jȹ1DCDgHD"H@$@>, Z/Hh=Q~#נIDڜ[Hv­%[D_}CoxZ?8 < ;&8H++GJ^;=fts/REXDdފD"H P$3=w}޺#u?}Pk08 gБ)'w+m߹Go gu\7HX-iw[z#ݕ{#t{ʉSe%D"H@$%٨_FO*H[ԥ3b#c;wK[wx)̭X\IUMRW=IfٓYr$ D"@`H' ̠Qc4rB7bZMC ]D=GQv#")=-^R@͡'?mOe"H@$  O@֍3N}FMqhjT7ZU6b2nM{TͪKgϞν降ew)'"2oE"H@$ @(׮]M)4z"6v6^҃%OFNm;))%RS.ed=t4)&z"],">d|"H@$ W)&j-}t{AЛt5:ZyW꣺,a㦩 5L͏)ѫ)PaAD"H@$ % bw-nEkvJ{H@$  i2D"H@$ ' ' YH@$  K@{I H@$  IDIBV$  D" ^FRC$  D"zS l'+-Yd~:yܣ2w%s@GdGqIx:f+˜ߍ2d4i0P:VaG @9 s@@"Dljy9QSNe4 "@6HX(r9 s "c eL2e4 "@6HX(r9 s "XD/Gk 3jɳiÉs/S3r|W^X 9eD~POş;Ix4ʏbUeUxESNDpx8\S"#ue9`DܖLJ (2dؙȃf"(&X[p.0_t[h:$~u{>?ͪ2d9E|GIUT󷿙` T2ڣ/ ZTe2=ʹ=p߮R t(H~_s' >e:/_e鍯fЀk5yI4lJ4v6M@w4ZXיJ~g7>QyrP"-ϤekOO\ cHYI:dW)V'4 H1nyqGZ(3}%oS}@W_ŅYc7e=F_|#M>1V}9޸?gO+A' rٜ星;NEE9-ū6ѡ`?>Olߣ"遵,3V zhA4q2F;Vy\Am,??9@,")Wƌd"ݷu_QK=Sn:3OhUa⎎<{c9'CY32]h~u0.\f}oOjQZrn{"+7͘6|y@Ƃ1+*d=|" :` P t?벀nnK b.Հ Do]}JaP<,5-eht~DPS\^x95U;AsgǏ ,C}ޣԠ)+U#/D}s<?f[+M@=D1Ϡ./g\l7|̛M7G2SYmbYs|k[S΀ߟ?_KLa֞}#Cws' bZ"Fzݥ]&Fd?V_:k_M O_L[`V񘦅s:h>Ӛ& =5c@3br]}ǺޛoFUկ(ti0XB=~ !A?jpxA Q  ~ԉ}@I }QOߐ.[[u]M;l1fi"BkuOv=>D1dP-ONcn_5/9.0ǫDkV1|s yYZ|xȆu7nvάb:2|>2z!Ҍ?Ӏ}tKe}9 ~A3 D\v҄wӏ?^G5ʤoq:mO'aCn߶"4jɃUbݻ~]`CKCce>]-͘KVj,5udʌe[eߴ!Sg|zDX'Kd߱wZމM_-"h0*2~4~( DLGF -%}JjޔP.x9s1kiْE/q`<ק$xA >_{ޘ"fh>tdxp}`G`@.!tW@mV,[c/Z_zj "{D%'@\XH0fl]6h,wse Ɖ2f¸QԿ_oe#j) b^=@{,0xb̠ `5gG>7,wLSPCӰG$5)}ӧN/p@9njJ) 95ڙe(UJ@i?2??cP?3M ~?m.g,3yKc?[,s1sLحeV^q߃) ٜz<>ϝ}GcOߟrJNyo޻㮞 9%ɏƛ9pUYB^Fd9 s9Pki%$uTܑ#s@zY>j-}t{AЌL;^~99 @DLi'/1ye9@8u2ٖI״&XD!>dhnsg N=3 <:r%M8bV)on;|Yyo)fE~6_|w݉lE2d49JOPΈ+W*:e ڪFѐehQQ#I#(9!Z_oXKv*@ٺ^Qf]oK&} pmѽ-ܶEK};U,]0Gg4_OE76.##`3w#%Ss|q]0tnSfj-o ܰ>!4' vtpo ,vL3hİ^j ph3aj 2*xX0ف֮A)/ci1lڔQ* rҒ׫ Ni&GjIU~y'Q=hE2ojq#9a=>D}wQe^vx x/C>=" P nqe/9G;# ^R%mNe][&[o!7v_oqrdɿwOPC' һg{:r`Or^оڒQq',?H{Kw(WU@ Z^}R|C]M]$x &ZZr-@_Nhә̛t&ڮV`dY5͍8y3Uy:yw?/l1{<]#܎3_VG.]fA?[ATʽ|o/8QLޜm(oiάi~p`(hwv}C:XA۷]tֿiXfn"߹O@"gcMsǡ}zf¸*wt~4PАPpk @EZAsX6PW,lߚiP4+AK1Vj\VBl}ݬptQepP1zwua2`5|e~1=#_vӦLsaKSͥ^G?łsԋoCl(3mKeEUASO93)9q}o  g l' RY/GبpZ4ƍJtb"Av@d񢙚5^F'dX@i iwifܘ]c) D8,l*b8FEEz@-Ls 2| "k[oд:>mwﺡs[6Mؤl,-ɤ]۷#F>PvcjRL٭s6iKGbUsth9"s DX)۽MEjc~{TB@V %ȖڏV|2`(OTxi:m lp3̴D BoGTDSEdY^ֆ=I}=q_|J~$ܩ,R_K5qwc:~+Æp~oIܿ5~M͛=]􇠂D.$K0 DD q멙~}zQ;ţЕ*swtnx"O'o/:w\0I5Tߍ"DsR 2]ws  R?U<_*&s@7s@@\{3d9<"Ddؚo/{k*s@(![JͪҔ;"M}R&])[ڈ:'mvӐWxT|Ss:Zq,W_h)IT\O"VR~>mb\._(=ymӚ2{#h  bGC}ӷ|+Yd s ρ1FQc. #m9MG?.+|[=Z4y;T' R!6 GmI|)xkk4o<ڶmyo,77Ό:v?")x+mܲO7Ν= z4wanGhZy& X1>qt-׫UtEf<.գvv0hobBIya'iڵ /,iS(?Gs՗5I/.[xӥ/(7CO`|L_ c@;x=(cWfLDsgO2cfd  O4^ߣI36z!]}@HNzۏ֩uƐ(h~|t#""u$D?K=t:}DyؐuN+TV߯R!U4j~ڋX PXB5b(s]5B3r~j@>i+~ "X(C?_|sL'Lm]{7QO#dLfhot2 sz3z;DA/AܣGk4dů_K˗QrGEEf6"TElsYFjsE=!W;͇[:x[4x~!uI3gcwW/L ++T̥(N3Mn7fpeNI | ۾5_٨{]5.ڠ-hڙÒ@e,+وa5/뒙 D!?to:$Co Qs;k.!BX/U&T!%GT"/@{2DݣȰ!=iтK5`Y2WѫD3+8^_mi45"bMΝ@$*&Ιmm95)VXEӦMs DLyyyzܸqwQqq1A?>66VE~i]iڙ`͛oSk/<+1Y2(;˝Es C:ϚQLxhA~5;}䫽y֌912r*J/Z0W_ \g?q|Uvռ$m^-蛲=x L<1}cع+@_֐ ʼp74e;(?W D(6F#&'DDBϙX=,) D0G ֤kK&j+KLJ4NvӀ> 4YXG@ٳZ)st D $%1EWYiQ.ȩS?VoK[n)S̙3(bQ}2FN\]vZYjJCMXZnMuT~ܹoҥ￯C=DGP>81yW5_<իW;}'HաCsXDO>2܃? r#5UܲG`D:_<O&:+_{_WCbX9|}"˖sX=0Еe\oۨƜYm%}hsf, .+.̡THf="KоRm A;a?JsjKӟ@dΝZQs޵kK \R#FАC\bh`Ȑ!_;6fPƖSʞ~iGŋ;h `ut`ä X9؜ a } ҠAt_O<54W^y7p;O޲Uz D|5tM[o8ޯHKzX(Yٹmc ȰF ~}:=%a-`-4e2)fRx#g뽮u+h4b٫'ݛJJJh}\%uNظ9|8q"]rƎKiiitq0`Vړ&M ?Æ D@}/nݺ$DiժU_/ZVBفudÆ zV\ի1` [lڵkhcU%ͪp4Wch?Wډ37*N\_fc:EhC ++q((۷o/B%/ 8ݺ~ɟt[qͮQ:vLGe@nM%E}RzRm43ǃvf].C}5)No5n*p;8BV/tn9P?-*+pJWO>0G>yƻYW2ӷwOsGS[3pz ;2Cg ?X XxòUǎ6A}ڱcrh9&OWKqJu:n:s`Ԋs/'g'9uLel*qÉ"b6b9VC3W@mxV.05}F|`*D,#DؚxڬZogl`]t mLYje8튎o6 DO6y+$LFc.4mͥ,?#W+a@+15:?O+v2eCdA= i\ w.q4__2NOϬueF5Y=:tQt㉇T;cE]32;6rH Y_%=  *|3iO3eoXK MdD@dg(}ox>4 ʡU,!. ⰰ… )YuI'{RSSu5Q{t]N5aܟ'ehL!ODAFf|PoVP: p;ApBHӦMa-j YD3}, CǍߦ"&} Ni J%b:3gU+VI/3f"X"NT_@$Z-t^s|Ꮳ2XzNx9C!]+30LixveМY69WC܎s4Wc`=;5rUh: Kl7n6H/]<mj/՘{DQ$[D)-+1mv﨑Jʼ!)umH6Fro1h> ]ݻ}_Zbz]RYH[)PuP @Ìi3,U&'T?o.@+ l A~Gn `d_^k3,є(52/WLS ,"|eE K3U4/rO$М%P@B8^=Sy QtP ϓW_~5 D"T9B9((# mPlyD~AәE|,0=WPEv"b?wc7:EӃXvuXAYLz6ESmQl@/u%ҹ(&:|1?SMs'^^@)"ss٬:VE/(b/iK̢+PysȺԩS:@B_tI٭Yƾ-puC!3]XdPzP@߿.@?3 g 2ƳtR=k(Ǹ@S:|p D2mxWUeڐe'7 d%90cANq ),_i`l]|2],?͙zY7da=J+[RZB{WJlW}̸߅5}iȥ 󄨱 ɴd*"1k+9ZklGR; p`3AFzh8A'D6@p Vidh* ji:Xyʏ+G=Ү5'NRZj p0Dh0II_@ptQsclL?_mml| "DlrhػV"'N=e{Tx IGrD`8t^N(1AѣGueKZ@4 gPPf\C3׬^S u`Ô+ b/>.^`K/?l޴Y?k,@e.p%і[_@Gtٲ03󔗝\1lW_yI[JZ}qS0u [p&f]/z}80qtzu:y@C;{i<=u|vhBS)"2&\Gbq4"bM/lxea<-9a=ϯ~?g4 e {5 9vR8"&^KVӒu/]xg 9s ‘jolEO? zkطڼ4s.j e . b-k( r߽8xD2~~Y/- `l@XB·zW"ya}Z?ud\#:N{uzj*9=6bo 8Z.> ǘeLl~x'f{3bwjJEyYfy2ۻjǼI]"1:F̶MrzOE{}L]JӼgZq޴ "@6 ͪH%O ⍒ǟGc}WD"U4G՝)I"." hW"uhjϪPif8|v|ip EZ=$7g}*5u"8pq՝܍zO#x6]G_8e> e2ޘp9C5xW5}á16fn3'ϸ#P\YWy8‰O .xA?ֲPf&MwE`|pXJj 8NWijD\r"nޘ˝5/gN\lܷy|Af9A ۷iS&U7_"&UKqαf]F;wh/^;IWcY16lB6Tr`LJ /pu|<.s'3"ߒGSǟ@GA8q]+}/\>y~PRhXi}8';pۤ{q ͚hs?Dx|&Hp:Ǝbp|UGI*3cY sax3&{36<CS2PlL^>T-eKe(&(0dx ]'}LTc(_2y's8B;x@E}_x>#}uRt_2ZT|^rϝ3k=ܳ?SQ :aCuߧzR9x j\hgϱrR'QjY=Vy䑇4:yc|8zki u|\쏟9so֙d J؍ MiL%D=qV%JLSʳ DfhTYI"2vvViqzHec:!.Vk@xvꊾ/2әWقzsjp2ӀNkhMmF D1u/?Ӑqht]ߏ]m4T)l" 6L/lSi㚝Cjo:^C]osŋ)cu}םw8zɕm _+ k?)bc C3GD9/;V~LxUQ02O?V;sgOwiRGZXvޭ}ŌK3#*22%+ ]yB4cǎ⩮k+  bmFź7-D@F}Ӈ q eؿi E N"p9zv(XA՞5+s]g@=x59;.޹ O>g>-@!wq]me8hKJc'pudۚ&hcq[֥v$vk(GmNm׎rLOn"&UK٬zy*Z8pb+Ȃڽ9"b&<hջ ,n}^%yP 12,[ /5 *(=!.^Da"\`0ք20$,̙5GoDZDPf3ǰpjȍ~u@]b !(~}{ jF u?emZ!=o>dA qvfr7}pho|&=˼WW/4 \y 2,I >;& ?Yڟ2S.V^ F R*,($,\tΟ;#H*G;==op* ,-29}FN52^V"MZ}s"H9V+7 //m뫍"&d9{wQWv?C#"uPݒ82J Ry+Eg8/ec8jnruW}aő=^g݇ fNe`\gQ/BE$ Dz覎~JkVk<7g4a 2QrP/YYA}םԡڡ0P:1TaQK]u%sx7" ͦou jơ=%3 0vLn%CczALqL ;p\a;X۱\]!O3rZAק" gQ{s[ a"g%84C9Ęz*]z22"}֝C3 M7Ѿh[6}]_R}$xݚuN:]_:)XdG@NАPc/[Mp<bA~K`-oH >hkx?8:c^h1/F;>vc܈ӳtR〜;\l, Z ꢎ DL t@u!?:}Y l۬~_zy5MȬᕔ-"}zl=O"V-w,@O4^^zJ7^~}PKBں"l"f4zqG_psC `qDXfǏB%WJ2S<%bbmgk|8;wlerR Qn‡]i{"DlM@? T~\+odgT$o\ĄDxV9We.D2-"f<wY3f龑2e2)S5>v-^8N3-Mcdpv/lqhδ\p0Xd`irBo8ݝĶoDMF P[ux[)SX!(sj*)a)ۡ>qDHϸIP:qgJAkefQϤ{3 ˌۙ4dv, `,;sS a"~"hK3"V2GbJ5uzYDLj˖,a0; b.8( b&g`˝Y<67. D{jltl mռ |]ƼSHmd/ qP͛Re "@cRfUѹkd:VY_{]@ll D`Ad,A R]=,\~aǒb,G [p̴h"M M"ӚeX3k.B`GG(yf={8ry, a,XBZRHJKJ5hgr5Yyq;b mY, "ۊ0;FH"Dl$Z©,`\`"%ON%P׀OA? p}a4aMLQP(2&7x0ǀ\zQze42Ϧ<X c\Yzf4 ߱"H]Mٔ[+ж⅋66"nc%PrdYplrss&֖Dp47JAδEqQ34܃O@TaO鮮/cogcŞ"&YiK8zǗv8j~41p:8rxKf_=zӮq;QC "@4O?iw*$ D/#8% eiS&{v5ʁQ(?tD8LŊv|.曯j# 7U<1oN娇)܍5c[: O?pvKfLA/Kc;c7噩D!e8|r_4&p)"&T-[WGw䝻v6HSW~_ӑ?SO>*Ӱ > r7z=iPcXƜY4).uiN)ncgX׀O,asHjDA2@"#ͪN٫]#tԏclEy ꨹cMUn1k%կ DXyAboG\;#A}}ߵx(G tK :0.q>UyiEXg=Î櫯D qF$`XI="No@06@ؗ,^@}Sq̮ "gto|MDB-stgR9}K *ܡUpdLo#2x&ixD8f8^Kwh^X qm.AU_8 ,5wnqK[nl$ OyC)\RA@7w \߯YBYM~&{N=s* VJO?ӂI꺈{{m8OؔکC;G X/\5&2.ͬ 2u=8Be%jG&5)N^//ZD4bݠ=x3 |#y3v|t| `|@N΀<dtB@G[%vYxWVH37R^NvjC3(6iMɛX3ąAp:Ďd {ZvƍXX+ %rӵVQP hs@WVҟ7"S"D4s椲(>z@ޙ,M<tܕޏЫGqZ32>>J  F[?@"pyraA!b1NE F}EƛRs |k1NđN<2<3@cTyWqoEwmOlD_xv8?>} D^G}<]lPE;\#FR1\< (C}C{Ў1N4FcMgW$xqlmas}> Ot5^la\>kGo3sv{oAC "@$ S3H$/ b]bimk}^FQ̫(3gYH+Ų L\0ˬK3(t}$Xk;> >ءܤ{Z ;5paz3o.aNs`􍸴 4Dp#" AE1\XqWtЄC.+Xڡljgh$'X.VYL\̴$  ھ+.WA6A)|;xUB;Y`!7)OA>VW'@D tȌY3kWphєRadLSQxix =W_APfWe\@ۙ R7{] #/@U; 4'\;k4A _nc]a4eqɋu|n{˔'}C _ "@D t 2}t:x;z W\>}84Mdd$eeeoA/J]v_~^y6l?^^QQ=ڢ/\PY+͝;'hz?G 6xT5 lͦTGt`'iq5 E[?@?5S\7|ӡA۶mkvUf@=S^^NIIKH/oݺ"(߼y3>|X!v ʑ9^Zs=Q4O8Qši&E)@i8FADCղ\\YF}<"C @$11LB+Vb{S~~> ~`/@cСyܸq4o< ۶m^_3UAKR@K"֣MY36e>ś"Hri4ͪ΀ȵ+H"/XKNX_H0aQ7\JC}+>d3]+M@ͦ""~"4s]⼨k4wkj߾QXX H cǎyTƕ4oti$FHHL>]?S?`+ [DNGV]vi:ϛpDp4tԉxr_#0;{ u?c]~+~~~]}Gȫh6W?7fǏv0y( A v`ZA=sѾ]Z~G4oݻ~qL41u+ݟ}X1h֛hEi "@2vXZ6mp͟W+LTx@K@<ՑV]eH[jt=w;b:bEYz Ӝ?wi[Zh[XȨCu{dv(sԉZuLSH]4q4B}'@D .Owvqi% DBet@[w.;{v{a1H]e"VV}"hu 7"(ۻc=ƌ_zQ#?+M :y.ﭼf'iS&P~S̮+M!O`д5}HSW.ŸHS <<":-2XyoQ{P7{.2eTLJqU8.gq]k&aX&A4#Yi?u?# uJ/*:cq;S;0͆ ݟ"~"MVM{9"bzNz"f'SSR8ګ/kkBC'o?m"5)Σ*`ƝtjZr`5kP<|h:`ҤIc&t[Wڸq#m߾]W3gxnnt;9>g0kc\cgNǡq]^ Wi Qذ^h D*)nA~!c˖.s D,9ƌ:ggQ†Zh1g"1`{:w;we׮]s3&W=u.2lpK?ٳg2g =k߾}5ƅ>JJuG^zA!qM  1&⮝9>}~>A6,3Xo>C]nV8ec)#1@ Ǚ1v%"~w[S#ycuS<RzJ'ESLdu_VF2m/̟VY_mL@5aMP"&Or8 ]]Dح:;fڣG S!RSSu9!`*h JO}8P;"G}/flo?g+L>|1/㱛ߋ y< k^c юYh^{` Opr9vD~xA4a:ww5e6b.jo8K6:-|{8.2~Nh+3g;2lmqkr7" j `if⤉$%Ҳe4uT1bK HPiij7 b twKfϵnT@}gֺb"hgqVݻӢEt:5_WYݷ[ pͼXsΙwDծ];@ɲ5Kf-5ڳ[|yS;Of@#g>GW_, 8LaC(mԧ|B[h~vǎu rc%'GWq>n9N:I_-hpyؒI;C]8!{ds|jL9^0D\,h L3I{=΁jGogR]t\-Ͱ̺~1 ٷ"`\1rDxD-> PXT3qre=fB+W8ai@&iePr_獏D_zF .>PO'챕i:7Ϣ>32k;l-Bjcqs!cyGY.\,O\s;7s{uA $?v$/"'pc"hR`)>66DײlT8{)@L!<$-^8_}>=|}Jņsl5ڂ+ͯobcc)&:FNK K{)a< {\k֬.o~eS(+륢"~"]HGY򱁲o+r-~ƟL}נkA{2OlRS4"D<~kѣE]t4'$< iX']kLD"")*(cGsgkd8*{Ӆ |!`m_ L뒕6pٟL1HRbMGtgM>K6Ҿ% j Ó16橙P*E[JtNm(bS&:s W"ڹ&˶m: F:;y⤦Qv`=;KC[Y@U9w:6ד{>GēwXzڮ)ճ;ך,"D|B.^EYd~M5t G*]]/ v@JLHhSǩeЀy 9cƗ,"8jګ2T?#޾nJ=~誁ȝwqJE 1Mng>J=sϬ4QnJw6d <>߸w'pW}Wk bҘHձ*r ]X}65)vmߥ"G)=5NjoxNӴWԐ _^TvYEv(喿h L4{c1fpLׅu" 5hbSE_~p,`Gmœ1O=sN4{'mc[ "@֏%OЁ}dW Qjb*:yJ]<,"Ud͔E889 uk+34r$z Dp0Vqߪ_~"_P/%zrN9Bð!h!ٱC[Ǡ2|ϭ9ٟcow}ugKv(@Dm RL Eӑz~ǶدV. /5͚9K[28  s~Z PΖLD`Ok>J D6ߠ`En ˌ6"S'O ^y״.X p_Y?/p D%aq|̤A}, ~ +ǏS5k cE@kڔ4o m 24{u-5'E@$Oجzy*Z#NDLVM62[D gVFh ػg. OXΙ3{"2E]X~ W"\fm0(C\VU({*(|x-ZS&Τꨶs#-+#x!vfڥw\g fD[D]<*@PfL>Ay zb.쉂n)u RǛP+gTaWBvGC9+׹Bu.?34[Q@e`Su[3i,Gp mA,3yaOԫ? `/-EI8"^('n\ZRJ[8X˗.7+>a=3!/6V^b bd,@Dd-YD@4U#@Dm {Dpꅣٺ1^I"."D· #rAfJJ "MUED-@@W.;2]ak 6s ⚏ryMpƚ@eɭA}ꍹ{.<5}]cq۶1ו0xũ&zDoK7 wٳ*Ǚz*ۻOq=w\.ޡఴ UMg`pS97gVp" GmQ9ά;c7TP{ʼn Rwg}p}Ř0'P18Ps-i"D$[%XDڕktU~:eelpՕgUV"p{1W$'%q`rP p#8=|wEJoP} ޵[$K+7^E;ĸa(Ceh Ǎ:',G6ǀv A `xϨ1H|"MU _kƖ zT~#9>NTU{C+q9siMR-A=dĹAS4 ӚXXA;k.YXja^hؚ`qGiHz;vz&2A* GZD:w7>g1|4ŴBE2EHk)@ЁC?T[C] !(weKS"P2ls #"̋3 2 gz eeeL`|; l|DFVDoK7 T4SغvJQQQQ#r93)!I"P&hصs9Z+u oNuDLXX/XVX)Q?~C|M ,QyytPjcTg\%W[ P~n>*2>䩗fY^j6 "@@D8-aC`@k W{Dp"{;8. 4?9n Pz! h6ʸʐ}ՠ ~]\45'[PL^WYj '흵clVujDbޟد:ۏ&i[􄯦 t-[){S6fT\TL/|ܶmn8m] ݆f9Z ,66ߴ߶o۴m| gN "n fkVҟH$pi,.Mp*?jm_ݖn~#;{\ͮ:SA&Vo%`=r|W"  \?"E[ԉSt5Gzw^7^p 7ҽO__^I=;Nwuv"xzO71 H] 8d[ t"*kxV=y$&ҩj썩t=3B1I:?8ǿ~G=Fx6nw v6u\MIӃS܂6>: ή0_i61*x+{D*dz D5}i@X]x[k?M){s6]v***jXD-nGmz'j(|W?V+`wtңogG6>P?>O=8}]2_L b-CLPܜ8MH{RI@E[P D.gә3gԩSD~E-[mҷ.8{ t|0 "çАIQU`0yk,=]͏^Aw_Y6dr5MdwJXԪNH][ﺆR-"Dl8[̉'6gm?J\fm$I{:]}ӭ(w4U="HR|ھm;ݳV޿w?ڹΟ?_=ާ?@&F'up|n^s8 'f*ތ#neG$^L]۳Ν=mT"^6DΜ>Cǫ;'ӧOJAm:?#_?QS;_v2.z r|kݦU'D"T.])**齥я+iA81{R\4}Zvv?IH4W];Ĵ51g}{W\i,"<?@C} "@6 d?"[l.Ν3dyH fkXYYсO_V}_ ""AS?]㻗]ryHˠ'Nz'#=왳ta}k$l~EN\Ϫu&ܱMK*,,Y6૨HFu"bcs.+//4ݯ3e`@z|@H]'vi b"_&WSBȢ˗/"w 7hoq]Zq.\.$dSZRJ9tZZ[]8-[Aܹs נk.MAŋA7Q@06mO3˚PbĻ ڡ=4di->?`;E<~Da0W{"DDw"rVtP TVRF?X;kzjJMpe/#A*c j:і-޽{);;[&b ؾC?ykVG332S/)ۣ?v$g-\QmcM%KcmÇSRb~gk 19ZqT/3ʐ !v  bTQ,.*vRzJc Y DpYڷokǡ?y$EEFi䉓)lyEGEx6&HaK/t<2i&"=5] .i THPV?}ttDYJ[.0vaSTTy7gg͜77"u/#"@.`D"-aidI]Lp `LΞK#t^pͺ΀+^,$YYX;x˲ LRPP@-"b\c:va 0/pP&qƧXEjJz|@8^Iǔ#j=|p84`K7xZd5٪f g.厜d\,z]V焸m]1+x+HOY3f``yGK)XZY^as=l 7v7X-"&M8HNJ gNy1džk͛=jXDevC2eBjK@Uz^uo: @E*uY D-ZË*6" 626[6fZ; c遯y"c`Mܞi3|bke%<'/7Ú鍪/n6̧Iәߴq[\iˈ3ewW%9,S6O~DCs)C}{ёCGI?K#5V1V_}W ?pl []ڈj-WV=GU9ׇ="l"2lcGze f 94FAbb zݢ"TifxW;U`?S]Խ1mRd l S3*^A7em3'ϸ{7m߾]i\# @v:ёg;P `\#Ƭ r >cퟏ ;;vl1ċ1ƖJÛr|W@KC"Dl@k5s5F=-5MH/(wjU+Wi[XgAϏ)8tbм ]n+ަ]c;}@ĝT2OՕ;8)R; ] .K?TH%=)U{XŒ;Ϫ/\mvW#pY䉋wAC4&̙5G{E<Ī5h%+_ 4y ]!s45FZAqb&P{ y1#"ހ+@D:Ż QQTOILqWԁbrGƚ9}p :?w2\+xc(3#CiaVdpӎdGhw` :tYh20]Û[6w+$mVD5~"pbvQJؐ@iǶ fr|c&V!!se˵T8LCęqM @pD62Q՚<"` q>#';G!vC- 2"|r;@fla}W,"#@D7,͜?s^GU"Px0СCx' 11,!K fRʼ r5. c,\c"22 j?\C>(MYfm@An2l ={ZsH {P#5V1S iHpM_Dx "M@4>E!9+@pАu D9긬lCyM$ K3D\xӗ"H ;48y"%$&Mج2RB$`=ͪظ4ذkSk٬* a"~"lta|A93䫗RNnS/_2m9|pشYuѥVC}Iw.:hrJJIIqGFY}W]P_ R9tPX37|@dƌԥKª3S߾}}l۶֯7t%q4tPlEΝKnHƕ.pR_D"0z:۩ȏt D}]ƜO`o3,/>3X P^ȠM6QDDD а`Zf4A?\?C;3mۖpL^uG8;e}J@4iu]W܃wkҸ*Xzj)#ԑtD>VqD_l?"<~{wUOL6[-O8"_&$WK3{? ^x B|1fQϑ u~i]zAδ^`cFzǝCHh`g4QLxD?e'(b ꫽"H s2^': esLL ?@'뭷(11/hI'Nm]֭[G.99Y}Ϟ=5mڴ TW‰Ws5w2DNs5;K]{RFO@6PIII-]vl!i1CEU9#5FQм ?ggZ-ݛ P <KB]C93gj6x%aG=Cڱc~Z np&MEpggH˙#Gg999t=k5D$kQGYf346^yA+1L^3`27c&߭?+li@9 z]@GqB22i]:Z`7N r-84 dQQQ:b߿_Áx44Ŏ_\hp& gd  8!gyFz̙'>ApGZn|aܸ&2aYZҠ4C5x-#1\l t@>}WESAD"G-" @2?Ǝszk2gs9ܹs' >\s\|Z]R38.".h[]s}(q+/LPV SN ݼY?++Kuѷ5uOv}Lsz|AAA5b$%%ǢX9L ]֘8D~6w%Li=", 6T[B豣iԥ[JOK՞Hli1TfϞ#" o߾r !#tZD*zJQt Y0wyGC[-"xܣGm@?Vv/7(C`}رc:N czіAUH7n%(+-XyЮSNQM baֱ6mɺG$F DˏHRbؾF^hq-="}"vPp>le%P0sP0s`\*Pܣ`ݯ{n c=2[y$´M(C;h\LJ:L cu5>r } |PGe\H>\ 笝)k\ H: @DHEතE[kel&Ҝs(haӌ#p{MKEC'^NRrwGt4#"nfk5X3j{Yti:uT|T,MN`ŋz# lP)z F$Xx[WLN[QD".+K3/@D:4:GqdD)I$% w4"Dlrh/[ҩ'J^J:X 1~Q8_-9K/v__ vV[[n#Ddٚl4SHEK1{-Ғr@$5%աJKJzmOCӊAٛꫪ4|M'OV=e{(tY]2n /T^^̹(&:F<9JurLJהx7!   8fBT+Е Wk?M){SO"b:UNnX`h9*3ۣ-qB8d{ܳC9`nUeݻm;SXrJKSKYr}蟗?i F9Mk. 9!msw QnDߕ&bs뫂au<ӧOSR|߻~'@֭UQ~U^p_HfF2(TPP/ k%!Ktiit:Yev$dhZXH5x@Nkzd]@ @ |)Qnwqo "@6 =""Pee1sisftz+\<,[L/`YU\V[,hϱ9"h U4wڭm`Ggrx-|E$@D," D g{!;8pnJvUroC!bO0a"H iHE!}SUGh!ĉt∾e="lol&[[D""eTe*c$@S@ʏH1]hy(Rk$@Dm 3/p,՚7$++Uk:{Ga% w)K'?"Dl@# 2wl/^쵢0x~ԨQԧO#"" Kܹs֓ #3O)/:7l{V  bE%Qnsrs7|.qdԩSAe8⊺U;d׮]ԱcG >9-osNGHJ@6b㝬 Dء,"eA\ZDL R\\-} >\+g}V3=z裏tbo8hW}N@yҥyfѣG_ DfΜ 0@wKv:ͪlol&[oVu483HXD(ڶm ﹌ kgNc b!\[u]BW(`%)% w/E*uV"u+і#mڼYM`(XιZ =e)`'@DHƚXCeܝwI_~%u҅vM?ǦR2 }Qm!0aR4cZDnZDM9<aÆQff>JyiPK&8:?jPc3u'""> 'vHw{D}lOS6O~Dx "}HzF:Ƹqq0h mY~n IΛ>n˖߭?E* Şl D*?O"ҲU>$ w)KOqR{9  1hcTYUwe@Rׁ;] _e&@D:tOQA vΜ=S#>sΜ9C$c/?d}-=FvW pWR  bgբ-E ve f 6љgg@vItСZGs4Xl@ ]ƗYYoYUUU'|Z+;{bc(lEX4JvPA~%%&ϗ1Zflo@l&[oV:V"._ݻvSZJ!3 0 g}$gzZ#AQ6B)/y ?wۀz 6-t_nQmNa{F$XI UW?#@te|2&m;++fSn-Ja(&*F/@iyMJOk{ٍyyt%ژQjq(Wxzj\I'NpKMItf͘U 0h!egckVuJJJrst5lǎ<˖;w(3DDSr$=u_Wep^34E'Ϫ: Hإ+@DH9qJwҞ=BNүzWyAL))TVZBYTd޴hʗ]Z?oV,^8."gG+jcMbVn-"xYvS]n0mg@ZD\/]^-> sϥsr|W]P_ D}HUe=r6$Px^ݱAҕEdْe{DxR  K`S,dX0hHZjwDP ql)6Xj6mc[(CA=1a R_@.]"Dl<͏/͜?s-NU{K"€KaFP`i&m%ټie۶Sl}pB:tz(AKF~V(#hoYD?,ŘM]Gؿo?͝3WiZ(<`Lu>p i1ˬbc5_ث2,wIr-9+@tC "@cj׮^.e>Z(놳ͪ(HA޳g>tXkׯ{dVڰ| tp5fʹF*5`ݼ3kux ܪ\@?S6@4Qp9ۻjc?rӽ+JjJ@ihiD"YdW ;[ЮGsO5극}_r|W  bLsS6¯H'@Dm 1ںx$ wx "~"G0ѣNsiYxoZXx$]oh")Ϫlol&[Kz8]Ȱo- g]{VFӧOw=хXvu/tꪳaslpuF Kqb^<?R^b4d]"Dxr>BgOu ~Dmv)--> Θ6[W<1MWLdbøeF*ԫΩǎʣ儍ྪBߛe$nC*ޗ"H;4/ ߅׮Sfz& ANp puIJ(0z X[`g\lmZ >F"1([vcȈVp ?g} Qzp}fh~ec U q-+ x Dڲ9:4Cz&'! DnX(1S,ܹle X!y]VnϹ3Wpf{8]_(0 mLG4% wxnzDx "ZC3,tu;l`E{$WfPf?1<jpf,X3 bFuD`@Q뢴4p&owXx.Ce- 4+p|x1a*Wܛeͪlol&6Lձ*:w꜎>X#k]ԟ@d}z]0=gZD,K'$dI-]pvW\՛F/Z 46oLw&[epAD\7 ijXD YW"u {5 QuE:;wNWE$\Nx3G{@;>_ނN9Ҡځ>N0fh\F{vdj ̕Ww݆T-/"Dl@X37t*8%Pq:ƫ6Dͪ\,ah=}tCv)}y)w&J,s*ǫҌ[p%@D&VG$p7z"&+]9+5+@Dm {DxOOHK@/ a"H [DƍGBѪիjU4o<8Zu'ЧeOΨp凴[wcif,h .i/@D3gPr̚5'7*++E͉wDOYO >L;cL98D]\B99΁67x TTqqqxbYk)HhhxDVhͰ,hFfպ]ZDBk}JJJgRu^{fΜxvcƌAm۶&'#7~֮vLp׮_ajG9nr|{*ʗ"~p @4, ed;]y7k)@~,oRRRHj'gg&lR*+)wE7 ހ"2lM4Kb'@ X f̘ܹs5Y$20~Pp2Y.3y5]V{w9$x!M7F[AL@GjaK,ɩ0Zd ]6ho{u(īsG}iΜ9Sh A@>h׮^n͟?~m}:/_qDD7o \x+34D!,b gkµ\?c m#:K+Vw}W\UeGY=eh%?wθ];:h:B]:k[0ߣ{G1?A%*/8KMbbeCʣ*d́&? yG7R[/o-"M KW ? "swÿE"@DD RBnV E2"D5ElE,29 @D-%TY9 s"DloOnʝ*E;3m+m'Sœ4f~.Fm/D)9s@[W y:uv6dAlapyWVrp֌=gOz[g}B[>(#2j bKYjxm+ݎ)5ڴ>JmUVTw]'WQΦ"9+}+m*"XIp|n2i?:Ӽ9e?\ْaCP&hYe@ h`?vqeGV-_[v|}֪F4lVeܳ(}Z᳂gVeJ|O~}vnkr@~aXzC#k\BO>qQ/1~[ `u9}rLuםa Yd7qzﮡ^2ҏ(42DRfe>UY(:Ӓ% b-ySg+PЦRhg=riF_#l6@XL }p>23F6bN7jy 'v6vRdRD{%^//x2 "@@ WZ_.N nc?m 1ZiNW &2jz:L4c"$%4@ 4vktPj̗|_絫l/ " &/͗6GD@/m]9:r@}q  Xw@|mߺE+˖)Y5,"UUTX孄PLhekNޔs=;eKh坽1CuҰs^d6ZY)ukV֢"ݏ+Y`3mXhdg+Uh0e HkLbRΖnP5޸tA]  =0%HYn=˨1>,Ce/]J ӳG7ei[s4zݷQÝw:1j 7f$͛SLUȒOǗKY ˼GOo6ŗl׿de58u㷅-,#\?6*R[`^OqmT6xFGzX"PnyfڻgR j&_ըKcrtbyܫkڱMmQ[V]v}lݞewV_/5EykUa"Xhv;uƛ΢ecΩŋSu^3ߣl¸ю{%ǫe|LMzxBg]ohO$f}dS!g XCgcQlw5vx(xkwCD uOǴb M#ڹm'_x|wDPKOaÔ*qꇿ#|o;?s|\OvZf|w}(&ġXD玮@JxQ:xp6A] !Gs{] OِcjHHc "@dudzY"ŷ;E&Ao.H6;=JAqO-5Lot+!} ji* QxQ;xSYjEg~k{Z3`8EbyG̪hyLϧa3H"jţpĸt߮j>#REhoVW(WpbP(J%$˼:$n[®&rؿ. 냛>AJmYacVkdMrdwīP(@j%8C F ``nLV7x/rvAPi.޹9 $ z*3]'*_xiZP.V*ɛ%[󵹄}mxfQ(J U?`('*1P/4$oep^%`Bs  *rM,TyI&9Op޻pdīP(@%L\8@-⁉⮔P솖{Fa*|X}tҞqw ˕G$lW𷲳2Y{|[]"[("2LǩD%gmFdE7 *)DBJ`%0x`^Z^4M>Z=vۭN !kp-l!\&h w/7ӻJ%?cuP]=uI۠N,_<wm;mm,gQ2" ᗋOP(L%3qDٙ I0ZwfL刕/o$!{$-kQ(Փ-C\_σhB& ^D0VH'6<N$E PK&X3-X&&*khP'C `b!P(J \fނ]59hy 8M^n(J%@ K`r0E P(J%LDk`J%@ P &,C P(J%0=0qA]ڽJji;āgZuN%@ P(P f&nnURwGAsЁD+KY;. oS,r%"_JҹUhp HrER@ P(T%L%wڣ=p>]agᄤ0{5[/$ z\Bɇzz$bRR$q?M%Q(J`I%|D$L n}[!UAWdpN&`\b _ђ^{j7{^ l|E`yb|0c`@ P(L/xD X 8v6K`IWfmG;@$n,6 A -Hc-rWt*õA6{L@P3a;&C$^!L3hr@91cwE[:H R^;aֽf>U_=H.!`Vsha?5S$Hlm:?> ƔMPnM|W} ,YE;̹>:Q`d20Z?~J(pff(J%|%'C诚:_2HſX/I]z=OlfDa:e{6,p *wdŸFP!8t^W@]A"]N 0aBwcV9!α{wt@|NV}`7 OZ)7Dc2rbLapWNF.Z#X8p X1@UxLX}䁤R&(n'?+@> / A~.,m!O菺 ` HC GӴl rr>Na⯀ oI]Z(m-} k.(>&+єSI:nΩ>[Zs_k?X@OwVe+C0$^mo{jXpGZ)W`qQU3as2A~P=0JEjTZ-F J%X% 1]姬RZ}ٓ-Y+O,OIe&1:CTacȁ|-`&@; I'D !/eOfih[m_wZRKzG37mu;hOLQV`oy lh# x ߽2;QoȱOW +V[&UA&f&s%s?7`ksP~T-__EHwOe-2+Y1b&:nܶkDպoui& ]yi^A 38 X`'\0fl;K6 ?'I4Wi|;Q+K?&`&-<[':@jyS\=ցeuG-mʕ-0gܯh3" Ej+?)˷& S .jϥL6럤^9Ayǂ' ͰbZڳ>`ǾP(@3x*H@֏ RT=TOr垄s3Lg$? c&= I@aE@O.0A4 M/A{zy~k>A]r}uP ɉ0J+TUsa4u$J$m$AڟPW,nȐ_"O45`&zwldh%16, J]Ֆ(PCaC `$_UƫMfs"HgͽӲߴR8J' @A@ Gdy Z>CMC@' εN~H~׷|b5^\&yp ԙ( ;i*ʇ^9eW_sLf/S0@!M BKpU"A[jE7!* D.0g7@Ѳiůj(g %՟nneC81[0A84ڞ +:C 1"L*7w,;J(59C0$ U  7.aɑʶ mm"HgB:3+rYڗ xp$^[n A~3.cAK|/Vm_?-/$ J%0 1*k,}>C9)_TBt&f`0$. E $D]z I؜e&x'|+q 8 g7@7`IH@EmyN}?:,6" + +:$8$aNľ*6w '޽t$/I'n䪶]* 9v@!sOW LLAO⃚V[{g?o0aDC xZLMrtB Ѓ>W`[+`/^- >?(K&lڿɢ!ec Pgp\|^7Mz jʛU1|˖.*aA dij_ZYTzP! ?} X6F#%J\`Dؓ 2 {iڟα $ 0"W"A1@u:wR&zVں4{IVI&MH!dt-`2?.fW d|gFa(4f cxb 2v30'%Q\3ץ.4[c0! Npq~G A|CԖrj!.fU6Ƕ aS=U gB\wZj{7Hh$'pFlU̾[ZṖr7}WzW Q޷{/׾LPfŽkjܿΉRQU1;uk|T ~Ӯo66N U3w!"y0aXҾ/0lBhxzhIgp ;u&.˙CЊX(o2kLf3:iú^*ev2SՙFQl(@ i?xq33A-R!3JU7$.6H g>OΉ0bwS!?Q>+#YތmsWt2mfߪsU{z7 `G~m9fSmK"`Bsrn3 xx7 Z0qG~<|/{4Nɠ:E~ĕHX%@ K >T/rzbN@ )w_\_Z=t&B -mI-l(AH z#4a&@[6~E*$@(ist @!@N7ZuJ_{X0TI-~V[t VdD0SlgV3jH$/].ޥ6Ιo\VGiV[X=S{P tނXLH" 0Az4:q_y.!Wp C8y> V 9 T113Q}CB1[<-`(Q/swU 4Z ST>3At hUWmy"h͢H^NlS bg&F8$/_ -Q fFZ~BV%?`d̟ 0 63mus3jY=cdjWdj)e.lp`X*ouək_ ͐;li3KV 64̘ vKbHLb3f" g`6\{^/U|k?S{S&3BEQ0aRY_̿^Cwc}X/İ^ח|2_d yk{_u5,+ b1 ,w *uPG7ͼ­jq@4Bg>i0qmq^z}q<1c`c 7kApi_8 K!3Is`2L[X/bO8Nz8c*H"m*k*j},_7eku`4A%gP[ w־)]HXwZw-):܆ a/ UcGTwO$G[)2ͦX%@ ._fVk!/AE,gHbٱlh!ݤGEd 0IJJ~S<[kÒcd̮ݒDcy}G]۷MՖ چ=1r=js}G탿r}*緕̶y&q&bL z IԾm2G10יv`p&b,x1X53f!wb⾒WsVa[8J{-8pA6H=(}\՞jS3-{lN6;FwfL,PcP(J ~#>t&\A8-} .pݷ7Arrߔ&5HNp-A[Z]M0id8p 14cĴ@ChfvmA?< JOӠ8< J$]_σ433| R#~j(*sIL6(J%@ 5Vk#Q.ml;tgWW2,!4mjZ/pʃÉ\{`@ P(Ֆ@6}^iOe?V+kLG#m0$F؂O|z*7TK4.Iވ*!(,@ P(@,  #ѣJ͝V{BkR :<@"\cXоACmJi/fL Gl^@ P(%0`9] g;RƒILpgP(J%H dP(J%@ D P(J%@ U 3RaJ%@ E>`mEC/=E=8Np 1v;`ە 8p `?Q8p 1cǀf&I 1c8@03"I48p !``O'h48p `² EcLp 1c1LLId2HH!1c73j^ I *#X,^O你B KX՗έ=Ig̠Q8p 1ϯAۆNxu%'M?M,96]Dy1c aH|y6`IK;s t¹6Z~mp*OcӷI8Po8p 1&,ˤHigᴗU1Tʌfۋv~~mp163} (+8&`„UpD6D.0Nv 2|͐߂wc{_"ed>b c`f"]/Y' cˁ/.l`/5r&g>ܗU7Iډ#>G(s9%ċaa82MVd}K>zx6J춱4Ytc}C3q#/ 8f1 C,7*GzeW+}Uunt<ouLQ$6a&L74N xi]M58r_dIxY+Ah&RLD(7ϳ&^—F~ v‰VwVq*]UE{!UՔ{]} `w1O4LhLLx(A0TbaxEfm ڸq.4 ' W9\`"J*L ~Ài& rDܟj~"vV<5f܄D(-MC6 %`#zgrLo4`:Tm'@W[ "1A/ C6koa_zCLPpNX6#2\]Lzqţu3 I+ݧ9v I9\;ǂ04>&1$\iCI%1KsI>9i/aӆL]1L ;Mr'W8-Ob&1 $Hv!Q#_q1'IHt])_Ø!$H H2I'_/W淴Q:0Jh I?d0>(]BП-NF]:Lݖ9A51ɖ_0]߽z.! e|VEvY« 2A8i6J.ƷDL6fsUwͿጐ 0HD0z 108 ~‡1D0'1d,|9W`4)̄A#"p0'Ƙ 7'7'$Dߋ"1AI&K!iORR9h> JJ_Q02lw|.޹R&<':p(dXz}AyRk$;?[+ClpU& ,ɻ6Uf _YlNBpѻcNއp ]?N6f>;Lj>(3Oxv=F; Cl0TO Lf.=(=}ib׎W O_ RBڝjA1)sNLv/˴9MvU!=ʓ>Q9\HSl[,I&8_|/+G٣|P*l`w#W.; `z%9 zvϕ:ذu<;) s!|#] "[ &yאp(PgbJ:b}/VѬ3s+pl S~,:{KzfcW|5 3a;m``:Z;ZoyPl>:OR~0FLM.ɤW%:z_d׷r;~>{+?j:GIQo5w@QZWqxalx4'^׵j |^F+rw#@k&&ES0Ӟ u&54C41QgO+`{T?ΕRz7ګbVP}/޼i/{NVd(@f_[IA 䰧ψeh9V骄o%Гجfٵ~6{˝ oj=ZO02:&)}mp<$`Y&k%veƂ "-E&RF+=Sm/`? kv LpgV4G%L;AE(KKVPlE_AzPtz*i؊K NBPmzҩˀoU%d^S(``\0@ 6W3S\7 1[{.ʎ^?;mbb!ܖ| |wgS/A>\ȟ{R=4=mYf3L@ P,m|{`9? Cr.vkۯ z2/fPlJǵixQ*UZ?7޵FȹP2@ *-O RW L%Wd%A DらƋ*Ue 1+|LL[!]f~*_YC]r pgai63Du,f8{¾s}/+fbL͓{́&vQ-cL8W+ 撾 TjW PJNMp 9U{r}OkKېzuuubչ,]aQ 0a !I. -at]VGS|lLLڙiS4/¦TPiLgwcu[ym GEpl̪Y29:xnAn*Mx@q嶼?L1|y"(`)/BJ ,c xBWg7iMl~L~BL ۀU&VQV;|O@u$U+UXEt&(-ӓri$e{0UdŌlsP;bA$ X|uXb?XI*?Z]( EQGR\تW-SV v\p I힑RU$\#WQU(e5f"i0m3Lg©%0IIou&3A-׿ ۠VPD13Y:ΙJ`& 01Du z:fLuy [&1q# 3YHo9;̄S5V{!t>UThUt1k s?1hw`j^v& Z.e'F`bIl 1d/=$0"L& z@;D9VF[*oO%8ٽ&m-p97S1|@9vg8lLp&s{ص ?S &v!ѻ˯YP;5.HDpX| @0蟪ֿ՗ȷ-wTrx4;'P)qvO A㲵vL[s,%`N ALdުOЂ2H L]b x}s89ll@m$riFx9lZ 103v2ηO=93ȧǸd͑kA[[:J^߹FyURQ+jsg/Y;Q&nUؘ 1M69W@cpU7CNGQU(eߵI 7PrC |8pË!c#lљpqPԙ΄ЌEmn~r.}?7*~[ : ssYuSu}˄Ze C%N JI@ a3X{u z`ĕ ~ZOQd| `2U忹N6W\n4.8 P_!m[ӟwm8z ùڗ0 8@I0H˴P`[QQڻ&LM1T 06y 2 7x k=p6l}mHppv7Pgb*:f: O{ qE|^UT+d8Qi>Ӱt# q)3S 9#zV}(@NJaQf&8 h <NJ 䘜vߗ`&]HcC[SfR8l6ZVkh_3Aa މ, EUߣIעNs0'm'8LC03Ās$s|`̄Gx E)LǦ$a[@)_cVDyN}I. 8IjcFq!3LpdA*~1R ;b&a>}VyzKo9[NONJlDQ^# 0q9YY' f+pE=@^sG~m 4u`&6i"$0wML8[iELW:`A 'Tg:w: ԙH3ӕL܆2!*"p̓%IcL0 e/pρ(gbbRF{_py46 { 1%,p9R=S࢖w 2]e[־LoZ`<+7h2JrJ`Z31-1'\gD7aE%ad D%ll 10f@3֠'&'iw,#Z)uir–4z4ES^'tV(Gs#AƊlb˹L`Qڻ&Lu&-K4 3;vlB;l-`C C& Ch.bC( %9ck0S2J,hi&&# 0&;IdnZT=J`%0wm"fG.;C fg"[L>~lV06QgI0~/PT!&QI%0 .|§?:W=r ?(U5!f}soP]~(+%P&d&΋,Fg: ;Yd9}jͱx %0E LǓa‰/G &:3v&3u۫˂y7*֫ցUL3^,<\KW&96%0_ L]3,L 5'L)L$i_<5m";-ikv8XI`u5]"r2bxe A,S7Ffl?0p6<v1;`ɾ {mwmՄhhԿz{Q?!&W I׸25r ܋vDk\7z-k3KFzH\i#<ɚUFݿYzl%\KT%zXԥߵ ?́9#̄yU͟b0xn&+ej`=}'7%0o L]C b" _U36e*oLmU RYaQ٧zf$Vbg"?8x ^\xlfOR{ o/Vt&XLp^MA M I5Q 9ZNU0`Αhb /LӅKfǖВ՘Kf̈́v&DlD_ꑒuYX/0U? $Nū *$,X/w+|E$yƪP3^~Uls,\ޤGD/6xNb jrz}`gپdTm_2;XE*rnC~4Zn[]`k`IMK{6:_0Va?_EwKK GD̅P.y C+ljc1O5SY swiC/{(77ҮZ`lgKh.s7AޜH VLpL)Ϛ:<4|"I &2Koj31=vDN 60:$_>63R_+={=g7 >B]yfBpՙQpEe R ! vG;K H \xC6L1lm ԙpcz ԙgkn{9sSX3bG[v BG BF"A ,P(! n5vӝ# ,#H0ጄAtGnxDRf- E 33!2/V]'9g.uFo4+wԷ  ę W"9DH`b)W` ! ?!7oo2QW & ԙ;:D9XIN+J-I@|&`"dW:do/nXؑ@B0~%O&HfI4:-PX4 &Ę 6TG]*i;'1ܴ rԙ3P p$3~4'wfwnpLW U 6pi28;=] :APfFc10k & `78kBLSS^ 1 [PT[rh L ψ:KJ6Fcmsþz` 0I:z%Lskò_!|~4rqL&h01\'o[Hg=<\;o0p1jr9 ;J@~0vD9 c)XilR|G9-I8֫Ff,`ـ=-AD1Sdjc&&^$`bY$=0Ac;3+E=( `ϑ1_7 SV^g ssB f@6[JL7^m_^'kpg;5<`i_| (.u\Cnr\ O{b^Ldo*p<γv z2(<#W.c`BYst-90oǙ px@fL7b|uv4|~-:`:}ٙ/c&:0j]~#N:V'_Vf G[L]8e!"[^z|eDahé)J!/ LN&d:nS, p"(L 1 Aذء+(ΰ3Gl( ~ѓ xלOC%16NNDF3KS5(^2@VuPTΉc2>q6ڕub0ֻf $Ͱ0|[6Sw܋MM .| 0.LN_DCk cL$9zuU~`Bu&| UbNO¥3*N3)nӲCo hgP=͡>\tS0([P2tUUל݌pR0ѐЮUb!Xu! 53N\y 1f" Uӂv&K4:b#Ƙ [KzlL0O#?^Cab8Kiy (t')OŻA|P1e(;˛vfVҷ0_&BWz[ҷLoǧ&|A_םoyg.[8]`g\+-q6tyFFz)@0Q6E9K?o0!L7kLp/cUL L"g>)1C4MLmmv?jۗ Z{ 8[.Оָ0_0?\5" .^X3X~-L8мRTНX&Q>{+\]"g4}!m,f\CAwNiT:N!!yU2أ34Og&H@-7@>Ya, fŸ`Hb̄&'kq5/UFi_ŗqܵz.l 'ę _0?!Kx 87]J/۹252)3q^1a#^,i$pc&<$ %c=j5L1u&Le&`(7j1rJ88?Zy-|~Opd^A_0ZC 뫠yp$W8~L0ľڢp  e>EnxDRf}^4D 3xXcDjt&x2-c@7&߯AsGl2u)Ro5 a&c'"C~gf/]}W^߽ߵ|ZX&D$^pWPbCCGHvCJr(9w˴r=]=qzlt/A0 Cә;Q\_6C N"'AH>[FB9&)`8`"wC$D\- D&Dtxq'lW 0GǼ*r]b6GcstK7Rb9Q۰*$L΄[g8g`70S?G*ސ6!|V9Fৰv&|?B&%K6ʒ% Tb0|)VK3ܺnF77>8݈`&Pg" l96:{Fu6{F512鷮s31F ١%%y- ɱ0b!`"W(7" @ Vì5kT>L z:cFdkK\*Lim6{B]J !31шբ(XE]iF`sP6k͋$j]t/Wu&ls3Lhs*o]shlA%jߛՍX2F01+Y% 2$X>ƻk=hrK@x\v*Oy~TSTb p$:` c*:pɸ1!Avbӫż΄mӽv& 0Υ9׌FSiV2 Ę<C J`j`[` ][h9ԁ8ie%=VP?^"lU !n$E /z ^C万qzVG_hg"ޡ)+U|vҎSj"%`b{R ~%/_ď!fg X+ ;'paIJ )gpg74s:~rf L Le&Pfzm}}oTYzl%*S6G&pX\X8p`!Au fg&'A L 99Lłk(;4 : r(Wj jσvZŶӛSgv!}_Xjn,ai@Ji/۵Jt}{뢩DVә)דpL)^ A @ Pԙ`o 3a 1p,hx<]JA|SRtIM5_W/to7|%&"n§bO~=tQB]z;t &|mNg؈Ez]?U 2 2|'o{ [mm2n6iKLؔø?#6bBfb%py$_;o#@L|YʯLf|5r6#lpī/)(y[^0!(t>Vg }b݉{L8ʥ9#0W2XϕSXKyb3#|2.CML@ 1f`kPsޘh# cXl'8Wls:.uI,O8ڙx9D ǑR'(|3|MMx~+3"d`^[.H101 z.u;3$ߋXNsI>.B."aG^8=`)_KKbv&΄cgس̑ +fjh*ІdD ԙz[M:}B\OEJdmgN"oעd&?pPh֏Gpv!Yj2T=1qORJNLxl_2k0`۾$zHgLp^CP'ԙNӞQzKrĹuw9}lNi== ΏZgSHy/'wO4lΡb'90;0r$#S ț1~J9AKPA/+[3<x+`")31=M~"@clj<;kZSv\ Fe(<]}yΡo^SoMh + ` 0;a*n3u:3>vKh?[?Fެ{ Jѯ-`BPP+`bv}5|+zK򮍍̄mgb #$T/y5Ĺv&g_оYPZ4ǼE]m5 bϒH '8.$([6-_wͿELf8fO1hgu&X5n6[vsoΏzA 9%ULp&R(1S8`6'Dn]*3Hg"ZuLj 2ߡf`QÕf9$AHxdaL^ " Y" $%6%1G蒼k f u&(ے `*fÊdEp4ㅞã8v=|stU7.kзLDmX`H2!Ia&N`蠟rvQg—x^2`۾dinrLz P`<}.]87{R|0'F|P:O97oX&+X5 B)5@`Ň Pڔ`av&Pgb g 3pf=);A9Z`"P\v 5?<$ OkLC>c*H t+\Ec ;my;:<::v6njN2= >F Gk(;t^CCR]C+ ?e+J˴̦8LMp&pTb! qT=ٻF0ĥA>K1|(aLgB1 C̊>`LD;d*(߸OHcAWTRϪMp&c#% O̚Z5CFx"M]8<Aџ%c#}kojP$Ac[6v&PgLx0 ΜkKWLb3/V$L8AG7۰u&,fЁ:( hgBL/} [o]B}Bb@0!&',$ O̚} ! 9³CPќ@q3O qvIݽzkd?+o@~bFs9 ]^ Bf&CKyI8jFp3sOuKԙ@ 0avU ifwbca L_ g[iN&f*^|I% O̔!hqO 3쀸Ns s ԙ`]4J+G>9s7?b`\ Bf&/3ks 1 ϾCE = +\A>t*Jo)uK4uR&f)]{Y% O,3ᶱNpa8[hgs녾9vH&f$Xvy% I@>Bm`߯q`#ߡB^C7iH4ubec&9 ~c&PgʎuoĪM؟@0_fxŊK H+30pWr,fֵYFFƖ <|1`__^_VA>}=SǩGr?fL{ݛLLWXjH X6fb" }s &Pgb5t$`bjĊVEDZ)L2NGD3؈1~b _r38 U ?1NK0Nu&4xSb?, ~xTJ X6fb hCp2؎(p_b {/h9ٰXF|/Q)?lb$ I@ ԙ9һRL,fRywE02v1b1҅ˀo/dP%5&L FN{2s&4a e1P|j<|;ӽ (b~V4?^0LL 4d% I̎([77jjoڗj}B}s g?`V9T,omr:U ڙXY{%Qߢb1u@C0$qc c&2<]v}s΄U쳟L@ $ I̎([r8*`eH 0 :Z@;.L3J &[-nPUA%?^@,<1;f8ʧJC<`wLD16O,џ+Ocz P@8]$0φrh≸$fL 0aȟʀ0 Ixу3_9:,=!$HzhEu&cicR=MNsc;41YheR}LI&*`FX`XR0UUS''۞z@,<1;f`$;!3`2יp)3ei#9L(0 ,).k4ڝfHrt8%\I0$r 1I"8ap O̔uK8Aq8#G<1g1l` #6!MXV0k{t?qF~\`0&w>O5}O)Z0X I̎/eb_b 6;41ZP;sΎXy'L}oԙHԄMLPuLù\)Rw"J\؟!noiOòR0ѾY مXxbFD`0(o^gge ԙ@YXH`D 3 ؿO!gH|!QH4})Ӟtֳ~ZOw edp} UаGK/N׍Hv03-pTA?,LxL9'Ǩ3;,Jw@qD,eU剔hk-ؑ+ Uص@ _}@sQ--w0X6f}soVKP$4`"ߦLiq _Gzmb8ڙz%H"`Jp};]E1ykm\ftd Q_df0ATl̄ӓ#:@ok K` H;`eY@tOzc{*u{2UqtR&|Вg-.oT2L{0Y/-EK…9"߹$:c#*}CcFPgu&"G8xH2 /8+^~mN6:>i'N@CۻҵgP@;`tOeZ饉z>-LD~0Yn ,L,731P rAE;hg"r>oTq`)#nT́]{td8”:om]*]ӸQ1KL m=Ovp1}!{HD1QA LN0A IؕQal3MX>S l=Bt~6n FwZVs l4 |ox-[o'O3]401qi|u maɤi)x' K`ܢ7) 0Q}aKdƿҕBaρs`9A؇-vuk-?nmmK6u*?f1g9`b%)+` 3 ې^ LDA+P LJh|+?Lz]iҀq[7s)9X`絋gyEKa&&$Pg7$\1w|ct>1~=A钝hgbq&{5mﷻ]`S|T=xh jN@tkB]k 󩧝r>6GA1:n 9Vs{@tL˒b*ԙ }sj,^)H_a?QYft`xl]0q8Hls:HR `F nwuhͼ\ܓ?!E>`bՙV##ߡ}s,~e]iq- v)Sf1Ȅb> LRLP˄6uz ȗo P[0qU֥5ibu@R J03A2LR嗦C5l qF$jqXBN|34~lj~%YzSoLb~VGiXDLp~!HHh;-ա'Ra/O 3A}3렽q&&޹;!b&DR23B;3 b ,= @ @?0 Q~_f!WŸeA.>k*%Lk;J #3tC}S2]Zҙ YHk/$@E;~#I/9"Zu&=S&$cbJlPP$0]W!{>[0%[8@N`cJ?ڃBذ S8 J.|u SB0 I8{"<ɻ_9Pgwo1PH2L Iܐf-OE(bUAvHE0B ;9bW*<&(i{F?h2# 0D Y 1QF Q]LBg5}L2j=1bMc';9f9S'BOa3-DL$؄@ Np83(Y[8Ԁ'gFzf"=ta_(saG^'`#^#Lfh?<)RĀX $طe/X,Z.9k0L:K9Ѿ9|}xI 96#a0A/s,[!bi-,-[ب5ǰ+a# `D( $&\@ X[M w$a8N.`*¡%%N1W , ,˱lc:xk-? `7@,@=gҐ| %&V`֙` 6gF޼Lu%#,tN[?+UciIa)3,V(%<`>(&5tp$@m"E`~Z=A׉s`+']`"d#)`roSUg&phrN@p6N LL{|c9a xf,Ũ 'nl.`:S,L8Ĩ5@ۗ(pE+^X0A  :@AP % E)lmIpFT"_M=Uo_~ͧa1X3p ORtI޵t&(91`XL89C_9 }Ia@aK >,Kak3f; L!bpr =8+رFP`k9,NvBl3ې2 $L0 7%`]E`)0_򜒣hߊ *($B ;сQ)D% *Ӎb! gO$i$y&Йp`{ qv!8LsUjK|t&f [+ rl L }sFw7Hn!F߲2ZC#r`c@ n`b Iuf dW1Z>CqPأ`<#%4bh)!EXxBEHg&Ӗ@aLeg)GRM(38 ^1,r= `Z31Ҹ{16ED83t&HaD/Xm $H0>H'`洁~ PZ> gjǜvx߉S CHAaH H331g&MLp>(Q c,L8Ux%8fib ~rx1*^Ct&f&NI9 !31V L K K+ôI:r؁uv:ɻL06a&9fӸd8Q`#HxeI>$:ae'31|\gKg61Jڙa%jg" 4 Gt1LĖ,&@T7$XxBU'y3= }s0~Ѹt _ySv0}l_2ۗav&B΄ jL%dCg~%0u BKLo14fiHӏvР4X;@ipq4$Xż[xՕ}س% O$Z|fb: C:iԙC F # ќ0@qC\L #+'@ NpmBfJb7(XHb ԙ@ d&6./ L+Cq};5Ac&dZ]qYM~ Fk'Quw->3:䘨;töO59:_J '8_/Cθٸ-wiI/ﱐ23Aq ax؀@%8?^T#t-92'Z}ydB9~z*k/l<a"Q85 O$Z|fu&^7zxL:ߢLpshT]5-a&.4b _Vû8Ild{w%\܄6ɺ*XBfu&Pgu&5[`=C L0o}GBs~Ᾱnqf 3d)~GA%/:)0Sa\M'Quw->3:3aţs^LpsdDRKѬW"&, 7,3Ҍt,$Zf/e{3z*G;&?Pov&J0!Mpuj| L̎3LP8}Yc AT]LPGCP@̷R5my缍4sJ>REmKP wP?khgLL-$LNWf6GI SA4wq __;A#H`7XBfwAn{$g/h|-hqO0Ƃ rO͡v0jMHN.qrHz$:>1~scdiȆ0䌖SNŸؾھ`2Uv0G09;hs3 VKC$0#? 2_`b AT]L Q/FQRn`a!H!=0Nb ( ̄7Mrl8(>j e^Cnp#aϸ=0 ;t-c!L6,Lpsr fiZwF2ft/jc!2 p'?yF0NŽ}}sLu2b)-,/3 Nb*(ڙQƽL猽'XxBU'y3 h/ә +΄h!E3ar~DC8!cA5(J2L39X:Lpsh(K H33^l1v3>!L0dPߡv@Pgu&: $s4f$ O$Z|f¶3hH𜄳%x%ƥ9 /|u&={2.Kc)|v7?:^CPs\GK5&P19 x3Z>gB)g&+sqLϋR6qhgLCsNg4A$ S@,s8˭K| _LB -3F'Quw->3972otZLLpsh31]0Y,~Ӡo҅G "U,4"-I񍽪NL d&D^Y,GI&T WL;LS+ II޵L2Sh $P3ݪ]/}J6#qop V"UD?o,! XHa2"+NM@ ԙ@f"}1%d&\o25Z5CL5'^-Vfxə+Z{`E5@LƋaO$``Q5HPoTʵAKE!H g$N^=v;n׆mw6ͭ&ƏFGlԾ: iRڐ^PxF.ric燤k\; ب@ 3NиFo4m鯴iңLP? ]zW8 w^SC$00f[LLBKLDڙ fܱ0v&8 P5tﱃ `J UJt5b^C8`U$`"VؗI[#=TRqW7yr8v0ۗڻg46n{ Ӷ1 蛃͎qL_ۗ68 d&bGXt@01]ybm+ XH"u9 /``c 67X +80P^ b&3!B! C[ڌgG1֔+ yJeZcxF1vNٲI <SB:`b!bǛ\ԙ $FqhYM_wZR E?13:0>MzWxF0bp >:)yHBKV[ԙ Гwy`M9zo>2A'\~D&h ?/ʝ@ ԙX {'$BbBoLt `wA҆KߔڶTkP*ZD8 {ã3APwc縣/ & 81JD3$Pg] apI :3G6kL|U!?G|6'3[ِ@1 0F:6pU V10n L 2 L ?}2N7*d_I$ OL#ppt# _%Aξ#TDL;myNncA p2}w=Hsu&Wx K ?\d$L0qʅJGZ9VncG0B*|앾H6Йx~. @ ML739&{UUy؏iJ .3A,S]Oo.ljtOT8-~ 5f,f…0xfٖ`9hg"r_LL}úV@&V!b+XHbظJe. ww Np?˥/J 1p9v:ָtL0fwls8.fdRU|9Pgboֶ@0O? e&h(T_/=VwI-~Vk[*`S2oFg:ȉ(L,2s$`bg :kaܠ݃4tAsqTpw q /_aY>h| F0{aHqcլdD=pNpt&F$LD(2)`XQZV (N7,ܳ ^az FPVM#PREWwOtW&6awi$`ޚ,`v$ fL3o@̉nce +׺tveRu / <%`zvOBbk '`'{ OKj I0LB7ǘ zL ԙXMI 璌Hyʗ ̌nGp̞r :3Xq^;PEdi.9Q[%] 5 SL&Oq5 #F$|1fǘJp}sot¹sɛw+8FJh NmlBH!k{u:afDcGꞪ)?۽BcWnѰ+;!v;=&uNd:_ cD 01#D}sE 3!4fJ `ms4b$hɒS J@8au?z!/+H?%oA@0d6޼XxBU'y!hAOz7I~2;C_,+Q%r-kNcMc>r8M> _Yf,dz1?&3>syaL,.Lpsh6L4)Cl?F`T@@kڵ+'C^—`ҙdsP`_$`x I5(Uљ1{08< ؂' OoG؂CB戜JK '8Fʏ搮桬ܛꃩ>`iOぐL\n0Qے='(ORXe3H` (eLv@C0ޕ_$T:s0ZE Oq~$ K&x o.H…*dl6S Og&31{UT:hL8313^9 Ox *Pgb s %dC#ls&a&;@&`{i#_xڞm`BnS Ʌ'0QFLh\VlG9ֱP0!L,L]g"`#u  TGFe&?$_NL,|Ltk@0 W3A7ɱ^k$I9>lH 8w9K\Ao] <DP;m@)ƫ^:Ok%rOڂ&g'ԙ`3z 71(&mޥ#) A$.A &`Y f/=XߐA ־JPCZUߖj`H Ijՙ d&DL ԙyӰL L8 BcO &hH0Ad0b.(nJ_ %(otLz(MpDìkz+iYLDS3k؇BPvȣ_@qPnu4u&@ңIU2Cw=>&IKFivP"Ս lqi-X``L@.`:-N 6'o]Аmiz&IL蔓h>Uk/U0+ Ѿk W<3m!yL8LL23aљ;i:/K&m+kyu·aSK&|:ؙp$bSbHǤL@`ҪLiJ:nj$Sj IB}<\?WOH.K`BE"Jgvy eDeze83aۭ3ZBV O8l$8ML<`K `i`j] eB} `B\20'Dm>&\p[cH' $*`Y<KGcP<^h Ss3LX`D.L\7XU0^wr__C >)!=aIt_-X1c1G9Đ@;_K `?AĶ^R> T/YKVv[;"6yXZ}+`v1H"my'=6-1 n˰QH xx-Jx,VKVjw,0;"0#j:#01` !X'z u@cgp=K3 ^siLDx,f LSIÙ=FWRk BR53H6@Eay Ik.01b&vves$I  FKT.qD.~iOA 3A CqG0<3?Rx 7S['jHaEn'an5YvZښ7&dQwA;(خvP-TܩAaH6*{Ll L0<';l0aoXpjT?&vo g9Wg)U*v&| ^)Z::zͤ̄u&fL΄(b&4m &`PiLtSĭ$VRnOFiD O8`BkYW|pIE%e0fB@fB u,U V`|\2s$Sf)%Pg}sX(H`}d*`Bwmbb rL 򧪾ӲGOXSr4O4(LI@戞..P&^oc8K.KC%] 9/ va>|W >$Ng1hݍ1_(ڙX"H9|}(W0`Ƴ[S3 f =bJ9Ia4.ɖlmtvKѪ;JVL!$Lxr2X;,Johh6ڙ@;1F>MR&8$L ,n>ӯ65 < *N 2ShN;}vMrns= !f):Vw97&%yH'p[ -;=^\,qk<p3aJ|bO $23v=螈B;,O} ;>~ld}xqt w=ԙ|@j$dCWb? ^ȗ a¤aAHT !fu&LqiS;}`ÖT&Te@# ԙ$?I|_MLOC0't3IJθ@0WbX~%v0!L$Ɏ X9q0vL5n;1<<–7&6u;[r0guZ ?lA$v0@ ԙmM:+oS'UqN& ԙ@ BW 3񖧲Drq3$Iީ\CDRfu&Pg<ͦsL&"e"+ga_{L13:LML| Ppyiv^f…&0ާLQ&*`")3:3DtEVke/r`KBOb szj|.`B@ ԙ@fbۻ+! )4#* 83T2\6H3L85YB;E~1_\L(L 3kٌ78A9^3(ẏ/3ᒽ <[/Yĵ7 H& ԙ@ d&9a]Ɨ'pHqa \ć`"Bc&4gQ2N'd&Pgu& }c7ẵԙ!M!L |& ԙ@ d&f=U`&$&Ĵpc&FL$e&L 3Yg3#0 s_;Rt.jrnὣN',Lx5."?! zLYN2MaԖv0!LL 31ۏL*Io>&#&n ZXt0`")3:3D:enO/y9Oީ\C3:3[s"2sov0@ ԙ@fbֳ۫Dg>!-w-אv0!LL 3񖧱jQ 31a;L$e&Pgu&k.Z% |y ;NPxy.q򉯝 Ai.%& ԙ@ d&9h &fr!Ù61aILJ{ߕL2>K.TAvb?~.oL Q V:©0xUZ! >ebBp|Dn=2iBL26&|Y)(=b' 3~^!:esf&"NxaDRfu&Pg)NX/i^B~4;SsIJ"!`I_2IJ{I޵)LL 31Y @ ~uV~̄ jpH3,#iBL2XxDX03&.k3!R.1;fb2 "`rKK~Bfu&Pg&3*XI&m&oq.an%#nW@ ԙ@fb*c&R'[!`y623:Ln6}G01bK, ԙ0MղHL6,b| s3oO3wN2i041\NrhK~i;Ґ%:KһR5!w_Plz*%`"H L$e&Pgu&L,rY{#X犽J !fu&Pgu&xi\ +1,H;HLL 3;`b"]iBڙ@;L}Y!Xlj&23:LLc:x pI `B@ ԙ@f9JZ L$e&Pgu&XhZ`bu.H;b&Pgu&|7a@0#%dI ԙ@ d&pڛLL[XK`% ԙ@ d&~.Z Xm&23:Le*yS7A01ǭiN ?3m*5ctVaE)}&Pg}soM؜%ә>:qulT^5?`1Bm\İC% x@(7jwڍN>;jƐ޽>YkfZo5Xo1iI ԙ@ d&f=;iwړzҹAKY"r)/yoVSRP-}6[ơԺл$.f @䗁.a9%`B@ ԙ@o&ֲ)k{s9hgIq0bOp@c%Ihn7 LtΕnZxW.~Q0ѾԻw& ':Vh#w4`")3:3k҂ 95_=5ku` s`r? `BZPPN[K&g9 y,\h+SuNTWQ(,5:(U,a- b&ڙ@f"=h2RL}a=GkOvݫD?ntH}߽5;'{fVPђ.UF[mL2rV1&N{R^f]&x"i.@!0B.&ޗ BGc9൰,KR[0-]cӁ-"S|WOTmpw:`B@ ԙ@fb%eĒ 4.˟_L'5E{X8K3QgT46L@7gwßp s"շ۠ɐDJ{SV!?oJDRfu&PgNOOc,HȨآ6+M;5.|V:' 54Z?1_hO;$L2ǂN|"?$~kI 4N4حҍ*vwi@P$dCCڣ>Snhuam;vlk"`\Nf?E/1_{EWE,Q̢0t'g, DH`nեT\便.`u DyGU7T |c!ɻ666 ԙ@ d&f1cH2 Ρ!A~lt `fGvd0ɴ o P&~is EDSﲭ@ 0'r{3wȉ֑D l?[-W?kW[ͽ4ڙ;"ӑsLwmL2+)$\r0>[ 91[mn0φ_l6 ]ZsNp7GL)ꃖBl ~0LԶ;ٿK 0Eډ^=ЊM$fZ> Hv'y33:LXfJH2 Ρ!-U43q.dGo;Gn&'<aS EVl"`>@k@Mn?-Y H55swk9`&ݟe҅y"`K|vu׊_veӾUvj)ѝ$"LM@ ԙ@f"}1%dդK{vۇv{6@ *::L=6u i`w(mp4{^eϲlY{7G^-:8+ZW?o^Kll/Bw->3:3DoK Np c&nT06 Sp#` 0{RQ{9pOT'! `/Ԡ/k&x0ѽVZj v:i#9{m6[Exfzs؟]D~^kjخ֢c,$L2]V lN) $l+{qg= 3;Ai3"?g-C$Lf}q^P_,po5}P|VH ri)IoJa_)hGW~tMRAgB}4 - JC}_0Qwq4|b AT]LL 3ʹ!'82obw*,SsB@^ X& L*lgB\! !> poQ{xX W3R&4r'…Q6~JmN~NYʛjგiWڏEv{6um,$L2Ӛ- &TlUWOD+ t>R&S]T-k*ibςFa*$nnՕuO&\0[;)g?vrߤ\< z s_zK`IVX/mj[(V.riy Ng&Pgu&H粰J2 Ρa-> 3}LrL@R tBiH쵥CYVӾִ/U' =ʗj윫[HT"H`H ]6 SLe}7OrnC-%pQ?3'F WJK%g Zv'123:L,’/L܀k9!_+ m ټ6Yt?V 2|3%F3 U@?11fN=(tލ7&jJ&hB?HR"=l-j E(Lt4A"Vo;W'DI޵L29Lpsh83ڗ8qk0'=;ʷwS@?{hT4_ςG^=/StOd+}t 0^_pv1u ҹx"g7Qثzi(%0QG$A?2)7 ҕt,$L2WV 7* +ڭ=0|il; <~#]S5hS@;R0#eRI|0v[8L6;ԟD@~ 摤<X'LX}&wf] ūbR9j%@Hwr_;>PCJ^XxBU'y33:Ld:yH2 ΡQ}#;m43)` 0Nc$``L(&e,(RΙ 2 Ɩ0G'UX_rDžipU(] Otm@ȿFA.|[iy23:LgeX,LŪqhChO @ʉ,9F8`&;a_U__@A^j?`wxBfb~ַ~dw!s|Q}sv {JySyb AT]LL 3 $'8Hzҡ4^3Üvo :ʿMwz> Z`#( 'L@ؙNf&(H-'"_Rc'Unf׾X_Z_˭d9bl\+~S&XSuBKLL 3\2v`x6QrQ)vصћ&`kT= Fh4J*ֳF-]8#9SZL5LHU(Nf < -sv'OKwڱ>%]oK,ۮ,|% O$Z|fu&PgeI&89td ~$@ ԙ@fOr3>\z :ɻ@ ԙ@fb'e@ Np]&q`[Q`x GJ.ɻ_9*N4xc$b0&;o0|.??-sbZ1(fYb;4"x '|A d&"W,SI&81ŗF]LL 34*44'8HL^^K+4VW,$:#Ng0'qN' f,<*?I1`9LbO cb~װs }c :Ćo'&9$aiCQ#zOb KJgL; g"%t, wq"DP6'5WSwU2P]>=k,n:{,$LLXRL!M0w7y oW` 0k|kQxL}R.TCņ`Xx"L2 < &X5۵]b&ALAާ%J|{C.d,$ڙ@ d&5[`=C L?.}bﺑO[:A *G$ߪ h̨jB q YoXx"L2xɤ)ɠ_oXK d+ːN%0|s~{Ra{kC1~X|Kb!%d&Pgu&  &|u\:-HU'  "'"#L?A$&bTwebT23:LDX`z.p~-r"x%pJܗ-˯"n]{Y\]W] jAkr;f_o]@!r՝K,$L2qg,%邉(@,j8NK:$@ ԙ@f'iK``.2l}ueL}ӡ%\A{) 9,2oXx"L2obJK'g&7lJ`" BKLL 31ԀHWD* ԙ@ d&pnLQx@,$L21-S+L,¶KD* ԙ@ d&5_}@&p\$@ ԙ@fiKĴ%bT23:L\4}@04 :/ BKLL 31ySq d&Pgu&db H,B`$ I,!3:3ĪZ?lA$ O@ ԙ@f"}3  ?\d$@ ԙ@fb (bT23:L6G V!XHb ԙ@ d&c.ZV"XmbT23:LkL0@ $ I,!3:3N{ӖiK[ d&Pgu&Xhi`b֏JB~ͺ X< BKLL 3oNH, ~ih+N7M'Wi*= jbj*4=.-D* ԙ@ d&R8n&It^,FWuB$4wFBk_nGOf˗2@'䃌+8Ϯ{Xc!%d&Pgu&X첺M/nG…Ns9Ir’LȉW`'T8e<ڽ*R"˛$OLTFg O@ ԙ@fbSۻuzڝ7֑BzL랩Cu Gc͘Ǝ=URG'&``¼Y7;c`⏎YSQ {D,$L2]1alll68TK&A Otbt8Cfl=F?*c.0!JJd&Pgu&Xڅy09fI?b 06>LtRWʻ*?Zl6nVLYQ6Mi8?M}B0 sQ/ 80ȅ!3(BW܇ G3IӘh=Ġ 4iAS:(]J;4]>i·f%Ob'!OO0ik4f0~i.?g0}c :Ćon>o4!# 4iAϥA1ʥ;Q#2cR>0Qz6Y臀^`ݿ &Dȉŀ7(ba@(V`! = 8$1 a@&L 3sҶ9=``B\hKzW: p C5; kt.A6^IܰK&w}&UAҿG yhvF0&d&Pgu&zHp9@B0ʝ  U0ѽдG q;>fBm˰Q#;^ʣvxWS~p#`~a@l4ydvY3uQ!E ԙ@ d&6䛃ؗ[ X LL^GhtNܾ֡4uWOh\X#H-h<  8 +'-<4M]BDjBfu&Pg +06GRoɔЁ f\Ovf & h[e_+0tvݧA:}%`b}و)|(^XK|e 5] dgƎc,3U@;3B揷z gwAhI2d F6L&^eҥ :zW0.5]fᓼ{nű##5{/j h}m޹dıYjk M! v:T{&>:б0!LL 31 @zmQ<}@^xЗL8ז|o5w;1y9>q]l?7nFmm; $GI^0a=xTsvlh$`sϴĹ%!Pgbdcs=+8?᱀ɬaھd61Gھپ}99}d/`,`rv0f[f$ ~sֶzphd|1rC . r?^s{wy\%`b/S?\z4^RB U/犧!c iR=e@L|Df"@BL23Z6Z? Lmc}Ba#Fl LkKLyh4]|j<`SmKo]UKy[,2ˊsxnZid&h=բkڬ6]m2$&LcۀVAhL8^97k$@zX'j?zSuJ`'XP PR &`dNX0QlYLN&c~'`|)7e{S\;e骪?6,-:0 YuA 'm_*;k`)"}Vt@.-3؞rI0,ї3:3s^_6G FE q3t DGH'A R6Oo閩/(ZZ9EC>ejCDZ{)խ f_ ^k⠯(c`:пK& ^Fko6L΄w(L_H 'VˠނD$adc*L2"%6M=X J`U%0wmBfL 35 nq};,k3>a4Qg4+׶Mp+'J`6!3972}d.Q~(& ԙ@ d&N,XS+@ MLL 3ړ"z7 n{/kBڙ@ d&?+P 6L+(YH`ڄL2xvӟ޶<( L]b&Pgu&h76P(k23:L,6OKwu(EI`j3:3Ģ7yߩMpoRziMLL 3!bI1 L/B 5 L]b&Pgu&xksB4 _b(>' ԙ@$nW|[p}D A !fu&PgU^S7iXQ oV g@ ԙ@f"uk7ě]ưi$`B@ ԙ@fbe X!HiX K*IDRfu&PgeZ`brg,2N&BL2s_ ():n H-$IҰha)IDRfu&Pg:ͷ`1!'xhlC rZ^0| o# ӸWuR:W5lB$0 b&Pgu&X̢F*&3@R5ƀ<ނLGĭD?Q>ѭq\Ȣ7M&I ԙ@ d&4> i% &Y2ILXmL౭_! ?00 L& ԙ@ d&滚 Ggwڃ 8<3":Y:]f¼k9`Bljur\ctd&x .p`IV̷oL& ԙ@ fBd#L,ؖp!3A9~a&(f^vALx) V-k3\X 8v АIoʃ.63g&D ߅HxdqA@ y`BE /3 HLL3޷D09^̑n3 b&Pgu&0`"mH /ԙ2=Ua&|\zmK ˗`!4m۳ L&23:LcYȌ{Ue&T*W_F9n{`@Bhg  1Wҙ06 L@Ŗ,P !fu&Pg"3L,pFryJw|fB_()5wt|i؞H`0@ ԙLDx}f,u;7^҅7M&BLD|fBcO+ړ QOL]hBHf- uL$e&Pgu&&2񙉩 &ƾx! Q !fu&PgB !*18P$`")3:3A |,f!x YLX'J%0 b&Pgu&B 1,|#p0qG f!IDRfu&PgBm%Q"NJ@D8f!gvnŀ@ P(J |[8e}D P(J '~:|eYɨZ Uڞh|ر9AI'WWR LDP7iV28Я[N=/bjiOobiIS@(Jk-7rه4TK4V8\eIl؛f9ӏZR3۾S,"z@?iviZ/i)Ǥ>i7,O(9IkcxP, /拮!L# <uV!д9!!qc ,Kx2JS tRahic. CD8"C$v:(&Q0G8:C$CH,T BHba>ocL љpҔiwigxA;sb9@ ԙmNپLOD;B8Pgu&& JQ|=泃R~PΟ;$pbƫJ&| O9B AG;$Pgu&Pg"nws^- ԙ@iDL0:*F9s\mVc0! ݎ `>na&-`Dԙ@ ԙ|vo;7lrL봧*ZV;i~Ӯo66NLL8lgR3:F;hg"03@73<Udךt&H+.$31ܡ'L?os0Ûҥ@ ԙpP1Ҕqo ߡ¶/7ǘ*!~}s,:0l$qCĕڻPm& QK~D=r!7Q3!L_(px>f5}sDPE'KcG Do*l}sxt-!]2 y1!%΄}sxvc2; 18:#kS:3a#: >}9\/΄  LL&=KY}^o%f&߼|U<<VP @(D3ͫ7?^ ڏ,| i@; )bf\nϗ[\C\}}y._O1;UG ׯm/_* iU9*30DWt1D`YUIxKlFviF<…z'BS0u}r(D H%R֋7w~m}yIC ?LJ?>ϱ!wChU+C7>;ač[^(q ~| Z Brqa?dz粋{̯?zezO\B{CXK[m6 ͆P tU!7qqo{;7鱣~'rp\Qz%r5 |!XZs ?6CwAR{ @+ |\S9'ОP%~Rlg eh~{dNW)CYl`JQVGP~4zR%!-4/D˷4tHK4I=`a_00Dᵻs+9 P Ta?lj~ @ qF4m*`T!tRP TWX'm8yq8ͽXTW T9oTB(J+@ ~,eDn3b㧧 zsP @(@1࣢M Ab(w#\;#Fa(T !&. @(00P @(XC@(P +P!$ 7Lv&j|zꪳtcp P @(U !?;LJGh鳓_e%%^-PfN^~z:I+SI5 (PV"'px(yB> 4>cչ XP%o˜qN:{qJ䡠!'zN~KީXBGRcP` T!Db xϮѓ# ;{ǧaANC=9pdOiI>^)C$z~?;}~Flo}kP` 9 J X@C@POD]/o//_.>\^\4c ۀ?E,3"dQ$/>^f%6Nuq> 5c6ɬ>M!jNĕ` :@FxXC IpyvNG̳xQ [o;_.oyAnog̎Lq~?|HL !x_>>ڿwh~j%stI$<!kP)sD1̒4A ByR  )3!//N^?uWɯ (V+ŧdϯ>_.sB k@8xX|X,?, ]P\D\|__ogo #N$G˜y1sqrN'/t3A˳'9"byMzA.]U,?]qIϞ'>EЬۄBVEN@kJ;qpU*m3b˫;9}_.~>c#HAXpv}:{}5?~ib绋燿Rd?9Fa,og$e?P;|w|e3(@C $ !  |:}8E~rvy6:.i3A&2t=?A$ |f48<%~\ q#8=V~g'O__gᯗg\quls~$CP#cٻ!Xhԁ3tY\|OGÃ?:yÇo;u<:xxf.p@ǐ-nAA!hh۫9x= oBb?7Bcri[\ K]7s{gg/gIʹt(wW^0CTgW!7l!\>~K=3;wܹݧwڽ&y=.s x8>x۩A>"ˁxwuK@,>,ˋwK7Bcto/vw{?ͯ7g:yr#Z*~ A*P4 Cb\ Rz@œ}ߙOoG_߸h7?nl<LJHr3F$&DI$$MH k0ȁ !ey٫1=A?Ϸo3zv˳[֯;_L >%av΋;>"iA4䝦iNs#e Ȯp/؁ ރ;_~qb/|ٟgM41 Xl}uӛ{r~Qj'?ny5ͪpAaSADK`g'{=~G{{E%P` N0b ȣC4I0j]>n~D@ FtUhۅ>ݽG.?%>1O|yηm}kLѬI$ex n_8qs:g{iϖg_D!G;CIOw7Y8*.{L*]OW8 LD!7*;!~xB76mݼ㍍6>=YlA{C#.(w&AwSDۇr=ȇHbvf$a>"  *yhs8Jw8wB;_|u~ ͺ$-!^$ _G`ZBk"!*1 L Ǎ}byy |q-\ˇolu[Nnt;!ܾ͛/oCMfH|~@3,6 j$Eć 0'I\=;^)C49$YoS7'U{϶Ofb h# A7?n?ܸuwBC:tBډ2P`: TgRC67@3;oo~{k&n6;w7?mR~t"ddmadʩtlWf"IS1n}q|_G4pJ>؇%`?I&&1!zrl=ZG#c:rII"49ƭÍ9mI.|() ՘!_36jza,fk̚Yoϵ8칖\(pC,#dx6 d |6?Zxo/onmwۯotl.o<{ߓAX3@ӐOIM}{iiC0@YL|/@!Aka$Yӄ|{v9=4%8yiJ&!?qknӒӒG qAzH`d/_ae\EMG+C?+Suh.~Ysz'=z6%-雧0"]p3Wz|v f^_?WCOiN"Fkn%@$knQʹIxQ @8 n…q_420ǬPUR2`+h\&&| { A) 7:]ۮXL0ūL{֚>~zv4}sX/SnAAqSs dKeF*7{7瘲^LTd<'sj?mj0.ˡ .(C .j" l'!FFS |ԠpCfo~q"RCh!DC0Y&rp#S2ӿW-w@ԥ!1?f;_l~g!$Z dΨUh?Q 26jHX*B .g" TgG22<6u;\x"}Lf&|t˴GL Exxa(Q Of<V HZ.q#Z[#Cȏ.g*@ ^Qʇ?%'@ `ԍCL[˄ ,z12ЛC(о 5 @zP>D'"U 0:T !:l+N 0q(@ !+IP S QN7+C@(0l#jX1߾)Pg5GA(J( O:ʩh[JOy`]P׏!a u:C\]]]?m BWS@(PBfW߅@rCN(ѵ(ZP !l?~u* @=`]&R0-t8%|GӰ 4 LH#6D׆ChȦp]> ~@{`D2}_CP P !}O~&$/!D׆ChA|,'CDV!.?-OCP Pwao>Ч=`H (ѵ(ZP@e BŇZH h+)(@C.W>@=`22&6D׆ChAC.Wf?MI=3Ē~ܞClllP Ԩ@iǸC{=`ޯV9˰VU:KWա~(\ H"x~ VPqqqXviP_sNP` 0C.7shM!ЁB99ָ9g5 }>>{dE:koCDpU@eX.WEw}jLJ(l @(u@ r*UtC\P + 龦'S\;MԝCy%8PsᑾYL? ao0S7 [saAT`'0ĤxCL7. !"}s`n}69, `` !"}s`n*CDO$d`(S D CL0w{-13|w`j]0DTo0 m@[b/,R@C4Q5!J3=Q˨?'>q !x M+!!dOӁC@+M@1.wA7;\{wM+(8 Q!`uZ _}Yӽ1(Cg?!xvMA:52]cr0X&|B!\}7|ڣ*lS0Dx!`A0L1G>~P=>|6U`&D` :5L!r0 `h0/ c3sBQV@ !J&Cfi&2LhA]HCݦ+Rv!eJ(X ;JFWre9hyZfKr*Q SvE`auhmCM(CL-zU ǰ6A`MA:`z$j+T (P 8CMC<WuB)$Է=`0D*,C+c 00@ 4l(3?#0x54까z# jNV LASCDsO{_"R\}i3k=ٛ?Sg}Y^}JO6I^;oeGKn/;E3}-d~y;wv>_ۦɟ;? ^Mwyv P$l!c`$qB` K`ED0x#E'kv!R#Em FKF =G 'L$xc X0q),=V`_)^0!"X3"% &=)LH0ncJ~C$@@>?"!|FnŁpCCF(P`\AÚaq#,Dn"'ħ{`nX.S>Ҁ-! "u# @Cv#tBB@0@DW&3&B?}^P4:DUQm𘮥Mp*2m,%s |ݍ(Xs#և3lCuh@dx!:^>{ 9!GCchc5̑#`p+B>Hr -R{,|퉪 1]KʠQ*|!8Cb btwo?fF`lUlU^Wt-SP@eL LW!87(󝷷ޝ:_\bԶ?yAj=ڟTiB$=Z-[idMIa^ !!\Ȋh ~:c i;6?/銝%F5h9Рc3U!=] 麖x %˨!Ct22$Ot|s> `W!Op1 O!]3O1MªF3p P@*ʚe칌!Cxnۺje?OJV1u]bIB@=xWZz!x.Cc0`[?n?<[l?[˰=Ces8Cj+~뵄  kB0D CCll,=Γg;`P S0D Q`J! ,R0:ȤKΙ0ԺgaE! <= .x!!d B8P*ܿvՁXs  xAw0D?{O @0D CPpT>ۙ"B 2$:v# |&:(7Cd|3(VEW܁`nu;S"u&0ߠfBȅllMn=2})=5T Q3C bZC`C5".{Rm+7bm4$_/CӐ+aC,Uރ|3)Hd!xC:xl> )>8/.Sޯ7we0!{UP !jf "_`PـC.=z>;i*B i@ˇex=La"q#dChLL|5ngCȝ™!2Hax"E,b@eY0zj(f!愰"|NOIb]m~l# \8؇0K6C%/9sOg nde{JX gVA(!|l~5P= ·.!s#EG3{D{9+HR7အa re/%egً]2!W?X`  @~*!X/cet1`~h`"ȇ(^/CIdUj2""ćH= 5`?ex/DI.ՍH23T>xL3F>?] ;=5T Q3CT!52!#!('Y 6ded /po,f}!{UP !jf a!:ˇ$ʊ>ĐPm`1||t2^F a` (CA>!!jYsHe!{.P !jf>!֖ϦfOѰ3u1+wեP;rl2 @CA>!R83(ȇ໳\>I lQd uH@ !jf>!l`QuʩCp- <;84 @FCA>Dq>Z/#:[{RC "#*>D hʡ`"ƇVҲ2D/!WZ[;X/#Y'^:[_fOux)얜~2Ul"BGBVLJB(P`"ȇ!V pWZ LʇH [vzkkUj̗ju QaJv/d$Z:#TC>D6x[Բj\KC ƋUtk+wn< B\iS_ٔګu;'1 P`p !jf "w հE‡n 6hqA۹u k3T΃z_Ϋwu|J>:#4 @)!* &Xd{jh #% vf-(B Yȇ2 s#$KeoIC 3B`"ȇX5d>D麝F0(HB%Q2OdTkCZ"ث=F5C8VOk!҇.y~՞S9 P`p !jf0"ȟX1U6?Nf-Uz|'QCZ0\|mCՇ``"!mK&Cd 5 W}n#l+22t65ȇH>~H`O"s&! gYC6а:2+!juo50"Rqf;ň @2-Rtȓ$Զg\SY;fD>D|fXćB !b53CF FmChOdeW/()`M:u>D7e|CPXu~Og8)@F;A넳C(PE(#PsP jRuSYFUXS⿆4ʇ3e` v ڷPRʇ." P  ! ZJa iׇ(^/CO@F6[%ˠu>uoڙ.ҍ䝷m/;V=kt Lޓia ;!OQL7L3Td 喪!TkɕW3¶^J1’!WχH8F H|ZMW\ ;@ !EDpY! Aet!S&ed>?Dx>*"7|6΄݇`foM ME.EQ,zTVK"`_qPxzS  Fm QՇb>DotHhV!Cs xO20Dlu#<P !]ki2z\fvFE$-t"ȇ@>Dm|zuվ@V":ۮNĬA}e/ca LA'2 uROU}/RSȇ<r#rB>Iv,b.DP$7qKrccckc!e)y~^X+j~^+K>ҹGMh-ml%O5eZ)9}2/X/5D(o,CuX{\\Neo?Ajm1jbZ!܈|-!BNܢ52ɭ2֗"d W r-9W9klԁj!];IX'}6!χ![hʫƘY:ֺ: bC*f-fEm Cd+I7uʇf|v&m_`[d+!J z $4|$ S9!jz*i~(+|mQ1D0A@ V/,#&^z[M3J.rr#!cJU8[;5ZPC+<̑z!7(Bgm=qCޡ9jzGP {S)5PiڍQeLwSHTي́}{ KkpPɅfE{}+7BCRcʇXB'.L@{>Di|8#r =RNC!}p !\R2kC 9P [.^̵9PhT5ە` R!|Z1U6?~CB,2DKChOgHBuP iTI!"r ">T{"GÇP,S7b覀9?DFlzbCCCT2(@a&q1j8K JٔmʩlOJD#ʇH&LA r*ɓ0ːdSl0X_S *< lkSUv~X~'P` H0! "ȇz ;aN-2aI؁! ! ],=|ivdj(:Q |SCC}2 0a^ 'P`( D1D-!|tkYDj{} EZC#c0wbm,һ^Jt=g?\j ^5e4(]/b() g> #2 m!Cd`aK(121N f!ٔQG>ZBZX<6MPfˇjN ,\;Zb.)z'4ߦ$4grl=~a,}4S Q3Cx}&jv)\x\C(0\53Ç@V5mwOO@mv e+B!QP `,FeX߶ wD{R|a skOdȩbj|ytrk_Od|fh-|}~cڰ\ a/y:xq۫O $^@(0C4Ch93D'懨s~MčN6OeF0@ b<~PB(P`b=B0AC$ j'"YSc5ʍH]ž 7"[dCX픟š!-Q"\Zdv^>cP\0D W[E>e]/!r*_|KǪ!2edr)'J·^Fvd8#[<]O+z ºjFC\bBj%ިWU!' G肛*ԥ*U Q3C8|F&RV)|2j)Nv&k|܇!>D !2$u;3T"!&PhCTvՅ4$TX(053!2 B9Ҋ+YeNhF.WV iy;c \ɮ m)vYk+B\ƺe)Ł2+N>T3*Yea.oPۯH!lJB;{f>j Cm$: dWi,+"9xh ${ҕ2xO*bmO|:P7| !d}'{ fPW{Rt_ru; –8UM$zFM*E_'2錮pQIf5#]QVg'K\bU ѓ f Z0D a!VF!<B G%Z?Fyy>4C" r\‡VVB aB!ֈ!$V"B?I{'dv(C0X$nD1|kߤN 5bsY|'!ӫpɠr4 tf!^*xNv 2PHgP`?>;!`"ˇ a(< v $LS&| VnDnK8/.VI2zc h~ZO׎8)`"̇P&$8R!x!\"|r i Pٞ C0OdOg~C6| B1iXFH`.+@>pZމ`\PF٤Rx[jC9r~V3FdZN%gBHܣ!@ēHq~=2ϊPL7BCƪ&ؓȷ>H57"C08TD{ uVXBJpMe\[57f:qR(053D>՜!H, MMAOyXM0 !an|ԓ=5 KBj8C9*L yo߂1):W  )!bfC w!4F2VE=YȇhGZW o:7]WzP!9WWg,Tۚ[ry*m>˨s NXz:Ct}y@, K) Me CЩmKf!|d"m2RVeN^5c=}R=!!|pV飛{f>KaNSRz2JhB!V0ϛfuٲILh& @k *ĠCkKDߑ(r4txˠ4^P Q (?+KC 9CA&}`mp#e|tCW/(Ǫ2hL۵0DpuH4ޟ/O^.53O^&_'ߓً3z>?M^NN<=>yzrO>>㷓c={^r+y϶={^c\^toz=Z5Cfn.%ZE( < Tá)@V 7hP` _kQ`s6P3P@S{<|`Fnp)#T@1čP DZbHW'5D_0DOzL4 @@K Q%Ƈ*#zA+@ @Q=5Ֆ; px_mvE9Rc.XHiD}Z( 'A(@f`?>Q}d0̀ڣ1Dt1 Ch !TdY°Bz9Xt4Ӈ'& bSS@c{*U4Z诧.PCpatl!X}vB :2!qܶW;P9YV(l%kcS `HgE!.2BF@Zbr b2D' Q5V@;Ĥ%&pd+Ը1D;֌!W\LSF-8**`e ːaSYogڠ(1B(0bXڰn n^}sCCL0ᒇ!j= " s*c54X j `s3)0İ Z?Ac a M+`eر Fg pPCTC+@_s /9T!-1,⒡@C CC aAԋOu",]P +PQoP @"B/(軡`yR! @(@Ɍz߮1]5(;Dž@('vBI)IݔXS0 (z 'b)CP !P` !z{IP !?pB0(z 'b)CP !P` !z{IP !?pB0(z '@ P @@Bm*o6o !UP` $䆴(xjZ03&~K0k> 8! +dH8>\(T !b6;[!jPZbE~ &?YBb\;j;'M( CY!>D׏: ‚\>;XJɵwA㤣W=`As4$tߗ@MUbtr܌nۀCZ!OTQ}G%P` DaATN.C s}N>kt 4WQ * [x**v`WA%fi}<vuM\ Ꜹ`@Tk!tՃh9CTp,0C ~ƅu1 4zJ#'wOJ>NeLf>y>&#P' !P` 4?*zvQ_ f$C ~Tq!T6yM7VtD3afsKCEW,,b_I\+CKxA+K;QgCh@ ?69b#H/y#rCh%R(E}SA /(0nKRfl.'ı(ʙP!0I^00D/2DP҄0RI)h;=>fΫ.ϺBҀpBNK̴i!ў !Z48hCwŸc: _bE Xq!!Kr"J\0h..tV]A ƚ"B$'U;!=c=_P`E4/\0D ce\ɮ(*y((RqIh )OXHѪwHmg)Pf !`QQ}S PqB႕!bFpp5ZCz/D0D (wਾ)0$[Ñ_`JnP{dQPWzьXz40ܝ@7 a,|`(0c:iĆ%`r=KgB(m0fTɇ0V߇PպPC/p"4/ Q!pT #l!b deXt NPe0Q  Z@9F^/CSXYC`q`AU!S8 @~*0E_XՓh7#*>pCD(@a-CpT`< =IdPNP0D?A @r !&pɃS QQP S0<`*()#(w8 K"u-4P`( !M ;DaATS@(0C P H(Q 1oGh @Dn*p.(z F@DyA(Ц`Ə6o DaAT~^/Z@' !P` DaATaꧨ(|IB(PQ0G{@Ubkv[4%@ *C@*£ +"P hWK^DA^}`0QXU6Wj}`x /7h]5V]Zҟ|#SqQQ DaATaru\>DN?}cnOG3pW l-"Pv!P` DaATa!#$@}Q** wJK,6Zmځ`Ҏ oUy JyMh[kj6HNo,`Ən< @&1c;V6uQ~ ? 0FQ%O@ P0$ܺBI~Q*Mob \!Sx] hE`P k =.:CH>ʌ ֈ.ðr4O3\,(V?r0&?F.RChN0 P(,*l2}¨!վv*!l9p q { 3ce6YS3bc:/ԥ@Df 6@MWm6GEeM@SO$V/l^uit)C@*Q32溭OF+/g;K_C0~L& DaATa]F+/-t< #T #CD0G'wN+ p.P[2 +]׮@D @*#LBz|RQXUW6@(=e: 1O< O+\CL: Q p/̓PM`# p@C0~s!µV(,*\tW-(:Q 1{ W( GxOjq8(aCk5QXUE %ڀ\*(wȩ]Xr pnS&-!:<*$GrQ|'S6hӥPaϒTUcU` Z|1G@T_ Q- F@0Rx0"K7B(PB2z,4V5sA(/mkgQ{̖h@Pk1/'C*6QXU~e]0m*<@ f\ö!Ӫ} 4܉<(-]‚¥/a`~_ ƁP *0wa\6.X-xP LSC~CZ !B~#J_T`  "& ~o}%K~ 1֯}D #<Rm< @aٕC24pG /C~aR> WQ7A>j6)Y~BJq,ZT?/rSP>tTIZv*M\LL3NCw‚SOa0:o!up(;C_5|8|R!qGaATZ>D-(:Q y*1(,*I?B(OFϥz p(FbAN0DV*QZ @ !5x_PFNT^Z(,*\I8 @)#cMbGaATi+P=b(&[V @DUP t@_IX‚cU @ Ω,qA(Qqh$(C@*Qkdp-(:Q 1ɝJ(,*\2d0X-P`(0B p~Jуyb\kjTi-PP0G᧎W *$G"ko%kU> J+C@*Q+5ҁVr5#d0DB* !F?8v DaATL& ^1ۄZU?6!*w헣!D-(:Q #T wOP S0G?o5M pWsA(s`(0B p{44 @6C0~y\T z*(:Q #T wOP S0G?o5M pWsA(s`1+ !;‚=<(T 1sM':j *P`1+0IC9NCQ)D P \0b L':‡P @C9u 0Dg7B@(C!Ƭt#|^%K0Ę#h]wpC|vQ)D P \0b 7vXÿ%C*P TW 1Zz -0NFC4*/*P 1ffx|oC3T 1{Ch́O  @C!Ƭ"OiZ6 CT 1:;671Qڠ`0Ęh!TTF401P 1:{Uj*X( 1fa>|CS@C9Nn6 rLG5P @p`1+0"CI(R 1Z]2z!tT QeW Ӊ!{=P.cu%ínv>QT\Gi"8`2*[в4  @)h5:d! *)R&0LIkN?Q+<)r Es>ʕ|^(Е`2*P;CDM`RDD&!Oq^(05FG,D0lg,!֏z@W !Bʴ@ {X UB)h5:d! !*r bj8 t"$L !]u8/Q !Z8Y`0DT/P t"$L !]u8/Q !Z8Y`0DT/P t"$L !]u8/Q !Z8Y`0DT/P t"$L Yͅ\[[bwl]Xkk@M S WP ^0D' Q a]%0{ı`wǸ@(08!A eZU5`AU^H𔴞Y斚!>:b4 T0D' Q 9a 0yl(0\!A eZU pkpk bI3CInQ2BKנ‡nCa)h5:d! !48"4Z(0\!A eZU w9͍e)!P`p !Z8Y0JZc9A[\ r 0`(0t!A eZUvzR Q6T8IzC(h5:d! !X4C E;C5iUn"6`<b2舓(%`h'`2*C cEDCq`L(0t!A eZU zNJC(h5:d! !qP` !Bʴ 1Q jtBC!&2C5iU:KuEokƬ]3[V<v_FPCqzZ_ vjm=?CN(0t!A eZU5`A[t\\Z$u.ܣ+j-`h?`V#N@ !@q]0bͭm^nP] F0DHPCVh!6!4As4(i!̫0= :;|tи(sFG,D2`4hr'C2=v<(0!A eZU !d,#M1舓(P!u;Dma[6BU8BP`" !Bʴ@ul_|B`ƅ6K)2DaATފA(о`^9"#C(P`F6!dCQ"y~@(0 ս&'x7C b2 H0Do#tV;Ctux.c@/ FbW^/C!F#C6Na2}!C{%<1^Q 1P+!Fv=`h `F6 `7C bX/Z FbWC_ב=ۉ|ȸ(0,m"<<(n핃!bۘ2V1PmXu_e`>út @( ս At/CD}( @umXEA QkF8(R 1P+6FCDA=P @0D};"H&w!0f\`5_0DEM|H(0k^`!F5 CTqx !*j DFB(]CT 1bwW QQS0 :_4 @0Dׯ`t͸(0k^`!P` !*v8~5Ck%@A(]CT 1#P Q+)b]3. B0Dׯ!vDFB(?Ɗ Xb_6/>E%`ׯzTW> |'ˢڐ" *(@xvxogxY͇$P`VO7?;NΫCTp,)@j\@ԔGGO{v  @* !z"ބ@`r2}_jۇONiǧ ztB1vCTp,)B }‚׫;G @* !Z >I C(꯫6N^~Z^uI{ҍg'dCTX(@E\} C|Nu_A%Ë:yYCTp8 )`a3EMFU3 *5oz;a\ʇP̆rPg҇( !Z uˡ0)`g.OMXjW?ZȵpBCL#\H, fZ||IʛP6>LJ0Ϯbe0Dk"N@NE2DHy]#h&CZCHbfNeqb7C k,a2Xc " r׹GP!)H:!BDbBuC$cʍP>IJȇfHr5ǺB\ a=, P @(Իi¼7X(X!.qDN/rChcf<2 <cԚ/fR3D %o7GO|*!,\ƟB f6!XF P@P4;,e!vLJPf`N+"|КO&2 !sfVn[)f{,ۗn_)l#a ؇ oG|#2!Lb_i}M=HXq>M}RA4>/f>DScCtI5!F/ `:}i/O|S>DA]ڤ~V!P*š~`XFߺVe!o߻  pu9/ +Cs*9!:Z`0bsIb;on;gqAAn5G )C!FႿ*! kr_S|`yˠ*_yXŚPu;/$|ͭrDy5OaʗCXc;M?1=V8U:}@>D8D 8eC@0]@(ہ܈B:EnDMChH7"r#܇728 r(Ө0DRy; Ғ4C "<K; E\&(Bȇ΄p :aS?g,IFBxCA&!u#>| hG0zp7o|Og6< ˚>Qȇ<{ٕcCnD҆XӥM>KOdpd4ICQ@ Q.BrpGW>4'5XC!?f%3W Q*D G>*  " #+$ xX49|n׶ȇ@5+ 8/\!p:A!Y""}NQCH(v إ!D=$YLu=g4kOgdȏ 0Q8?UeDFyCqaB9-bAQTy)ǐX1$qΖ@?GzOg6,郠i&\e$pV3; kզ>L^OF)vcm~dCC."$͵=\|j~Y '!59V& |Vܶ\|]A(e| ,Za=""ǑUD*y[?2)Ǔ-牱-F)J^n9m3s,a<[ܳդUBp~C6p`Q9ɹ85ÖCDC{*Gq#*$`z7fgA*:q(@3+Ms9_!hʳUmR:< 5̮s nA Rx `-̍r&b $ hk dș.ʇH37Bz3Ѱ|r(@>*kAdEP2'x۹ȇ-H¹t)R^Qe>șXዑɐabG'ed,eYwSYͶ6O*BT`u#Tz&Q +Lq8ʁ*Us6A6a‡oχ(@ i(@ԕ؁XSj:ȣ+$y~|,)Z!ZX=Il[8i+b 7ɬmbٮIlDCˇP#Y7RH]؁XIb0BNw>|C@(Q؇2`NCꝑ.Uj~5\ ױ^:jAwF/.E*2X/#C4A 'Z @ %`OB{_yNx*b~9!U@!tHcO eUy, Z;ceH`2>!A[p:(z@7> BʇCRș6@D,%$Ñ|8h3Q@ԺDxȇ@(P ЇȞHC[L7b2b"r΢ier sEDP) ֶkz5Ce2W?'X/B$(@>D!X/Іkbkw$Vښv$Vڒu$Vzqt$Vڌk u$VzWs%o.I(1?*6.I(V缳$&ɶІkټ$&ɶ\/٢$&ɶЛت$&ɶ:\̯٦$&ɶٶ$&ɶZ|[ؾ$&ɶКm$&ɶ|߱SwILmErwswILmEU8ص$&ɶJ٭$&ɶЫ9{pwILmE9?gwILmEWr*$ۊBUd$ۊB/$%1I<%1I^Kbl+ xKbl+ -1CKbl+ xúKbl+ Gt$VZ>Â#ۊB 4,cd[Q󼠻$ȶadz|$ȶBo[{62OIENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagecolorallocatealpha.png0100644000101200010120000000545311272547572026065 0ustar docbuilderdocbuilderPNG  IHDR,," IDATxAvEрO{)="7SZQi3="=󝄛b#IlpHd1$pSc$2 `-#d v2QP5:dc>VC"FGd to拌j1cxNґHv(;$B/t l%WD `[!ZtHzOP{(p #BHÐ5(p<[Fx _J"/&cPshe!bD8cЁ0$q(ЇUq>o[?~cyF5~OwHOh435!>80w5Ix # 2,۬)}NF:4M-qhcpŸ/>ϯ7:5,KI)v D Y>P)Mn>sV憍 Ǹ=2_d˯ѽ/҄7n/n |m0kyEF䏷-,^9 ˜,k|=1mGYrIF[sA(C%e,Zck@zD׏!+"Ĉ#8:E'’FNqK1 =9 B@a1A03CVrD8Pm JСaAj0 ABt8mA*1 pArt؛yA']*t+S>BNDa+`:|] +VN~Z=nf,0j4[k}k27RD^`EeM. njܘI[520KD\.?|M.#qa"bY&aVĒ&Ll'!oTFg pwzðAwpjo0vw$ ,A;I}gyGR־Sl>x.zHa{Y$G@ai"eX'M>a!PRyI5-Y _@1)#y y?Vx'v{Vu;5sUVXI PHz 'T'`'źi%EO'"?_:U2Q3`}Q6`XanaMԼ1ǭ ?KeoX[L̈́#M4 7M7 7G"0$ޣv; 7F", O/#"*iޕF+a"AGH{$ڈU$ya{'$! 6D! FbD! FbD! FbD! FbD! FbD! FbD! FbD! FbD! FbD! FbD! FbD! FbD! FbD! F_u@*{>IENDB`html/images/21009b70229598c6a80eef8b45bf282b-imageconvolution_emboss.png0100644000101200010120000000567411272547573026171 0ustar docbuilderdocbuilderPNG  IHDRxC`1PLTEilnphgfd맪Ϛ̸׸ٌosikGF_gdeKHI㞜trsYVW"swno_^}vxw{lo" 趷WX|^`?=PgiŞUVxͮ1.9hjfh\[vljSQh.+/ťkndf꒕Åtxٕrvmp{}Z[~tsrtzzqtNNkkkٌ{~uyacjmnq;8<[\LKcސRRrCBX硤(%*97G{utRNS@fjIDATXýglǕ{{{0A:<6$B @!GcOnMeH6ŗ,6yT~_ꗿ~?o׾/_>Oꓟ>xwx7ox^Wꕯx^/xg?xӞ'?OxG?ꑏx?{{Wu{nw˝NiV9%j|F{]PBT4ϨoG} x$t>EnzM:Ek(Q7WJP}֛r`Mĩ˞Fi)Fٕʙ-YE*MQz]Y]0QelS2E#V1R|ܦo \#u(@W "*7I^v7[YsqLF.T:owghkU:4pbNikVjMMHf8XtB[9K 0;XONNf{4"H*֡^yԞCPo^P1O!]C$W"_to92e=+RzWHSN*wJ;!$[#kHİ[q`kkX7Z0 [Dt=?=n/ޕxtxQap*tE*Hbj /tvC)_<AvV;V0Z]Ap\ja6\o *^+\N1a֕PHl<ǁPuuVf=ߡcpsꈤ,1k!'E THW8A3qJ.VkO ^,a *{/٫rd% l=sLiUtj_s`(FUz!E?$]cegۥP=:Ʈ:ZsY.<7 *[2]Fl*B5/Z[$NjU}FI+1(^2ujl} =ŤR]Μ&Fz{m{x+7| ';8xx7i{zXjCoF)&i|;xeRӸ:T?%z8("gx7׺pӛ}>gutjMt0ĪEbr}W l,k~ Y/-tMc|'چy?=G:a߽ߢ܂/w/yFu6" 6-҈LL4X`Or۰#4B%tp;4N]BOj^{JQh毋nZ.pmGj(5Vf57F* {km ] 2({U;M6Vr u@)Jju ٦$)nóo»vWFb FL,B^M?9X hm%q&,t;6ahuI8?#################ÿrV.mIENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagecopyresampled.jpg0100644000101200010120000000227611272547573025100 0ustar docbuilderdocbuilderJFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222/" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?6z<1S\&IZ&l'V46d-Ա<5i:]fRkYrI1BqWkv{vylŮfiت2?:&5W*J'|ztiv1=]֣֚+IAx9W~6|T&⛯JR0pH?e1z Z¬]nWyok-LҔo.?OWm.SWg,v,S[m' VQ,ECʹ=AW?kPI"jVڠ EsM##'9~8yvztr~{q:,yy$wA39n ZVy\jK]:^)|;v{%o]6V~}ci4nZ^HX x޵A: X!0`pl\;W͚Wt[9mNF#4J3,q -!FBk%I /#7O@<+n}qNGcg3{L`^*4%kǗ^]YMɦ4m:O.x? |}|mz:To]KWx.?|CgSo=FCC`~_|ij|rtӬ<i>\X]KG  1Y֚ƜTkcPC,oOg>}t}.XOjlƈr#?C3_ x}YQ RqINM9>h\s S|rk}:Zr? U-|U^,gmWJ֣Vּkqc 0^6YC̒؛YѦ/L#o|{6*O&,`ha-l# ygs[htLUJcZmPW9{yX Χ#j'=G u};laǎ|ch;M7DmBR+x,Ċ n_<ͧ/:gG/ xY|-aխPM6ObՎE~qbppNtvwVgrM5$|cqc~_?9>?8Ϯ>><6N s~'z)sIm%䓳3x_X 2Y5M?F4You=[U: _^K ( qq,qFgpVMSV; WZԬ42KGS#Wxt@Ȋ]A,au u=KDaI-˨Nje0]Z[kVvJaJK&F|'g8ᰴ%iR}[KFIwԙՅ%y-tֽh)nx/:x_Vv<1?c4oz|k%ῖKz֩h"[aY<ګPbcƺFC\$46$EԚ D@KC5|sxPO\Kid忑$м̂h: J2I&1P3bNY,K31%rXI5Þ`00\T9礟6retKnOit{Gx⯏|_3-B9fZ. G[@hQayPs;Ǟ1u?K4ŅqOnN<<_7//*q ][}1."/ fyTq0Y8J1Ku1=lvu_zRzz^ӧڰm`O(gEO?N?J|qËf/~7ۻs?˾{#@ eA8?ֶ|5[#-ÿZE|]݉U`Pv DP]@oA⽻Ktiõ|)} Cl6due%̈V,d<.:Z׷S :\[io/=-;mB&Zfs4)}MV/3ny@̷@I#?/ůcǞ/{8E F[Eo ,,b5TG;[jROL Fqe + o:rC%' p}V-OQd%rI$ē%1%I$$_y䰰5 <(SQT웖Mt8ƾ3VOCžӣ5q_5+8 --'aJ5H;+ؓ4W_|IOOiC>!`𝥣|%𯇵i7jqI4C<>ly#C$} HA*@_:1Œp7ԎHa$㟴n&ɲ̒RS]u]ŎW]S|im[ OO6Oh_?b,3P]oUʒM';jGiag1Gy15ẩFYhӔZߪo0&:8''^NK_W>?,.8dx#~k ;L}{C+Kx1[THfEYRK$4(K{S ܄rGs؂XdGqZ?o=kŏ+}fK?iZVh{Ůr^!xRwIJG_h >%~ϟ i؇֣md]յ-[Pβ˴'A"l37)ST_ ڮgi'iluxm%??ۿ Kg]Tt${%AF|"{Hևmc\4S$p˹("2{݀#*.rk?h~%ꟳ!v%m|Hb x Rt(h <8FQI/&~_JY@Yxcí{Z*bN)V}c)-w\¾{=4߯Wv:tB*cw_K $n}gJuLg' emݴ K<4r"1(HA~h 4dZĞ s$D-#Qh_,Sj  zhow5Gi>Ե_ix^qX\\?mQknnfvg4.~/A//xx+ƷiͤBnKP}"m|D&$°8xiehaw7vSVw}w3Ng']u:x^mCn@DoYy^|B{9ʟV5(ρ$3^SҵSKnf{nW-oJv;xHEKwbi»"'\``gNO#tC81w[Ih[Gᑵ@ϙ(\B<18 عQ4|]&-uޮ^"s/g=c4Hdž$t2oۈ-B2Hoh_]R/;h {MtU"MsPI#,Bv(C.K|PcŗJU2 $q~4'⏂NOB5k3c?,oL/*RDZdOY[_(h6h,oxKMɹ=jw[WZvRVL5u'$_cG&b@rq>1|\u6iV+=JٍYo4-Qjyi6Uo5hp`xmlK)=Z'bu >j xHWK~|/yH_Gl5?htKR;<-٥Y>?3)N(/y[~2zӕZuXTώ/t!-Ku Ɵ o>xk Pռkl0 0*_4 ^X[Wx'Ǻ>ۑk-[KYմĶaz=ϒ\*UXu?/> 㗾X EYj1iDZ&; ? |e {)Qy$y=Dф)G}y/fRN6Adcz~ڿ>?oB>_E6<=n.m8Λb{Bď@! ;k+Ў=y{Ү|L~KQ R *U `a1%8IFRIɭ%FeM]'4_&4C Yqk^6m~_|]x[_~ׅ>3xFѿ;-hag.[m$(h _O[Mߵ]fi|mq xkmSƺ'K/oQu8VB;-o-C2ʙveJ5e}a{En+]FJڊo_yn%[\s,vX痻o3Ͼc'Sק RYvnʉƷN@ A8N$wퟡzǧ;lXt];{~'ϯ|?_ƛ' Nye }pq$Jw8m":lAS)[>tNJ媌[;]_y6?-/NK Io|h-p1fY.OCbZְPܞ.=?f6Wh, =B @g}sRy+oE.^#u2LQ~(~! Hg)FZ;WSk\m[6Z:ȷvnM1yjXcV@|Z6u$8b{AOdK] L=4n)Z~On] ~xJѾ|5HH[{8.N9 )KN,5BI $zgm(gyHCXNkUPxR_ԴAzYo GP7$ Q/@p`}ZgwCxI4_kvW6j:U||g>?y{GdXl7U)a8wFki{|eש]VsOl[mt< ci?f6GMk\'<[j7:eoJtQѮ~mǧ* h ?iuYmYqx[ZءxmT\mU,r1|_H|T#񧎼EKgh:=̚o/uK[I/. XEq1^COٿZRxr]P7?LCծ4_Gÿc^:֖GW/}Z#hn̒<:';q8AUi;E%nڄcBa{F6KOo=[O _N?_5ӕX*ѧcj7Y6D1U %dVLg W&fa4GGi5^[lAP@/u:> ~$|O4_~vkԴԷ3<yʻ7ae_]|-xk⫪׻"q39^i-O}roZsּE FΣ}5<2W 8.z>93Ήu|NdW6$ѯ-iY ?F8.Iq3$G^5x3$s9ŭhC{78b1@fiaBZE@FHA/6QU( ^ͥeYy_i涊JZ~g_ާ%G+0l;MM`%2V r$w>VH +qzi^m溿n'ŎwK+[{lVڪY,?8?K-6IN[u[qeiT%w*27W/cOU3:+{\ wceQlדܷ-%+p8g<+//t"GK|"*]EE$3Xರ !x*Gw.AvŌv3ؤ++nǸ1gW+SO^+>:Z_ ~,iťx्1m^\v)."V4 0Fsf=N4dYٯ[0ӝZ.һkGFEV$"/YP8 {-g&|^Cx>|)\mH>bl Ea{F#ul< _ 8x+6V<_ŔyHW4cp_?tg!qRK/ x^T|+C[[u: 4K[HZ[7gq8/N5\T5z[xU*Y5{u??-vַkmq1+H2@,BPX_'CI!fe>oyiՃk/ #E)y/.17'A@nky?35'ī{񗃵M?$σKy~yuh#XVg\¿/˪6:}tx"E$t@֚N"I%g1To r,E\t:tZt%nfi_wV<Qwrڵ_tvtϦqB#?篾{Ѓs($r Ӂq1 _C>w-fg%U]?Ţ>[{}[TNxN#J+?5/>=ݼrŶ1O x3QYc兙x%PZWjg8g$ZoJw٦}N2Xxkյ/[__WZl,C< w┶v_# ;}iw~ /4'I׵ $.[PCq4*u+}V wVXR~Bv K-!ChCot&(Hi$^ {VУ[uќe86~;?+mĚu][CmmE.oT;إ7_fU‘#7|U Hҟ궷F2o'ILHH.>`_=7Jceyw6{I?|yXyI)Q(7ɞogN%Mkhvo}Sk?;/~_7?fs~)kxUx? /-ſg/IWdkjr`I>V5 ula]B ϩ,cqyyxnIn0?1`c$TV{[WwAo߃׭>ke(Z}^/ѾXQi5]?JխtRZ=w+%Hn2e~?J_x>(&_x ¶.{ x¶ x^'im/x4X5YI0"GzASӿc:C" oXYV.èµd*-[VRUc9k-4ۯs~mRyݟAK[__O3߱U-xOok~4xM#Ps5V2Wtһq_z,Yi8qנWxsyqr:rr%%tϥʼ9O;~h;O-.]F7%N919pc#"p=<-_>YWXӼOC}^/ZzfR\eu $g)FP@qۜg>]QԭPm<Dhp8saabe)*Gu9𘯪IEIkloS"~Пi~2x ;oGǣDRԚMW>"toe.N.{`f3Fc̒-$hsko|[[E_j^"ť*/< PC-̑J4[}>?a<;o\\\q ZvI@|'+\?&Ѭ>g1Fy D|/=빆r+37 `h]j]w{X)xom:oVҴ{)uyu m&}cPMԮ7Unn#\}@IUvŸչObyn!xf5=-RԜ~1K؞O\q汥Z FrV8J-u_Tց(+I]v?_*ë&c$Q7u޵߇_K]gu/ ^N|=_C')мgxn&x!մG^iZ}B9v2v^$aÏ ~^ Ӽ%ޕ+:χo"t7Ym&mKA䷎_IwO$|K_U>{'4O ws>!,6 ww7pAݏn>*TQ~XJ:;(Z[˫$Qz%kKomC?o씄\k;ӓ ¯bO>:Xբwo__|瞟5~kI5k$临ޖz]]Ch`?QیSy:_ϏlO~Uۯǧ۶Zn sӿO_(OF~:EA藗OpnQu d}}_֓@OpPyz3^Aﶻ_EE3?<7qA4ȵ'8 }_g?hTGSY/_޷67zy6b+WjSi~}@ug]IM=kR, 1)㏜(~ZK6=?WGAqwgp1#iF k5 m*-nmcLdJկ_μLHȥhPiO[TkEB<` t{_GWTGK/LJky.! Ƕ>3织M4a}iXx\5:upD=WxBvPk+gʛjugoz-:=os |?*n4^1 ^'Ï-738W}vWI|?u珼+[-YǪ[51EQa_'W|~^~$'WY,t xoSMzAe6ĚL=qZ̲zc=3xbqV]+g pEE.Zj9}Ͽӹé߷ONWI%P8=g)^Jf-4 \r}=Lqv4GOFxǸ \s=_ۥ4Oz)VmcgC>'G_oY'ltKjnftF3$UgsqNDR`~7Ak6׌O/m544m/^?~sO0iz^4a[y$cIfA/cȠž.𮱪xsTfjw._XIkizr:mr5ݽŭռ$7E,0;/:׃꿲íjmgW5m[SAS5=BWuu{{w,Www2qsq,M#rs|#U8=5zk$qnY+Gwi+LhYP@{[xӁ=ۛ`Qǧg'O i >ޛ|+o?<#c_'5kt4> 4ngIHؠA ,\qQ[ͫ;oG04ԑn`8`kz3}_O8KGO)neq5JK˵G ^7A oc bX Iּ|Wynӌn^N>^YEϭyl}ڃ\nl/o&U&3 lɿi+~ \9N|gi~sOX׆+- jZƷwNgcw%櫩_X[qu"EȀO xs?_xDOA֕xozUz]e ޛZ~au4W6w[2K)"KcojO+eAjևi΍wQixV;Sӯxn.X\|>eb1iAY}UO/ mwo>s#?ି|AhZNh泧sNhjZIjAa NӖeTo*))~?j/ËK?_.,jW ׊5a:L^(_x<='@})$Z_ 2B+ pOAځӠ{z?JVgʶ"'6TnXEYY4?c'o|,¯ tImx>;S^!ּEIunf_Bz*i^o?HztGoR@8==zuh!O^p><~R`z;yAS篱(:#q\Swt?html/images/21009b70229598c6a80eef8b45bf282b-imagecreatefromstring.png0100644000101200010120000000021211272547574025600 0ustar docbuilderdocbuilderPNG  IHDRr,PLTEٟ?IDATc`>o`&l@b $pdf a`9H0 @oemIENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagecreatetruecolor.png0100644000101200010120000000043711272547574025435 0ustar docbuilderdocbuilderPNG  IHDRx0nIDATXI Ei5pl{."YVm:H-38.B!Q|m`j^|3r: +Gr:_hZ*&_jil{65O%<_V iF KE? 2hs:`GaFӁ9˧^=[/;mk 8mW&+ ij%(s(~+EЄB!y"IENDB`html/images/21009b70229598c6a80eef8b45bf282b-imageellipse.png0100644000101200010120000000270211272547574023665 0ustar docbuilderdocbuilderPNG  IHDR,brIDATx[r; P+܏]b$ uI'7 H$w I!O֐<^&˭EݗړHnw޽7dx ~sIܜҏTt%ݨ(IxjUdҞM؍̧R9$yԌՂ]g X/ թ|#R/*RQzzO &:`4#!5k8wxMnx$,wE@:hg K#$)ܰƈ[P\VOa EPga-h @r8U\]0qS8I;*tRܰN}0*?HCoe a`1 , 0SC DtbX@  a`1 , 0bX@  a`1 , la1 , 0~TU;7, 0NRq)qnX@  9Q6 :^g1q1b4L''f2'Ec72a )zR]BB-MA]'a nN#R._@\v[L7voK:m0U܃:9-d9,fQP }&u)E !BMQϙ*W#Q01RuOq\ ([?2HC~8={uw_f7ho)n~lgZQrܠGx /G?yș:BIENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagefilledarc.png0100644000101200010120000000131011272547574024147 0ustar docbuilderdocbuilderPNG  IHDRddIDATxq F;d;%we"ȟyY(șdDz x B\V\ڟ75v/[mM9ڒ4hKJO>۝-'zlq`lD űb:d0jz˺)f# S\2L6 >*EWEP$eXgK+Ysl.柷d=r7RAӦ,|eHN/]Nx`e۴ Gh=$=ӐB=_&[Հ+ &ROP-HN"uZYNHVSKQUkf:Gndhu CN5\W2HUcu S>N\2IXuc=TQu=Tl(#U< [0H;֋%Rdi$E#{Zq)pI%UJ0]Ԋ hַ RdyDf|Ml}f"_P+YH AS+YoL?j4(ó5Vܬ'/"f =vf6kKha`XhfTԊ4k9KhmHFԊ&4 K}Ԋaz7JqԊ6Je c-e?4[Z >Ԭ>')hӬ&(z4J`-!#eҗO_j?,OB FpkzO]R?w Y@ʖ ^d}R+8H\< a}-*kɲa1Z+8AВebĔWp%ˆjYdK Բ^%_lX@ b \hW !X@׿˭*a1 Wރpe_6, `1 K n柱lX@ bCX!,`/ mX@ bC, `1 !X@ bC, r>b?2eC, Ɗ_l|QX+²aA !X@E_Ƃ-aA *ˬ,DKBaA *S,$K$b*$#K.e*$K(h*$)K"k*$K(n`f kU@n,Y҃U?[$vcɂ׫,!VI/ƒ4XSJ/zԪ4 >iS,CZU`fAUU-K[qJewJk}JqjBJwjHJ}jNJhmBjTJhjHjZJhgNj` J՛qh֪&4X3kUÃUE**"Z`md O#xY,Kޘh RA|AXT}`_,nV#-oET}ˀ,NV{L!Iŋ F R4;lT#[< U0ăHՁEI D5TXO'[Hթ :՘N]Ô&[HՕ6Mna78Ru#_r-NV\Kѩu)׍tjMn%r]FzˆD* &^OP H5 {үRCP$Lr[bIE#^/IkIENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagefilterpixelate.png0100644000101200010120000001163211272547574025253 0ustar docbuilderdocbuilderPNG  IHDR38%aIDATx]it\ŕUu^j-Xe[ x7ĬYHfd̙ddr&IB™$$d@`5`bڼHn/ouYyReYCSm޺n&0%p:%%?( |rݞ!TT 4c&c<9骡k'NriM:h>5?G~AW y eeUd𢡄J9PJY$g:T:98c1684`i>LL3*9)HWW > &{c"\^иqQyus¥aIrp fra&cٜsU΁[$Rs(-2c{Kj 1Xlf(F{Ȿho6✝L:`mm],,{C.Kq*xsGY9h @%8EZs9s9jt=k*gl&&)3'}tk֮Y׼jҥ˛/B@@ՌLFKDaAvZu$Ȥ6ޞƅo3./t$Be/ݱ&B(dzD0T-9OCkgˉWF# >@rz#8|هg֎fO~ۖtᮯl{%%L"f)3O?QWsӷ'іyVzq;*ȃ?h|4g?Z :z_D]ᒫNa*E7 IKqZ<}A_t\:7Wi`ar{c*/e2)#G?zU*!E[y=.A*qӾoc rZA[nd֭d[͛~LVAvFEM_>D ixz;䞻>/ʥx.?pZxU {x ~A^y|R r[O?Wg؟0 ~ᇾ%myT!sSrNJ8rn mp*s1 ( Hӭ5aE%иYwHT Νzj4ڒmxÌKV-kïS>q[?-k_ Ou% /aO R-֭y? RW7m͜vu +SifBv'K ۏr+AŗŠՅkjpW ÈGs𾽿ёhJAP$@1rY AjKί rtaŧrib?_>4We_uB$1WG[c#-c%I]F*RKes}gq.M\Nx뙧4-̬r?E]ټf +Hi ٌ È{5-ُ?kZȻ/ C}FmzĺQ۳lk/)Kh+/pg``8/'P(kZ2E!CB(!Tv󺌒zߞ=Q$x7m3̤r$g905Mkiib{apwhbC66v8Z:}3X,tP1/ sawDi2L5u16ə+ιJU8O ;+>#r9U׵TX|MyYuY. DNSq0m"pC 㺞s5dd9LS3Mqkz&nhK&\κ&|.KP">v B,.w/'SK"A<6 Ф(n/X^Q8]N͙!~Rܥ{ڈ߉0x&猙Q5MSsxTSU4ͳk;IENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagelayereffect.png0100644000101200010120000000162511272547575024525 0ustar docbuilderdocbuilderPNG  IHDRdd\IDATx=R0zU*ጔh}JROa#jYk4{$ymrܥ݁ߤ(aJX(aJXZtu X]FS u@dcDJybL8bβblXyQayŃW`y|8bޱr ntG~LV$Chfuql$9Khe`5[1kK\.ZZ]KmRއ/Zg [=rpdO=^4Af, LCpL(R%T5#5H'^BXK¨zLĝ)=6Y1jЃ԰1:,ڇ2`ig|^mŊ2 hk2)XѴ SV?E.T5u jfww%,@XX%,@ P%,@X!}Z)a?1pZ 35uv}}u qYr^LsIcMfG9j19\MpZ?zx|8^2f_O5 !2[^ĝW͆EFz=LSڥCLIKo+p[$Z~O+od1{즹s5h<44 wYMk)sUmSqTZrݩEQcnt}n;Y^7v'/$߳omrwwb;Y^(2΄s>răwi"YY1'vF^YVW1;-O뛢9r|r4d[kwӕByt+x@ P%,@ P^@IENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagerotate.jpg0100644000101200010120000001522411272547576023527 0ustar docbuilderdocbuilderJFIF&o !>Qu8?'?[o;OJ~oߎV WǺ7[':΅}x:'|3o k:"xi4_|BK<_׀?d.xH˂n˼3ᜣ -4Vw~?oI?4].[ ~~)_ ܽ׈a" X$FzׯlSehxiE&n̖w%)(IBi9J)m$v3>~9n#<j]3Vo:kcDto_H`otOMKbXz@@q:}z#+<{3_K,*q_qj>)4խemNu~~ܿWao ~3֧yuGHmt%' iWV:!VlE{hzwg.jkx2+ֺş ఼w5u=߈5 +ƾ;%x6n-;F!,e`Ho=:{s_Oc?w¿-(]"Ծ%z]5McP<9am_~m{wH%/gh`׍xkqx\$T(/5BJ*V8eYBJ|KWk??/o_e>? _}?o jPg_Zn5/ xL4˭W"G !+xoSu8<#?Yn|0_>kGm?kw}KZ ]jgRIִgL^xm?Ýc^ _ῈG7燵˽ OMҵ 6[:֍k][$x{MM>&F+帘SGcBx&ԒM>Y;E?S n+ݩg/K?־;F> hIwo ӭ/tZEeY]u}kw-k%Ư~zf+B|b)7 /tXyMVU <ج3.*nU "0ڜbΚKwg 8XZXhrY7RQZ^񕞩-n?8"Կg_ e鶾)߃k:Xx~6qAahzsmz;-RY[Mi8P?GP_!^.мvigWv x"çAo|S-< j ZA}-嵴v庎J:Ic q[Rn={źC߅ռ5 iW ݺ0{ G^n|#_xďjY<_1J,|9E}>y#+n"Yyx|Ia2x|- UʍǙ0mm4XVNrj]iut*w:7h|Ox;51񖳨xߎ xRox?:e)J>"OWٱY}q q,m'Q_H?c> xcwGVGznii_ߊ^wgxYvtͮ qeNm߷w<gkh4෋u -Lvm쭭դXJ 2<860KNq?gBNT3[sJwG IaԜ .V^]pi^(o> c t~& W6.9%|ύ3>Nkτhm*z~}o>/ixEZ\hW>M(Mr[m|Co xx?xs^eᶅ|L uYDakGM܉;?̗L|SO~?~~>YiԴƟiᏇ3ʮh<-_7 % %[ϸwy qYl}ZUںJ48Iv2棈F&to'Au{sjW^j7W܎ۚKٞݏ,4I^:zAA<97R|c WMoxkW (57_5-Zf,e>x37 ~%όJI4-Sľ"ԢҴ=yM>+Bֲ6WwslD7`1V#7tT'eE%9鸥u%(tծ 5*S{׽޺yqe_dOSsE&=|c[?~G J־k:>kk~_ tizd!5#m}?jp_xCo>%QxUosw.5}> _>ּ# jOqxKHOEjޝu4>l2Zk:M/ WIgb_\~ɟu6uK߇\tt-sK.5kb%֡< I}7_:s[kԞ#׼kO y61z|CHvR kHS@)7Hp"lq2<1*4*n rVnjMxjb *ӛuO^} ||'|W-{L0:k`Cj'$^ j~9;Pg?)ׁ,K?h/_kͮisi~ﴤf{h'KDjXB`2F8 F9 aNJ\Cw4Z6x-fd5P]Ztso5pCG~*C Nh<>&TYR{+JRJR9f8J6[$3| +|f?zx?)f"<iW;j+ j%ݻZ]2iwZUͣ5Ɵqm%`a؛F|b`go|55xSN~~<1m/xk{x=o$^_oߴ^!4,V2OKkLpW.r$D>4|nKQ} EŽͣ?\wgBdm K?\n3eV/'R?KK%4I 0Tc ޓ"nk{FRXۻsrU.6 L6a2mQiv+kXޏa- Z9:c/Olv5e&#? cPB?q䭊|XfzwhDVuw=<<'_|e}^>r[5r8iozӹo ?](7br?wvy>!ʒM"$oNCQtƨ$CgΟ]w|fc0QYk_GD"uϽ ~al!wO sx'~Eq9wRZQd Fxz]ץ/{̻g<;xow]WU-$4>9EHXT޻?%9c谰0ߣ%ph F:c!f~ W0FBHUuDZL?vᑑ, ~~pDkd'~z"aX)z'L0$ŋ+S<о}B?owl}so,{~_7aʲy#L^[\87w߷>7jjW uY1a@qc1,ͥh󱝓l6ۃ Օ|T4f˶<#B@"I!ұwmڌJ<)H`q$8X ,G#őH`q$8X ,G#őH`q$8X ,G#őH`q$8X ,G0]"OIENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagesetstyle.jpg0100644000101200010120000000510511272547576024102 0ustar docbuilderdocbuilderJFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222dd" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?;950Cncu}dxː6ҒK_`ꓲʙkސ=\HMj??QEQQEQEVdž<1x\H n$噸Huw=d~`IƩr#H͸f"AQ$| C͸ uv뇸q(rI | C͸ uv뇸q(rI:> eᴚo,.>n# 23*u訩N5`]5gƝ.:fMQG|3{w,~F$0@s4WϾ?GQE}}},5M0oa=zH߸U$f ^}هs@2pbI-??׮EQL xcTvAI3p {(<1S:Fq',D#HK,,q&pQ@K,,q&pQz(xKoϛq&VpQOxKoϛq&VpQ~@?OkjmĜ* ̒I$'<]Mp$H:"22I$JǢ ( (5!05َ2~["ct"6NYWsFG j.!4<ۉ9fn$]e@?ax':o4o\5pu>s$IbRV)s^Rz/tbyap;E8^I'dr:֗= ߟ6L6a#-=:֗= ߟ6L6a#-=.&yۉ8U^$e?$I Ox\Wn$UxHtDddI$EQEQE j.!4<ۉ9fn$]e@'<1x\H n$噸Huw=d~`I_~Ņn$]]w>2pܒH_~Ņn$]]w>2pܒOQEW/i~n$#av22ݳܐ i~n$#av22ݳܐɾ'=u#&2||9DD9W$ppoΛrOx\Wn$UxHtDddI$E2B((<1S:Fq',D#Hdž5OkDmĜ7 粌  ]/zmĘk\=ÎFN{I< ]/zmĘk\=ÎFN{I( u/z>mę[[Dl=ÎFF[{mę[[Dl=ÎFF[{'<]Mp$H:"22I$@Tv6Iª ;($IǢגK]^3VU~Tޯp>ù 8q܊+^=r ,Yݘ'_ILa-n^]_ֹQE2( ]/zmĘk\=ÎFN{I( u/z>mę[[Dl=ÎFF[{mę[[Dl=ÎFF[{'<]Mp$H:"22I$@Tv6Iª ;($IǢ((ҳ[ )68WNnj h)$f >;*n}st4֫EUEljOx\Wn$UxHtDddI$EQEQEQEQE{Ï?\kZWmk$I[2,1fb(html/images/21009b70229598c6a80eef8b45bf282b-imagesetthickness.png0100644000101200010120000000057111272547577024744 0ustar docbuilderdocbuilderPNG  IHDRdL\@IDATxA @L_< El$Aqgg a a a a a8vL=?dEBX$EBX$^޿?}X$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$s̵s06 a a3@6 a a a a al DIENDB`html/images/21009b70229598c6a80eef8b45bf282b-imagesettile.png0100644000101200010120000005312011272547577023704 0ustar docbuilderdocbuilderPNG  IHDR":9 IDATx=h$I> hA@Aa5Tp )*@eQIdOmHޕYm,HƁ84HUB1FB$B!רYTR?~ S/쬈Ȉ' Җ/E?ZׯUht(~^xxxm2!3Yf߿K%kaPT0?3y6K^_J (TL44ɲptq1R GeYFQ}yz=y1h#6GZ̟u||$yﲇaݻ/lgЯ /XN~t6]QD8V^S)UGQF|(1(z{VF|:~Tp>j'sE;݄aq^txn yY݃|\QՕ1b>ڳY\WWfpUu`?GA}j`29?w~dM\\P)&/lѯ /ǫ`.ݓ,|_h>۝V'hNd29s4a@eYZ__yAUUEQ)M!,Kg/lѯ v, NgO|/ˢՊܤgL$W'#$)El*x<i2Oâ,ţ;j,2s||p}=?;m []omIMD֞'" `o(^tj=SZJP}W:XyG/8>2Eǚ+Av䅴0>3CrҺ󫵡H}XMϧ*mZǹBka3=buaY_F2%%QJ[>Qt/)~d}ݣgzv QHz. /\)[ŬH>lݘ E ljE R:?/  Y?wQ?bq ybr&x;ƫ.$%zË[,noM[}z~[_-V/,_ׂ6xA>/ ,@[/߅`jgΆW╤wȣ7$_TixXpkÑI 5 !H{sƒrXzB"t9,-@֝~yr"4W `FmZ(W,u2 X (?' .֒JJM"IQЂ49bIz,+d"M'a2%W[` #;-jYY/\ܓ0ͤa7P~l-Iɖ"bخ) KX[bD`0oz#|p/AH(0W/QǟpE(hunHYy^LCcJB5/ogrT Ҿ+ekTd$Ѡ@ "$\-@$p8f-VOa\bWǺlsDT] ZXkjFDJxq8 +T̖HJ&jows8R(.߽FP_NonYL2MSt]Ly웛Y7$/gϟ4nzSМV+~QpUEi ~WifZv}<%TJQY h%_][|82# Y`p ( OG+uZa'j. U }us?zwݝ\8Afu":? P#M~:8@JSGuwӑd<>>~1'<`.jl K*~{mڀ3"'`jvRAl*VpE2{Qf{{-M9Ii :7{e4DFKfmY>N~ յ.]㣣#f981*@;8. Z t`~?r &e{fb52A%Ѡߧ!-RP϶(oC1JH4 jCAk׏X}~n uԉ8Қ ̳n:0r$i9J8]ONN;8AGe jIhWL-¥|>mEuipkrڲN\` bS(fAJY6\r 0 ]uHI,t<!h٘y؊IF2IFQeI** kp-ARU;P1~Q-R(R4Ks̀e[1,^>aX=Ճ)HF/C붔:СvA _u-S4Dj4f9 {t=IR6HpJ5IѶbmox(@^YFC' RvNLA\V* v0δomz+oӲRa0F=;{N% onWGe*c$8]z^%IB$ϓƷU]x |oڪN3 '^솱(,Yu@q>l e*nK6U[j1Ż ֭ok""cw(I`U5f9|t. wS{SO? NORN'\P*v'wP`Mn怛4y$#qLp:FNhfz)5Yvg21f:>9JR{>ɮ:MS3ƔٙNF2 SbdvWWC/d(N"0KpL1hz֘%8nL6I iEQ(M*<8Ir5kE~4c<6`S@*LAlRY#hvc ~'pJeé $EQVڗJ58WY0Te [MY뮗{HQt4tlvHaӉ㈂9Q1n2LfTGZ(r@i  <+ 5+KS4AHUۊ 2jfw&;NC.T J Ua .LTW뜭aAy}kCܱHBֺfeצ*J:AKD0O cx:3W+ Qg'JPHL`@͵"T`И,ǸY E`;]ohl544˭Rmi|Fbh! FH)T% 97 T i 62`R~Wx/)*.MU0B[;0X*Xl6. `ԨA,) h q-9jshI$>omzVd|WB V) 69sŖ+z\.s5/ȋp[cRS(IUHhG@,aNa;#X4ڎW8c&PL= $MXEafv^&"3Smi ǩkTeW6g4JTMI<*;4;_an4rѸa0!ENѻHWObvR:AӁels}kGzBJʠ,%",fUU ,@NCg Mime3r$e+ytejjj*EkO4wcP']!@lΚB1y N[^XH _GG&RkJjg^~ulY3cxoDwj5/ZxV/U?jpd'Jeӟ}k^+")*ˏmZIEYk'?Q:J 1Z7c,I%H.-^bXa°{||Uκ|oQH'V+Uz}C-VOd7/埙oX~'<,\/}-3+soɚ|ޙ <[6^aY6}vSw-EQH=qI߽ꅑ)H,l/b:/<X0p{{kSaC??P/-V_%F/6S{{~{{k_V^H9y΃ hq\?~~mXtχQ//'GGC=G#o|7B*>j r,{})%(]$i2ieb(<:ʲ8V)\){ {cDѾ1fjn?M,ϧIew'rү /XN~t6]QD8V^S)UGQF|(1(z{ Gx>*NGE~ppxt4ϧZ*\{Q:f7aFqW쉬KV'49: ,;~WQԛϧatHvw|^ex>&WcfTueLO{l2W.Մ\U{?GN9A}j`29?w~dM\\P)&/lѯ /Õ9A//'Vagʲ}w|nwZjr :M̥Oӄ#Yf8$+7nPUKPSɝn,dY%L*>m& ;y={p+N1A6A I_gbЋnmu^0@",z|RAgC x yJގj2I[7 ՉX9b7;xf?!RzL^!<.֞,C %H7ֽ %& $( hATs^~b$=2s0?kc #;-jY ҆X/ L*vq1H֒l9XFk| |@+ IIL>\Gʗ AWfI3*_ba3Pnzm٘4I#c"/.R\1|'|`m5)u HX(*`DRDAEʦNEQ4fIHJ.KVV+vD@`^ԗ"p!IQR""\k*~lO@c^X}gi 75M&$mA$jH )3X6sB-%7LKb /, CZ7:5I4(Ha?8 Hl")]7;lbQXXו`jMD< Ք;px"#65 76@$̌(!w,X U[)u-AL$H9Gb]<\ S}9W>U5&4AAucd8Tә)!/`'wRgc+&0Hr D P(sSUލbc4Ʈ$AM<yT@wZ96ӅrC (k"Au+EqhI$r_|lvA9M)O Gv/'.n{Gj&f)I}Iߍ.&?zwݝ\8Afu":? P#M~:8@JSGu5AoZ2\ВZQ<9WsQs킳53ҍqӊ X=ɉ2 PRAl*VpE2{Qf{{-M9Ii :7{e4DFKfmY>N~ յ.]㣣#f981r'ptP>g^fftsWր5)3X=.Gl)ܗA﷔,b WHr\'6 DTw?eiγy%afj[u"f0ge^:hɐٖe)g[ͷiiy҄P]! hC>jb\7I:niMEix|Na f9s%Ҁ ad''' ǣ^IhomzVd|WB V) 69sŖ+z\.s5/ȋp[cRS(IUHhG@,aNa;#X4ڎW8c&PL= $MXEafv^&"3Smi ǩkTeW6g4JTMI<*;4;_an4rѸa0!ENѻHWObvR:AӁels}kGzBJʠ,%",fUU ,@NCg Mime3r$e+ytejjj*EkO4wcP']!@lΚB1y N[^XH _GG&RkJjg^~ulY3cxoDwj5/ZxV/U?jpd'Jeӟ}k^+")*ˏmZIEYk'?Q:J 1Z7c,I%H.-^bXa°{||Uκ|oQH'V+Uz}C-VOd7/埙oX~'<,\/}-3+soɚ|ޙ <[6^aY6}vSw-EQH=qI߽ꅑ)H,l/b:/<X0p{{kSaC??P/-V_%F/6S{{~{{k_V^H9y΃ hq\?~~mXtχQ//'GGC=G#o|7B*>j r,{})%(]$i2ieb(<:ʲ8V)\){ {cDѾ1fjn?M,ϧIew'rү /XN~t6]QD8V^S)UGQF|(1(z{ Gx>*NGE~ppxt4ϧZ*\{Q:f7aFqW쉬KV'49: ,;~WQԛϧatHvw|^ex>&WcfTueLO{l2W.Մ\U{?GN9A}j`29?w~dM\\P)&/lѯ /Õ9A//'Vagʲ}w|nwZjr :M̥Oӄ#Yf8$+7nPUKPSɝn,dY%L*>m& ;y={p+N1A6A I_gbЋnmu^0@",z|RAgC x yJގj2I[7 ՉX9b7;xf?!RzL^!<.֞,C %H7ֽ %& $( hATs^~b$=2s0?kc #;-jY ҆X/ L*vq1H֒l9XFk| |@+ IIL>\Gʗ AWfI3*_ba3Pnzm٘4I#c"/.R\1|'|`m5)u HX(*`DRDAEʦNEQ4fIHJ.KVV+vD@`^ԗ"p!IQR""\k*~lO@c^X}gCh4"4$MJW\ d03*CP4YBm' F%|fA" RJJA)L$H9j# i\TD.OY+2aUH }^~_M7\__:>>pc GVo&gx-wyGӼl uSGt|]O6wwtz@VH9')x5Ҭx:fS^jXzo64Z 4h6=Jk(-^LY Ӽ\x `8%}&EQ+&_apL~:MYa> BY]mUoVh^{ڂՋ#VW,Ykt:-}-<돶((jp8(Ά[)C2MƧ< pc'ptS`}fflq6厱 XVX[vI_ѠJaa|=ZGagknc j6tup|Q BgelUSd,Ȍn>mQ[cgC1enb;8KBUvC˯A?Xbzo t؉(Ԛ$|<~CGsf9Xd %Ҁ}g8YC~gdzx%Eek"ؖ _q. ku sMfv.@U(CN/αjv^ fp0h9Oc,䁚zL$9<Ρ^Ÿql mayB_]k]5̇-@u{RjVۃ)ͮ? n^Kk,'q[LO0CcQTfOi<8t愊 JRnE +ۍpw aDd1v= 9}./%qsy:Mt4|6p.{5Io6In|2wG6K}(jZ|J,0:'Ffk7g8/MytO9 6Ό Xg\^=V[dg0K݈ 5mrxH)1 J ./nOEQXv3 qf0A0 4Mk"P$Hkyyvɟ1IN&ֽhau}?di׊HUnĺ|z*;lp+RInKI$ւdYbiR@%C1 '&X_|wJ]P:Zk=z3Vu,[bahMBu̠,_v̍Un-y-˹R…08/+J&*8+k򀊫F Q’`w$=gP-  d'=V/ban LnY( yE\咠\.1&3ƸYm'a7@$kYZ+VG1% .~Mbk-Pt"I,ACXEAn~?Zyn]du~7A%*g<l2X_aԆ:J0tEѻ>rZ5Y7zN"Nw=Vb))^d?l&֖e$O`r:۠*/-ǓW98 5#y4x+W۰+S IkuN![['/=Vo5,yz'R,KڕS5^[+063D·Y[5ƆZx\u>qd~dJvI=Vx VI)UQ L%ioxt'l}os%=V[e VoeXuMi"B1Fʗ>>GO^A>{L4r\.W |%>19 [Ni<ܠx) y㈵]0jڿ}:QF+ dM?/Ro */jfrz:_mlefߺz5q[,fť*`^5'̥;`:0Ey9G>OL&W?mnz>t=%drwyKGpr뛛 5LQ0\,fV +CIO&$y8<.>Ik}{*ʲpcK|~I Mu.`Maz dYd}y4!<7q<=9 +R)MKd<p$IXSivf"ZNxu5$7rH4c)!Ho|U煛Zni~rryi>G.n.oooZOJ,>MNƽϫ4?;Hg]\^Np=V Ayͭ_il.El=[9>8v(f;ȋ40zv6O ̓ |/ D?v%Ucg.+<z^P.нt @ }sstI_zJtuaxv;9_cHpJc-X0~#bo|4v;N1AA I_EǪ7y7R:/dXj'V:k7n޿֍ASoV.C$|GX;+'<\=v2џ?.~-L%ޡq@@h>{ Eeh4ֆ߇G<=?5EC5HmF v9z;V[.IJZ?|oKweOſ-C46޻$1 )Y>Fc$_~[d{`XxK]%C5[z{.Xn/׿Y}f 4@@? ~C/98x`7IPޓNGk].-XܻiOjIj|Moޑj4$oc< iˑIag~O. 3kҙ$m]Y.JS@Faq:Ig,AP|*/-Aj#콎e()5@& yf@ "\'>=V/s[!3$pOoܔlWהġ&O6*|#σ$Jݰ9il)Z-+j1OaOjm#rD*'%A2yb)OQM|k\Ċa1Pzm9ϓ8NNNi63(WUN[Jpn&d\z(8>^zNƬH}yqq: lOK k4 . PZR2[$:e:!VU+ђ{$AA A> }s@t$b [_5h wvc14yn~/B} n3d'75$+KbDR0e=&TR|ôJA R1H{¢*8uSQ}" C}`6Db Ih?HzٶUv5,vuҦI0W+/..>O7͇zFD<ĹI BD fF5s:& A-"<,HU$V pUI4"I)"1Q~$!6Õ+ȥ)kE7c6?ŷˊq5IENDB`html/images/c0d23d2d6769e53e24a1b3136c064577-hello_world_reflection.png0100644000101200010120000002256211272547603025660 0ustar docbuilderdocbuilderPNG  IHDRB pHYsHHFk>%$IDATxyTuo6=+00$HBM?ر}l+:DZ+J Yq>s[Q8vlYv䟣59֒h X æff~%U6 dXJ31nkƔҥکShnV.gu $ѵkq PJ-T"s`˖aWmv'eAxUFw( ? ΞU[ ز:%O_S_t%n}E^C{N"QЌ{EvF{d$,'￿z)g)i˂A)m%Y!Q]bL0cb2kmJ=KzI q2I\`bR[^M+*4BFruMcǼ >(hӣGhuו1vq6YDo^qM娒d q2GXY[ ̟//_nLh==mw횜D!>>>{wAtwDo Xhh(m=df{s,tb`V;I6l0&O7&&zK##뮴H[%&& ƍŒ3Ir7+Εf.ڻ ӍhI (XI rlC̙?ykM;g'XB֬Yu=ͷ.(ʬwWjoo8vN2_v횘wuUW3JeFNڽ;G@[ij*_bӝ/xGׇJ,V򑏬p]]{MzщvAZ[7~X13ǻq؉f<.5k!:<H2r*+)w8Y3Cǎx衮7 Ѩ\QA)?~7o?_d*+ :thm:b;UaGTJe¦}׮7` b @ $$Y S|顇:v T5pЁwv=TQ;۷#Ag ۷=*{ZJ&ϼ;?XWo[*/x9I$mxƆNX%NnkcЂ[(@m≮#GF|S.B6xĶwя!7[new{(e+o曻%۶կZ`&_~(gł#˽?]w]eOK]oE % ȑwݕ=~fޑUo;Ҹ~|}P4p#]iB/؏ܼqwrɒot؋/۹o)]\re͢r''~D"RQoBee/_;B,r/LUd/yfc /vO_& iݴi}ISgU--NFV9ޝ^@h۱C7۳Z@h5}ݳʽbHKرcǏۆ!*غ~lǎ4@Ӗ-C7iSچ/|A Ҵӌ[b"Aon\Y}<;/{{rG"K>!A=cż63'Nկ [nYy@~s}s߾;  a.x]yn(H|` 51Й3}sNAJ?{W~GF&'m> /(u'=Ǔ}rtt"tbRcUs3UU='ܵ(6_>LowHOO…{ /\r~㖛n65޷oՀPww_O 9380hb+cLߓ(X,Ǟd֌@q@lcqysQ03 B ~0s6xBJ(F"3G%d= HZ 0C$be6XB9ywq҄8,=r0h 4bq7HdR;#>c-6҅P^WriJ} SȑiⲲřR,$ӈ e۶mX˟I04 ,3n<)݃E$ug>} U2SU,?EuuC5BtZDj.Zt~̙SY;rd!H5vsͭ'J,[Vqc ږʻ%D3MIR6ߕ]̇dm(_\7g" ݧ]N&=T^Q}b" KE8.{pEDx2M%ab5ZYټf:'f˗]o-9s[oUW[ye9\Wg;6J ϛSB:4b@4 @`&&eDM9+YpX~TS\=3fq{frŋ Cko?ĉGg{ /nD3RV_o~ݡ2)M-EW#wQ[{o$d"ﺦe'\w[o<|K֭2RTuכ##G/x[Ppauc s6zh޽Ԁ#LEuzO|$@b{[Ĵ[j~pϓ~d<=keV:61yoj;?1uw3Ϥ(խ))Ȋuʁ=pIM۶|T ܴmqz/ /oVVN:S?igxotxͭVd 6ik{~{;ٻwؽnۧ?<[rv.p%WU"bw'2ZbA?Ǝ'Nx?3e۟\)™~i`EK Ws{'>i~K\۬oj_O=[.m1Oڵ5;s&3c˖O߰ßOC_wo_~,g;:~c?_{>&Ləf\{M'%-0B_ׇN$,dN0C yá?p$k%өKWGC8q>+ZU]00%/mmk|_{}Xy8CIÈ'?{x@qO(榛vcSk7l+x445]~}[Gt z_/w{yuu(N b׬wۼdIr/M&;돶oG9ٹO~|`l?oW^z.!ncUm۸ `2h*w1/wm۶64yX$^m>K-3R@/HSXP?{衚ӧNutdy|RK/Q_fq0,ٜs7v5::(wqCΜ9ڼysmfSBHoos4677777S׀ ˗/_z5;wZU]]u֜XqT*%bmmcy+5066w^4eY޲eKŌoٳǶmUU7mTYY9HGGؘeeeK,Y`qq;w&H$rwhn΃Nə ;!2E;dqqYYYΏiiH$"IReYeBc (Fm۩T TU~oR}Ar0Ʋ"$IRUUJ(h4:s!~H$"Nanu p]1&b .c,HBA(++dC*bP(;xc,6  ߛ fYcl?JIU񫼣####`ٲeѲ2 I&mBc,r$wN=s_l:wqh$^/]GSm^C{r*//O&Νb.Z49`2ba/^+/Ϸq]w|llbb4Mu@Yʪkj:!0MUQV S]tv2y55 )㣣axOuusߛ}}tZr*/-a! 8%c,L(ʁp]2M4dX1c 0wxD_i@$Ac㤒I-Rtwiԫ*(//w#WUJ5Md۶&qʘk0,H' #]ce u@txhhyBW>X mxQ!+%"Br034 c4 򊪪"˲&e% C}0t}6M ㊪JYQ(!tztx1QjQqC6!H1(ut=,44MDu]=␬txp011pռyP#dYĄWEK\t+|+dKCCҠՅQJ&GRpjQycYvf=%냳ccaƬ&`Ltg ՁRÉQ4*yeI-kr|<}p2M4cYOJ]˒e9ZVĶ,Rx`Â?`]c#b,>1az|lQ%uޟ!IjO**0ƃ==.!gn"QƵ:1d,֒I rEu5_¸FEIQPo쵽#z:͎mPdBe0q- LMiu%Q Gm't"F!?aLK$P0F8sCӲ+c,LR*_=qyUL:R㈢H3Mv(E2u2 CP$ S:zU./3Aŝr2s9۲mc5d9tYQ԰P03iD1`(Ba4ud9pXK&MMm;;ejP0VYL5u=~PB,]G(yW!kێe EۙeFlPM}ڽ!%HD vwWV} =!g=cI\LƎit.Ƣ,T1XXo&_+Q0B8tO׵u(0VC!I\OyFS]Ae0,]'}LRJ]׻kQ0E!רּlhLd<81$)|A{_)!`x{|KF)bLH *:!4wLN)p"yͬ?XkY0IRTUOT*ƘJcU%1He[`iw7(ɻg߰yY ! z9/'ڎM0(re3J{ֻgn:A z3J1R CB!#4ut4 91B,]}c3Y}B0{a;-4C^/{޽o9GPԬ" 񾾙q]o n(TU:N|p(w/G !mSBZPI6cv&p`PE8\KӨ㈒$grQEYv,uy]$Dz׶qj%83_ U&D m;2bY2\.UM$\YZV1±$D\8wLBd2e2QEcYbZN;C㸦DYF]TeIQLMi%0fiT LЌA$ײ\tNj@L)!V:_=0.\Q \3nŵ,a64(o뺷z u2}{ҋ#@阻bǝlqϸ,o$ G"4]`yqFY xBXPȵ,x_1+6I Ȳަk^GRC)iq]J(t!QQp:MlXW9E19)Kzuf`R+ ^`&,K4[T*dH$\ӜŻ핸E\w5C!a5yG}{D"v:m>>Nl[DYfeNN:Rc1:Q&"@4hkYf2( y:fLN2E}TmJ1@6 E=Kjۂ(zEKEAaFxvrhH$UEmNNښ`Pɦ)id S׵5-XQFFJ 0fFPBQa;.uh0E>ٌAqCU`MJ9Fy;"AP92)g f.4G 7J\]X$^ Cmۋ|`/ $i XeċT=je4 !XPHDoȡ%DF뚓Զ0){EKLr0bǓ{Ne2B@iR0W%7O5>%%#ٰrܜ?I[(i4ʲ E/=EܠkYK(J!cfۮecԶ S#IrBىBR8,u1 !E3)$o,P$ %pXTUU;tv#w/a3s(v/A0S)3"$颚*٫\߂43TitbYRhyDQP0\M2?XBR4qv䭡N׹`3ynlml1V# 'IWE{Α1M"$( 1 Wׁ1PA$!baqv|?o#os>w;œ.]~ϔ?y-P${ zf8?$8uXo>Cg\yz0K{(-x-lE gv0$4/MV@˺egj ?ms~~Y^d2s{p gu۬"I>PRЊƨ5Bu2Ǚb.ҴIy5)7/|Q_riW72;{C9j9Afv8vǸY̊,Tmrig3P.pThf&"?-psJܕ;؝0WT9y Npg NL|Ifs"J;3\{wU;p8p8p8p8p8p8p8 ?QIENDB`html/images/c0d23d2d6769e53e24a1b3136c064577-hello_world.png0100644000101200010120000001277611272547603023454 0ustar docbuilderdocbuilderPNG  IHDR`H/bKGD pHYsHHFk>IDATx{TT׽ǿ~ jT@X_Qy(`nĤ6iMduEI4FhFJ|b1`DE" ù A}:k3쳏 Bqt0AJhv% +$A*AL$A*AL$A*AL$A*AL$A*AL$A*S"HF;)C: B~TLssrpS~z ׭㝏~]Y998x1GTf_L 3qE+nNdHw|^{Np \ef:)?w|2(J-gm g`C~S> 4?.) V46+ppa{b̕uobw qXA ɓY1aUmH };S{;˟Gt4CBNӐ.NdH%h|^jmE,_~ltt8>?WנPo9n +`^A޷殮~?&!2=^nL ,Xv e$ 2xܹqqaAd OKD_vp5D G{\\2w) wv _|(mկ5ȻlF =&|##`Y-sK ??cEE!|<ĭ]SO.n>>k+1ql|e N*x755Ԅee(sh֭CܪU&{iOǍ%|1xe0`@]i) +?4f=<N\D.dg\mRSq*FyF$ǭ@(?s _A{]>Y αY^8;}Xpzx%F;/\@݅ 8u+a \t:ƦK2)R56^xmmGłhTѣĥ}8l $-p/;'AtCxJ ,:+5 .*G'r!.|z{zDǨZz!w^?lkÎŋQ{Xf-sk+>^9=v~7mŽE`1.>>r.$|5/͞kD ֆ~Eut=nG~Wq6Xw8La!{ >!!̧'0gbz@Jjt 6oO^Ϝ9?)|CCswGЄ /)ApRͺJZV9`WŻw2Y3W_!hxe=*#S}U۶RG)6mB3/dn.&Y]X^WWVJx]Y?ی5 pwgū!cS ڎ3AA7P97ՃGD&'!L.$6s~}"wf9mΘ`` x۬Xt+` t>4Yrkڪ]%M|= ?Յm.~ED-Yx>r^f[AY\PnVuj_4==S5 :7!w~,:-B(صguuk 6)ǂgOt[<۴g{ħۍƲzys*3ZyRR$۷FgCXR"WT?njU$j\~(6q 6ecDAJ΄(=|ߖ+wwW$=WR,/ķv!~5ꫫmވk~UVȦ?LZyR~m1]h4$p:+$R-cNumaS|x`܄(*ٍ,*+II,evTF6fɒN)=*wUhZ__D7./FGGK'o]>{g )3 #w(2ilQU^Ϋ*[~*6R ixjkeˋ5ZJɬ,Vݒ~KKÑ;'AR#q))֨w~)q }ɓ% ﹸ]na iP>XƆQjF[ 3\[YyvJJPuDO[娾pgPYZV}bU+B_R<}P_ϳ(~N7ݶİf(ֶgPEE H*8gEn4kܽx1qSZyn[݀ƃ# 0CM;m<.a`F-n/2/9g_z(H欆8"0\`#gӧZyc,!h'a\9뽥.a?: ֹ--2uk:ֹ#GJ_ȋ.J SW~#h8N<")̇F^~Yq1_qXq;o4vF1pfNAAc۝GM8&G` FUՐʃX[ξ7󋃼=eغxhognL̕KwD2^^LQj{N=ʌ˭NOg~S_Wǘf>cV ڏhYYF5u}lyeY?ۍOHtKR}#2w6mb*/_f̷n1kj̘0I(&*1>޾ r{VGGmLVT;4fۛo DΝvmY,q*n]$T2r%G|/P^~ꬄvb LX`1ǘ h^ut=_njva̞ ?14۬Yc;u`/iwȧRyc,9⣷ynzIJ]qJhZ(&zw ͆ /ݝY3LȹR)ut=555kNt;~L#񱱂7 I2)J]䌏O?eƎ3`۞z l6;O P O.3rǔ+FSSrrr_7o0CXX4JKJhOmm-ߏl`0=z4h",_A,֯_7|wӦM-NII 6Ynx f0ؽ{7233QXXh4DDD`Μ9x'(K<%C-4 ` FQf0A B%H T B%H T B%H T B%H T B%H T B%H T B%H T B%H T B%H TBW#AAڭ=^IENDB`html/images/c0d23d2d6769e53e24a1b3136c064577-adaptiveBlurImage.gif0100644000101200010120000001353211272547606024502 0ustar docbuilderdocbuilderGIF89axC736:79=:=@=??<@A>CEBEIEGFCJIFLLILPMNIGPMJSOMYQNTQOZURSYVWUS\YV[\Y\C~^VTbXWb[YdYWh]\k_^qa^c`_m`_rF{bJwiKzjRsuUpzUr|Uyzfcidblcbthgwljuee{ji|po|rq)7+;&'$"-!,!,)7'6*;      "$)#+* - .$3(:$4);'8%$#" ".#,!&&,(33>3<,2186J9N/@2D5JV&MK!D\‡\Eg;8޴?;PH7da6v5 >L3h#,{{|`d!aDdVfA\))`?H>"˨=0۬=C, ms1ڢS2҂ *.ă:'su]׷JQG_u:t Tw [b.^*SdP㐚Zԡi$3mHB8z!dse"&ldS9Ip\ ŴMsZ@h<࿹oqɓG<~ Bxpm\Y WbqhCA5A$'M3hY1Vou |+ R|)@mm{[PVĠ8z @@h  xhۂˢ4,b|ƛgWX 0fᛒ(8F)p,Z ``5@ `Ѐ>hP( p bO^"+HAhHb/&N1-˸d khE Bp@^ĀfcG+G ]x?.k Evat8@F 8 pY`',@f/c༄z<"`=jL0ȸEWn 'nmzF@>og>{ ;v8 0v <P pkP1 Zb C d`p2Z/. -`f耝v+zB@`,P0@0$pt@ 0"]:^+F+Y`ݠT$8 Yٳ:` Χ5[=6\Gn t?@>OV!⑛ϫB3ڸZϜħ,i k,X(o.bxo ;@/N* Vl`^J_ ,j?>?,e_>aXd r!t 4s ]s8~IF2d#}6 uUKG) fNUV6p)ג؋7iTOyupCRaXK~zYXfv 4؂.( lbO{ɋЖ(8VBy `z([pwodz'myi@qwvoQht -ɋؙ2P  @ p F|EFitq'KQmPV+ٍܙ3.gGXšvFk zh(G#hr`8ࠑJ fpsfcF e+Z d8،tS p8a@y5``aVVP ЩrFHbҰ4raO}Fb'&f@}k.pfdB GXeFb`:TaPhtP~J z5hfogm&aj]ťƣ3u-  Eʞ~\GǺ9'8ei5wd[P ~  F|p?;ʟsP Q?CSŠ]0vf~\w;^ = X5FiKFJ 5GDW5q*u8 WrpT]i8GSbFs8/vp$v!?7iY壒nD[ GڲGJ2;q*p{PYuYOeGĤXOHsRb`wffnKG8߂.tnd `.KLS~FO6$OT25S [P010;I cvOORrNJ iE QdE,K3F )@5Ȅ-D2-Ge-k@߫XE z PB8ᖮwG6_DM\ 0K p Djg\xtW֒(e1;@,OE[5 *%e FVc5J#W rCfD_ A[ 0 -L0`r]ƾS-#1f408:X-? Č۸$hQM1MPе6)5 c? 0HLXFn;-Ry2`ŌDL@ #PH5E1Ϡ];IDATx 0s*ONY f=~EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$EBX$}< a a a a a a a a a a a a a a a a a a a a a a a a53c a a a a a a a a a a a a a a a a a a a a a a a ab& mIENDB`html/images/c0d23d2d6769e53e24a1b3136c064577-distortImage.png0100644000101200010120000000651311272547610023563 0ustar docbuilderdocbuilderPNG  IHDRozQ:bKGD#^ oFFs^ pHYsHHFk> vpAgok- `IDATxݝy?>sf6Q!(i+* A*Bh] UJU RUmZ ᘁrH)@B $%A fs\xf;;ٯx罟{3|¢JnˉüA*i34|ogx+qP:[NUg-kgM[*Kg?*Y$^Ur)ߣ(w6< `2}^S3$^U1ZxM2ˆ:NUu.m#&k˸&F3ĞĘ(U$qW{nv%K^#9WUx v+u լF~ ˹d';ؑ^EWs5w15}u(7p U/S 󸙛!qyYyeU5,t a}bmȋņW zR86ņ!22L=ieWU/ jÇ9.INv"@k,tְkc%uxG ^ֵ\M'9IkOE>.LA լp"?vՀs6X ʩW̳'=\̷ExCy&lF,TYM{9Z,=l4D 8sԯ do0cK(QH)l^.͖LĄ^lud]q\&~w=[yΥn]"bj;H,,cW$ՅP{#"ltmYAA24`;ΐ^csS#G r)2;Dc8zեjVRDEJPM $, JCGL"S$!uƵP}ͩ "< !t-jчx0 rG #.PF@6/~5s5TBQJO BSDDtr+EONn]G :inu՗xZz}jH J ${~$oIwZ#RDDmDoc~:C +JSh_(8#=j)A+LSݺ|ir7yjd:*h]H1լG^tTԦkvU3|y1F'Gg^fIO^~Cvj+asex^׊@%=͹Ols* G^ #GpkJCCEG@?8Jxm1D$D$(RBF ΚA.U[SU|"2}HFR+"E4#}WF)Q ,vdtf0@R%>W0Uo] 2/,9>7[5V|ݺ#x:Zayc&l!qrVK$2/S\[fQ秵b]ӑPkP uJWy/,SH"FBSg5s2C%T,ȟyI@&D^$N7a zcA顇$[~k6W@D6d|L"3SL% 6xOL9QMݐ~ԭ OB&H0d(/C6-:Z'x"Q"DE*-VY 1M G},6LdȣWz䧚ZP;80 pZɒ%Ϯ)A"@kTrd1QD,Ԯɑ#Kn- ?t d"E{-*9c[5[GV e)Q[9W$&K5唈C]3Hy/(ֽH`&bl!m eO?YV^H56S[`~d"BĨH^ih7;eҤXnT~O"B0&ܓF,QzY W"irȬ0ۀ2„zѢF,(s^SvhL-䩗'@dEThSUZ %qgS ycja^wgﻀ Q?x 2/^Qst*;]xPx!"=}X(1k5r੍$fsy!0S^gr8P}m96aq>=6Qu{>x#<2s+(,NQų@xOT&S^:kqer6S:8٤|uSf 3lSuF;ƨSabQV̀%tEXtdate:create2009-10-28T12:32:49+00:00j=%tEXtdate:modify2009-10-28T12:32:49+00:00ҁIENDB` html/images/c0d23d2d6769e53e24a1b3136c064577-floodfillpaint_result.png0100644000101200010120000000101111272547610025520 0ustar docbuilderdocbuilderPNG  IHDRdx(bKGD X pHYsHHFk>IDATxձ @193@k킜@A׶m yz@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ wG[y                        ׶sC<@@@@@@@@@@@@@@@@@@@@@@@@8?']&IENDB`html/images/c0d23d2d6769e53e24a1b3136c064577-importimagepixels.jpg0100644000101200010120000000053211272547612024663 0ustar docbuilderdocbuilderJFIFHHC        dd h?@Ach=,Oy6Ach=,Oy6Ach=,Oy6Aʸch=,Oy6Ach=,Oy6Ach=,Oy6Ach=2html/images/befd863081615f539082d9ff76bf7b39-zend.01-internal-structure.png0100644000101200010120000004410611272550126026353 0ustar docbuilderdocbuilderPNG  IHDRieBgAMAXG cHRMz%u._:oi+PLTE" )/'.!?'2/-1JkL3 F:'i&'>BC*0L9PQlKjqUE1fN9^w qc6O'N-I64Hm4i6m7p#s={4s,'yJ=Qv7LB}R+xb:bVV?mdDӔ~@(@2eJ7Z 6u S ՁQTO.]J;1Ё: JjDvoD@u*PUJ{?Fk`D6`5? q5QJ-3B h>3)MJ7a9 ~mRh9@TD6qri@& fD jA\&mR`v LD9@A;wnL&L @8U,PID6!I n9qʉN,PSԡ4u FfJSqX؍p X0TkFXhd4Py,RDpYr(u\ omݸM8]]+'N`IUĕ+@>| vR@肘1&Mićo(ڵAIԺoMs Hrr灊AQՐT+*qh߁*782 f:~@#4;7U`z҈7P껁 5TAdՐ6;AyP ҲPX3cMb?Ҁ77O8X*R5w u@] H I) HnČ4u FjJSqt i#w @ Ye jDI4)s]NPAJSӦRMaXfTJg&}be8:~@Һ7 "( ,S0Z>yhII4)m8BCHˆn X%F%&Ѐ4ۛ޼s:"Hj4Qh@?V͢4H 2Btaf4( O؅D:~@Ni] u% e;H£)d0٧4u Һ@)dzy OkJHBFU=҈q'5:~@tMiS!!^}bg\lה`0 5҈S;OJ z@Oi7ChCr@zH¨'рFSqk4u :a t#ԤMPڙi\H<7R&ST'!Զ">+AYwi@S{0=i<`6(t&9sg w  &<2:ЫS,'@ H M$5t#))m#b$J))e@)8N)'( -P. j@`zL) )Ls-mRX meD X0i$ l/  ' u݈ [7ݟ+LS΀ %:FJ:. ) mj"rJ t-M p*`M5( Ҁim81ik!g$%Ofÿބ?p@g3܃ϐ8BmP4BMi<TA `W*@r=zҎLed6"30ZO?OK*@5'<e@)½h`m<`J{}tPAfԔOLSz$ JcF'OhjJ;iЀ)h l1 SEJ S {x`]`V7HHi`zH`pIujhA5%ϫSV,J ]Ab őFMHi>^'vC4`Vk AEJ ljO^{ 5mwvSGSڠ"tX N5* I ΃7Wå*A)av>GSڠ"lTj*A0xv5B4 t SGSڠ"Zϟ|>GZcPo\l3)mPA^`V% PB aJ z4*BI5Jʉ0fت) jjZj+)'˜af04)5Jʉ0jj QSP # U () kJ @4XdA"# rX!ZxB 냉)Br\D)TQ-TQ(QPj1FW"`P4ԓ WЗ0yk+ubw~`Zʄa! xx6axdCUIo-^eQMٴYkf[DEy7m6jHݴS`PX\G7<(@RGi,dN2vd%i(iAҲR/LXL齙։CTVHOQ[h6- '($즵衼Eù;.4) 16lC 9[6E,P"R()( |1=\)  M4ͩmmk,L&0YsZ9fJ5C*%vJ@mP*Lpa=%$_*B@4~H)q1Ƅyv4IQa `Rzd.ҪUe7.$WRnDƧ"!nMI] `1iiC}^BSX2HhE;]$0IT{“K48($'-j  t5$(Ie86)®HA iv˗ ZHz@(1ƥƧkX1VPkB"P= oJCZiu~BIA-ᡦ &j# &-*QH[ ރtHij>u8jZ5J@P5 #M h zЌrjJS"id 4ȰluZ!J#@5j#NZTU`V=FnLÒp pJIJFUja`TZSSs@Ql6 i{M,v-(kKa_=fG+ѷ{(VY Al.ʡ |!"LMitTY A^Ki qyMiZ4/E񴑞+;1<K¡h=GzJH iЅ C5h6@V$wԪ(Aiڐ=2m4 Z51U3S@f046:r;h Ɣ@Fyޓ:)c[ztX1jcJ zF"1=biW> 󰦴U:G*) r"T)-:p4 ) (]5Ne @TJ,t"Kx*#) t 0^`P4"7] q@琀 F0 7n`P4"f$Ђ: p`.>F @䎧] AM46!HZi2 5`P4Bn;mRqTB~:"QFtJTv%N`]HiD9pj#* t*;JK'T0`P4֪2G`:A{B: EJ z, `4 DJ z `4 DJ2m#) r0є6) > <'53: )m:єF #EJ `J<'֞  @F a~$TvdU@`@EJ\P ~S)'8Ԟ_@RAU=)z`#Hi4BS5tD* 6hJcXiUDNnQ#D"HMi@ )hϟf]SȔ/ 9D"hJ35@!Mz f"ϗGOi#Hi4 "gp; I fJJ*&Ԕ0 @)yl3J :R @)m`]l3F4<>iHi4҆$/&Oa`P4MiCSaAh4 Ip3qEJє6D]K)Hi4F) FS"$oT4uȦ>?~~rP4b@.8g_#?s N(TZp"4uݻ7Qj\o$j:v7G@Д6HVxO-SIKigLgNj'ڠKi '$}ƚ`{$)"?Q5=AU\@xE?&j MbŘvHF9AG `?_ LM Ldϟ>Ot)HIi)Ki穕҆WR @ĉ?P7LTiD`iSPݠ&%jU A ? \a_,j]]vt٭ !QJSTJi_1WC| :R@!{ăHiX ZԘ[ }*)ʓz'4p:_`) KiR)|&X!=0uC{#]jJ90KA,ɠ#S@S !\N|Dꤴk+ tB) g!)(5ͦ4`bT`hJ`4¹u:` 6btPOiHzjWENMT2~> +zdɓWDBdRF^A%a&A,(i~s֫W&U# l04UC21Fd Jd,T+$EcBU 3LC +vb $% ,+_!9f ) VZ|K,ޣxpk}h4aMia$8)CdP>dWEA<"P% cP@R0=v'h)m24e>;u `'pR2#!MW$.h3h( Ϡ,Y ?C82 2ylAZme:HU< sHű4bx,g|6c?G3ā`Kii0Pe6)T9^1S*ZMu0VKϐ{"PeJ<I(? isAXjm?cvWB :Rȅ;m~'0`y6/Ӂ,'oeax&BcJf޿aǝĠ1RG28p)yc4yOwAB 0 VH]GRI,鿧pGYyФTEx]+ h}`^1?.ji=iN3 Ĥ 7` CY@ 0YxZ5Iޔ@ ='3z`S)ɮ R䁤;-LU_G+Tfl.a$4I ACu}ϟQ֧>cԐkOp˫K. OQ5>@ic -`3g7p;=P7  xo z`$|,Ug|TT*#&46zrSLi96l) ||L!W bcIi߀uog{vXg ? ?}Lo`%{`醒a -؄qP[Scc##C95T]3/n|:<Tc 0() B=jޔ &,Ɛ 1ɬ=B1lS:aPNiH}u@1eqfn1g ? HQ4OxJBIi,:p Ј(ӘIHig||ZZLì>NAu@8A9ݠDʄ: `J335='?:ۏo>۷O?O`6P÷@??ze?(e4!e "!l0O.8f1n(d$LCJhvfd9֔6R) )@ZRK@'h)ϟn~zlOgn~za;pI8NOA#e5ex{{[*Hm   Xi" X,Di%8lR) ڤ44=;J Y~(-;'Ǡt5v)?I/;lԔSB)vSO͏sLę3]y@ҜW2!Q/#rR='Ս3͐k߃e>J޿i)$j㈴TE1-ra@ ~B@ g9@ `#@MiHk㇣IqJs4,s0 )m'tw>쳷̟h`a666I2ޟz8=QR)hO[g;g"lO*M ٟ!< P"twtPz[,InRbxAZ$YNk [|#1<,FTJ;~mPVk5)A{HJHj@ xI60!h H2 Jz t l,( ". "dd`C\fn (f\;PYF4*NLFV@ke'*i`) %Sqi`b#-ß؛q Ӧ1HNCE[a&X5 4%45 $bs}u7kn=ASOirm.Cq)5T;3ɥ&"AjPz4 ?e \#=aa==a|R6iM|p=z@i~Xs5% 5 s % s4 4İ4R30#Mu 4adq)}_H;G.Ҩl5ᔆL2`c W*&|:UuqG'oe))͒ &M9q=p)',΀-)7*gr EȔF(&\j[MFJCIdL E(HC)@4"%G @Д0]A ecu Q`?A̕dC,* ى jBS$F~O`R_܌ FaP[ UؔF~ORS&;dS=anaaHg"M%7$6/1 FcaB Rl`P}.!&,PbLc`Ǒ@grP; &6m7F%1S`P4؁iOp{|z6Oi 0C* a)MkJ7= ?gb ٽ|{,+؃^ TgaqH813a ̻Ul4PgrLrz6) <\d&+)MDk:&Gk`/wXdͳ.1Ù{/Yg^0{ތ`B͘=m&e0U!d%i\Ml4āi'A|=6ԓ9HNi1YJj=vnHjBNkԦ/̍% 5h ?? @>T?sLk rh =P$`SZ " yHiNpCKi sPOP#-B;;RZ&4g.߼|&5C~| |UQHIi`gx}S?`VQ#10ΕA> 5!Fn <0J V>܄^}~[Z3A/0Qb8RHOix;0q'q&0 RIA D= z(D62˴( R3g.DQc'Fj g&׀ (!B߃W}߅53IҠQg >C:)!yHiӐOp KiH紑N&4&L\ M_? hJ) ps8@X!~; 8t0"6Pb*& x<$C!_4z4HG5nd"Ijt3АqyɫHh):gG)mҊ0npN{2k71@ܦ؋4@gI ? R,F&3AjO==P%~F3e8`n==B4 l /A2pD7D@:rKix}Wh}RQXGX[#ҀHhܘ-}p * ]zϠ%4a=Eh{̏?~|52&CZcf   4f(FY=%$ LnܰKisAO8`VQ3HHif^E}CSpB;I7$jBaJu: ޿~?sɟ4!0gLE 0 3gx ')) yޒLvc` JhN$O: ;B<?`V :kVJ-@ng zBQwOЀ-@Sڟ|`9s)Qlpro?:X+:3\y0VBQj5'vJcrJ7?iHf:`J h1?z?",aXr8%)ALqBʴ\1HziԊ!@ 0xb&3`m铟DA | ^'pXXmx ޟ97&ғaރف *Ը>a˭?g|3|ȼ2Y.i9NDL|dBn#iԊn2S| @YDOe&ؔ^Ԁ =8RA`9.iC_2;` 5p>E )hçk3\QҀ,!/\`6AeT0Mii/L c A6$L) ^;0z*3`B4Nl;:4 1.N|@gSSOU]v9bK2Q YG 䂎v}R| i e݆2RJ#fˆNi!;#zR&|hR{Pyzp)Li??~"noQkdU0Dgghc@QJ# ) ><Ӆn9\GbJC*]?Fn}\ Tu>>h~ ҝhm3TjÙMs3ૼ?0jf`ܯ)&2JPmZ{XM\JLٙ }P$;TgzkQ0K3vvvԄn<4~?T=-[7mئMWwvI- ԭ'5;3;j~jєҌQt6RAԠ:Q](<\R&X``&?X;6=$'nfК;Ikkmԍ ێseIij86_)۝%%|Õ^.u4Ac) {(J?5`m"dvg._ }2 8m3:wx#蔫@+.gfil[:: 텘B^HiH̄JiHр%'Pzc7=30, MegP{pyصGe[&2'\) bCʾb(5N{ACZHi Pf°4>(x'O <}Ќ { l!הjidz̷ɟ'x?\lJx OXShH;+N)[aKiH\i5zJÈ*MdW=Sz$4PiհI @>xO |dP3j1 3vpK[J#t R)'4`tcOiT-aDAMA0p %]i@AjO(sgϞllAA Hz 8zmJ#L+Xu&)畧h) [D W!%B `,z hh1#?=0L{CH(32-*1eY5닏B:&yNv K⻟.)%QQS?Q;"5""5** ԍq4mԠgpg8s;@ /܀㇠}?|~ b> B㇏gNiW> 4hg|Ç>|8+EVD3}R`=MHA<;m~6b|Vlcaኙl)CS8<ᾟv)p r@xtՈT  = +-n<:"Cl]`i'@1\oa3?3Ac|s* `T/ ԏ ṱ`(ta7" #?S`IiҸRd4MiT φ`@y-.%1 >[PK|TQ;w.;`p"s @@ r#; 1iCzdF# ㄄o.x|s1"z=䦴B)^Ľ"Qt:`NENii԰#:Jpc ͂WR c|;9? R,ΣGg =GL5bDiJI(, &x\_&6!!!2 *OC)B@bKlFMiPs^ 5EOkގ&@9`~rᛟ@vRyyAJ N4m<ӐRvZr-dH ^:B{v3w%"Ay; K QSbj=%"ZIJ淟AeQ>P ߲   ,@WBp=!1 FϓPR'pS}OXjC=BG'?\AIi^ eu&LcxpTO=vmG' V٢q?CݞOp4ApL"y1E~J6i\.n/ nIm4̔O_QRRx Gy0#/@1pc`PT 0m"l$Ԕ&c07P+S4 8g@n19괹y ZlgPx؁6q1O$bATggX:cHikiiMzz[7kM?~<>9;1ENaJÞn ɰ҃ ^tZ6yO|9$u~Q}[ < xRX1߀؍ooeg.aX{ %5PTPV}6ZYb/: tMG:H/k9) i1$5|5A"mE(LgO(/̼o1fZ} %קE!M;AYkl}K!`M֧Q i(Ӑr;仆A|I8t2/6`?X xIE-5!knKHGREh ?oNyp j3|etwm v;D= C>`Ig5ۻWTppl`ДbIi .);~ :vĽQ kH8FQ|~"&*5.ϜF28O =_:v=~~P=59"  :4."zPtaFMb? z4#LW) &tX0Kl$[J-LRyDJ іl m R@/)L0`*ָIDǔ9v@tLi ]I`*ֺs@R@3j8JIiDה6+@tNi ]G}@4wJSPP&F[0̰ hJ Q0Mb?є6"Mb?є6"Mb?є6"Mb?є6"Mb?є6"Mb?є6"Mb?є6"Mb? ڤ4lF(EhрԑQ@t!~$dXlu$V6~A\Ѭ#Q4F(E T۠+: ԑ@d#wjPظ+f-%EeV7֑hQ4@Ց#k?{D_ԔpRh~Ƭ1e-ԑF(Eha#ɘ | /ρbe;D֑DmUG(Eh c)u$"H"y4l%rUV.5d"WDjEhQ4: ؏pՑ$zG(Eh!Rk/j;HsdHjrEh/1&@Hԓg Dr @8kEPU59F(EhH!ZlB#|$(G(Eh\GˣhQ4F!בRGQ0 F(`?:rQ0 F(@: FQ0 F(@H#G(`t#h`Q0  u$cpG 4SV`ܩㅁ5${ix@Q0 F@H"$I@P/-UG_4jj` ~#hXՑh$P!Q֑` u$@SG `1B:K^WمXA0m4L#1hVQl"ճm܏*F(RGip4YSi,.r*zT٦`"d#.[j'0~c Q0 F(@H#HH-WNE!TGb"h,E6Oa; F(4: PGa@ՑxT֑d؎G;@Lw(`@HfI*bk)թdh[GH#1 ֑Q0 FH @f`ߏ$|\6E/0!5@cQ֑p0UbՋ?:(JX!3 F(4: FV`H @H @ŘfRXD]ts`d0Q0 F: F`Q0 F:ԑ4ZGQ0 F(RGh9 F(`H @u(`Q u$@ԑ`Q0 Fu$@ԑQ0 F(# ב4ZG.@qQ0 F( :Ptp6ݬ0 F(@HRGH?tv揂Q0 F( @JfYG' WFOV`m`Q0 R8:5 'ȵ~a ݬe(` Ց }܏cT R`Q0 @h"PGb}܏{I`Q0 |u \g L7+(7gQ0 F ,u$*pxX1Q? F(4zQ0 F(ZG(`(@u$@ב`Q0 `VE(`Q0}R: FQ0 F(@*8bìh`Q0<rG   FQ0 F(P^Gh9 F(`xH#G(` O@y @u(` ֑ rUGh9 F(`x:: FQ0 F(Ցh'SGh9 F(`x#h`Q0<kvh`Q0<u$@֑`Q0 ':rQ0 Fב4ZGQ0 F(Xym$: FQ0 F(pu$  H#I.@+0<|1 `HDpA#F xB raχF2Q 46IKH@dL C= u40#mǵ }:؈#Vu$j-Ҏ`0G(V (`Nc#Pޏ:'.XP\9e0v0>*>il$ 4ZGQ0`A$ӑ(Gh9 FShFOG& 3at\(S!^#;Ub%߲ .V;Ȇ2ʸR`=Yn>\Ufd}t=,+#: "ڇAGNص@W׵%(jKU\zթJʉ9js]E_q2_kqY=pvsQ, ‚$82IpVFH$ܨHįTwA3ik2u…: !@\y^ 2 w9~$ާD2 0H;0B6ԔQ!VjNT;τGtjַf! RNi/TB?KQYdo3+yhI)RqSё؋UJ"Ū&C ~@s!UKD%Vdv I+ @_C0Q}XJOJ\R e%P1M}MI@S꺐*N£bR}Ap90$^~$I ((G׵`$HHxTͧБd !@$)ƪ?H)u]H'QK1 D:EdRQhp@y? FH:I2p$%"m$xR;> $2 xxG@^hd@a? tUR̐_Eo./D$YR}G8y˵tQхr1 @|Ap9H[Q@QPޏ JLģCE k@ǐ*N1&S~ⲅTߑ*Nq.*'1]?,1F)II"QP؏~00FcuH]֥܁P{pB&;Zf"KE]&-wb%V*`#1 k7\Ldԣ41fo8=s\WztHV/y^T,e!j:L#mJMbIW!/n'?h#"suI!? 4G:`Р  @u$hL 0ZhPP؏:~`40hI#0ZhP(GhI@LRM`Ht;Z F j 4ZGQ0 (u$}hA@y? FHzEh1 oo$#h,\FQ0h'4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gu$ lYjiTxUu/Q0 FDN%81`Ļr{yQ0 P؏ H \MciGQ0 F%~$@VG⑥[9>ZGQ0 F( P؏ בh#Z00q"F Kb5Msz$&ɧXUb Q0 F(p@y? \Gb30.b* <*".<"Յh~'2l`Q~$@Ѫ_* .B|K* ]YsAqhQ0 F& @DkqH,zNh9 F( Duxq~\GĜ:rQ0 ##bHYt!1=]2GF[aQ0 F2 @T>gMˀ 0E j$XaI.Lr 9xX`Q0 HyXk ZX4 F(`H#G(` O@y? wQ0 F(~$@ލ5 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`xDBY? F(` >(&1+D"%5 F(` UGRޏ `Q0 Fj. 4:9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gu$p) Ѣ/vPnE5 F(̀~$@SG1B뀁 Q0 F#:v F(`H"DgDo pYr%$z`Q@O@y? G¬9mIF`Q0$HtM* @tIu(`A(G#P.O9ZkQ0 F`#ұVb$.+h7ڭ`!(Gkv*WLe\4)`,ZbQ0 F((G3`Q@#@y? FYt`Q0 F& @_G69 F(`P(GР#G(`Z 4ZGQ0 F(~$@֑`Q0 - @u(` (Gh9 F(` 44HZ/|%(LAbN@e@=aQ0 F( @CJb4S c,ZE8z(`P؏#AÑ;D$Q0 F(d4ZG`8UHl`Q@  @$ב3glj(@6m6sDo2$Ց'Q0 F(dD1L46VxLCcZQW3e&j{Q0 F%~$@\GbVudk#H@|-HFUh?rQ0 h(GHdבp.h"d"}R9Z/Q0 FMHu$ VШ?: F(  @GDSG1#x]`Q0 (GZx1j \"W@g8ě@ ߍQ0 F##7sQ0 F(P؏ATGR'`Q0 #u$1+`Q0 0HgQ0 F(d4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4H:,vC(TG(`8 4TH:lVrQ0 F#h`Q0<H#G(` [@a? FQ0 F(Pޏ:rQ0 F#h`Q0<H#G(` [@a? FQ0 F(Pޏ:rQ0 F#h`Q0<H#G(` [@a? FQ0 F(Pޏ 2H$R!XMEM _al(`  @ԑhju %*j:`(`DrIN!+U% 1j`@a? H#q:t0j`@y? SGb**,6H+(/c qI~c:wڅǛ&~gQ0 F #u$Zq[U1M +h ZwV`k ǧ&u(` @y? \GSX*ɨ~*/0<57Iw<SQ0 F(̀~$@֑&&å~`j`Y!׵:iWG6TK(b\BO8cQ0 TpHY!uGbQ0 _4@XA7_GL+zF\~;VQ0 F(TpՑDsvb*Fc)T@.Vu}p\ UÈ)AgQ0 Fב4z^`XkQ0 F( P^Gh9 3F(x@y @uds8cQ0 ב4ZGQ0 F(: FQ0 F(P^Gh9 F(`xH#G(` O@y @u(` (#h`Q0<u$@֑`Q0 ':rQ0 Fב4ZGQ0 F(: FQ0 F(P^Gh9 F(`xH#G(` O@y @u(` (#h`Q0<u$@֑`Q0 ':rQ0 Fב4ZGQ0 F(: FQ0 F(P^Gh9 F(`xH#G(` O@y @u(` (#h`Q0<u$@֑`Q0 'VpDu$@֑`Q0 '` `VDBl~A&CvXVh aQ0 F(Vmē"@܏T@rW]KR<Zk(`RIKH@c=k "Cz(`H#fh9 F( Pޏ r :git&.Ÿ,?K.c1gXq$A]gG(` (GH\ ŹbLpUcM Ih9 F(T#H8zb=6u$.Aa}D""֑`Q@ @a?  QaB$R1=3בMr⫺:rQ0 (GH"+J:Hw(`JHUI)b*V`ĘӏԬxZF(`# dGjm!܆Ucq9$ykq9oQ0 F~$@: F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x4ZGQ0 F(~$@֑`Q0 ' @u(`a (Giu$jPZg HQ(`"H~$4"EsG(`  @#v!$U(` ~@y? FDIЊ:rQ0 % @Gbνo.1^/bDQ0 F((G u$ZmG< -Me)ʕ:yQ0 FH"Idg u$INGQ0 F#ұV4Y@+$21^ U$Ց`Q0  @#B:>uh9 F((Gc00I\Vc):o[9 F(CP؏ 7̑U\ʐhI?`,ZbQ0 F((G3`Q@;@a? FYt`Q0 F  @_G69 F(`P(GР#G(`4ZGQ0 F(~$@֑`Q0 ' @u(`a (Gh9 F(`x44HZ/|u00dQ0 FHu$6P28՘ (; F(~$@ dI]]H#qh8 F(P؏:8c`A(Gu$<< 5 Q$X#b> F(F~$@Qt*UD֑,SSGS=Q0 F(" @$בe=URු:`Q0 h(GHdבp.kDG(~$@ :>uh9 F(t#H\h (Fu$V5$U(`Pޏ J׵"scD0ï`,Z\%˜Q0 F(##7s6 F(Z~$@ :2㴣`Q0 FA@a? h^G3HQ0 F( Pޏ!p(`Q@ @u(` (Gh9 F(` 4ZGQ0 F(~$@֑`Q0 - @Cb!`Q0 HuQ0 F(HUvlUe@U(` f@y? FH9cQ0 F`#3ͱ :Y?EL밺F.c1] !D Q0 F(DX5\xD֑dbu!IN\jQ0 F( D#v#dRfHL Q0 F(D;DT@x%G(` DYGRPXG`>uQ0 F~$@ߏ*V`pY\\\ɀÈ#Tv.G(`P(Gu$֑I\"l&h'ک0{ Տ`Q0 (#:kF)SGR\`Q0 #hH3G)GQ0 F(X@y? 3J$ ~4l0F(`P(GP=|Q0 F((Gh9 F(` 4ZGQ0 F(~$@֑`Q0 - @u(` (Gh9 F(` 4ZGQ0 F(~$@֑`Q0 - @u(` (G ud(`Q0"Ĭ:(`Q0PWIy? H#Q0 F(હ(G|(` (Gh9 F(` 4ZGQ0 F(~$@֑`Q0 - @u(` (Gh9 F(` 4ZGQ0 F(~$@֑`Q0 - @u(` (Gh9 F(` 4ZGQ0 F(~$@֑`Q0 - @d֑ H¥'pCFʛ %e5ٶ5` @y? ȩ#JU !Ɓu y` (Gu$:yЮ[WT7 QQ0 F#:"AR֑`Q@k@a? SGb**,6H+(/c qI~c:wEЛD-:gQ0 FH~VVy`UB% Z%UK)aǏ(`P؏ *בָJp2 OMiGA,"UXű(` Pޏ:R_$d:Q0 F(' @T^:$HΦ]OF;u(`@HH\5 bxf+ biV/׈/$RXC`F1/G((Gu*?FS1[;.ñr/Hr*V<ыU1.O(` PޏZ;Z] KF(` 4ZGv0ZGQ0 Fy~$@֑Ck`QP؏:rQ0 F#h`Q0lH#G(` O@y? FQ0 F(P؏:rQ0 F#h`Q0lH#G(` O@y? FQ0 F(P؏:rQ0 F#h`Q0lH#G(` O@y? FQ0 F(P؏:rQ0 F#h`Q0lH#G(` O@y? FQ0 F(P؏:rQ0 F#h`Q0lH#G(` O@y? FQ0 F(P؏:rQ0 F#h`Q0lH#G(` O@y? FQ0 F(P؏ H$_?찬<ף`Q@@y? HGb*b9%BGpQ0 F~$@ :i-ȳ ]XE<`Q0 #h]u(` 6@a? Y0Rә+.Eǜa%ƑuX<`Q@ @T#qU$h5sQv 0MU7$]Dvu(`P؏ # ;\֑I4H0ZGQ0 FH"s$GU M_H̨^G7 ˉFQ0 F( @T#<(Quh9 F(GbVxHt 2 b,_v+G(`Hkv* '.e\4~u0-1~ԎU(`ב4F(`P^GЈ8nQ0 Fב4ul`Q0 FX ֑4(Q0 F(ג\B t!n`Q0 @#~Q0 F( :rQ0 F(au$@֑`Q0 F:ԑ>I*D`0xP $`E @u$Pw0?!h?3H}=ҟ0J`:r hTGu$nÕ@*KJg ֑Pe9Z0C y@ H\C 3'q ùd`) Aȶ$$NJ(1sBb} xL)x]T#d: ;gp0BQ7h()1DC=H1Z؃@bI cF]ȂCm0r`MFS1ׂ7rD\T@.;7]UL_(P\3B"g0-,E{~oz#s$g|u$ddRM=u$d^GB:O59ZGב\z"H*GHkT?Tt"#1O-Pb|:ޟ"]dԑ9O$ZU#!$f 3Ln#1ARp%1W}5)J)YWMP*mכZDT񻊓|~GsnMVd5@^H-*n@Gbfd`na Fnh3pi *>kpDcA`X#I U@Xa$a_*Eв3+s|M'OVq H4P0o"Rd$\dME7j1RȀ Ì$U9'mH9 `RG9V=F~$d:uIVIP ֎Z/X-"ޑ l2݈{$.=0f%QI r?|$jߎ$+p5"W~x ~$P D {Oo2yuZ9 @8H P Kuבx|$bwt>b0u$z1:`B:"Z?.= &*H{+\#9[`@D!$P`k?HX+jD>i,ufYG~$X+G:\Ѣԑ@##׈dATq$~+F: 󑐎&vh I=@r r? N 0@D5B<x_6>ʊ&{#<$$&ZG H_?r?,C;shI ZG%P?S/֪ OHG2Q0 Zlܕ^W! bJڧGHHY ΆH@(_ &$ `V0 $UAǘ ֑&, IL0J`Z!RAb h~$j ם!vi 1{u~$u.>x{ MK?<$X+@a_ &-pHuI`'(f?Z!$.DwK[!$UHXI*Hd3qջՑy\"ב ?[CZմzb 1H=|8P PqU9HuR=9Wкz2QL#4 b+: PH\5FCi 3/F( Q: FX`Q0 :rQ0 F(@: @uvG(` u$@Q0 F(;0X귞PIENDB`html/images/befd863081615f539082d9ff76bf7b39-zend.05-reference-test.png0100644000101200010120000004634211272550126025424 0ustar docbuilderdocbuilderPNG  IHDRauаgAMAXG cHRMz%u._:oi+LmIDATxb? F(` @ @(`Q0 @}}= hQ0 F(0#h`Q0  :~Q4F( lu$H? Q)"?hQ4Fr @Xʏ"ˢ!{iQ4FB$-HTO-]u$@aGՒh!֚УhQ4;DnU'.: #`\тubAªbQ4F(E kgp,[ E|$w(!P<$R?F+Q4F(u$L\u$@ᙏDM‡jayEhQDQRGbUFL?RD2qՑ 1R) 9zc+f%U ~s>F(EhрԑQ@t!~$dXlu$V6~A\Ѭ#Q4F(E T۠+: ԑ@d#wjPظ+f-%EeV7֑hQ4@Ց#k?{D_ԔpRh~Ƭ1e-ԑF(Eha#ɘ | /ρbe;D֑DmUG(Eh c)u$"H"y4l%rUV.5d"WDjEhQ4: ؏pՑ$zG(Eh!Rk/j;HsdHjrEh/1&@Hԓg Dr @8kEPU59F(EhH!ZlB#|$(G(Eh\GˣhQ4F!בRGQ0 F(`?:rQ0 F(@: FQ0 F(@H#G(`t#h`Q0  u$cpG 4SV`ܩㅁ5${ix@Q0 F@H"$I@P/-UG_4jj` ~#hXՑh$P!Q֑` u$@SG `1B:K^WمXA0m4L#1hVQl"ճm܏*F(RGip4YSi,.r*zT٦`"d#.[j'0~c Q0 F(@H#HH-WNE!TGb"h,E6Oa; F(4: PGa@ՑxT֑d؎G;@Lw(`@HfI*bk)թdh[GH#1 ֑Q0 FH @f`ߏ$|\6E/0!5@cQ֑p0UbՋ?:(JX!3 F(4: FV`H @H @ŘfRXD]ts`d0Q0 F: F`Q0 F:ԑ4ZGQ0 F(RGh9 F(`H @u(`Q u$@ԑ`Q0 Fu$@ԑQ0 F(# ב4ZG.@qQ0 F( :Ptp6ݬ0 F(@HRGH?tv揂Q0 F( @JfYG' WFOV`m`Q0 R8:5 'ȵ~a ݬe(` Ց }܏cT R`Q0 @h"PGb}܏{I`Q0 |u \g L7+(7gQ0 F ,u$*pxX1Q? F(4zQ0 F(ZG(`(@u$@ב`Q0 `VE(`Q0f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!iu$Wo< HD 0n`@Y!u$VAihxd}7ZGRa5H7 !M `V4|ȑ  #XAF"@Qah2`e0Πr Q0hRB^0ڻ%uPdR$\g86d:IJ]><߅3pB@!S-$I6 +!1GjݏvMb"ng]l;^4oOfp|ԕ CnBMzmzJB[:mZT=P }1 kׂŎK)2Oxp&Y~^ (Ud[~&%F:U!a$nSW£(r_K :'Y2H'ÿ(BTq*:tĈ RM 8H)j $PW4x^YmJ N+c$@"5d )zG}GfT<3d F(`"@֑`Q0 F`VDujdRQ0 F(BY!u΢ïS/Xo(`Q@9hLQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B H܀^'KF(` 9Y!iu$A(`Q0Df@CG(``VD|VTu(`Z  SG"OL"&X͇6: F(`  ֏Ĭ*$j1#3o/5(`dY! HLeHK`Q0 c#hp՝":ZGQ0 F( `V4H#1cq Q0 F(hB HSX+-\* Wl,r6Ѯ(`LY!kձp@:`Q0f@Ԭ#s=46 F(`0  SG9:`tuQ0 FY!X`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`VD9;hijA>f`Q04f@ԑ :xǠCcwQ0 F(B r΢#R ~(`2f@ՑdGQ0 F(C`VD:Sփ[1<.9`Q0f@ԯ#1+̺4\U#~]@]DʎQ0 F( B *בXPkO`Q0 =hՑMģr`QY!׵֑`Q0 (:#rO7$1&`Q0 F(D  sVYLXX v\p1=_`Q0 1hQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B H$@P*ΥQQ]K]UvJ':c9}#w4 2 -&"@֏Vj9 z4bA&XPO'7:?Y u$ ^ B0aY!Р#ikm(6\H~>9zV8uIv'n5ĵCH4?`y֑hIi Fx#IvtI"@V$ `MD$Wo$1_]Z(B,(t2r 9aMb1C[c!2CL:1*=g+b BFS[?,#eu6҂mt0yZ(4zʢ7ubA|RaoRU#_%>A|#1,V)cOЫ [U]|9*wQۊj H:7 n Y, ?"*IҗP˶儢'tBOwڮ> B?ݮ6)6frtkyaj>?Q{XgX}hz5> i4m(ss:v'vP﹬[Dd6 *a>b*TH:8:?{#vaCJ|]\=mF:E0lS$V@lݫt?EfR KX,(U[55U ~r8 `1P?U˦0xQ]gY NcUNhz~# -`p>Zz]uP"LDR!@slWz|q @] 0.B,e@2#Ӱls5,3j9OiW@}M(_oϚIID"g_7'Ma:r/fk!- !5#ۀ0̇N~K 5V+KEuB1mKXe3 HƤ\o KXdny%-'Y-NxQ^Yt@;HOrlg$pX@CVl`5P ޡQ0 F [Y!p# *!C‘`X0Hu:vGAQ0 !:G|D,1+Du(`Q@9h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`Nu$.Q iti(` f@#^o; F(`0+Dw?Z֑`Q0 0+D>u$ph9 F(TY!Ew,#`GS3HF#G(`P0+D"Zۡup+åw u(`Jf@ՑXۈ': F(``  ]I7jAQ0 F(Y!h9 F(`f@Tƣ`IXh9 F(rY!ֵ"Obd 0`5QXIQ0 F(#`V4z^(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!Eu$~ H"WQ0 F("@QZGbU\5",G(` ZY!u$>h9 F(`  PGbj*>:: F(`0  Ȭ#XB̮$:MFjx|Q0 F( 0+D~UW59ZGQ0 F(:2Ml|< F(`0+D:8}`Q0 B 2H\5DQ0 F(4"@\GS֑`Q0 u$\ KX(`"@PGV0U1Q0 F(B3G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  H#pz<.`Q0f@Ց٣`Q0 F"@ :rJ`Q@ Y!XQ֑`Q0 h0+DN<1Ɔ`&jc5n.{(`0+DZ?CԎ@3h֔`Q0 f@4#1aVo*"-c/JzQ0 F( jG xb*Uw>h9 F(lY!#%?:9 F(7Z1|4Ĭ*%8 F(`  H#O%bp3_U ۰G`Q0 0f@T>Wn|Q0 F"@Q`v(`0+DNIhѱQ0 F(xf@wcQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!mϧI;9gQ0 F"@SGb0xv5 F(`  9HAFF`Q0 "@VG#G(` uY!uHLeXnE<tj挎Q0 F"@QĬx0BLpUurv); F(`$  \Gb>'b@D"PuH֑``Ie`VD ;C‘`Ѥ2 h0+DA s&Pj pBʚ ِDC ='ih'L,HU"!c~3\= ԯ ~0vF6˕o#1i:@c#N{DiL;ʓ)9 }nCw"RG&'qTJ?| Cȶʣx;< с]> wڇvΧvPiFr_pB163+l7 ㅨ q [G7Cd徣\/!F ^Z.<"% \N㑥Dx)H0+DV4)ۉw6y%ީ`$  XɀTi, h;deXƒd-\HˉtaEIN܏lg< 0+Du$TDJ$ GXI$F ěOjXQydHQ+i$թ`x  FH&$ zI2'4Z0$|RÊ*#CZ!G1&O#IN`V4HbtH5,DEgM/IQb2~$F  *.ȐVQIHF"@ :Tc)oD:B/ @^L#I%}f-\H^(@8.'ϝD2JB# `V44HdKΣ \_%H5xhBlA#N˩#b̀ztOp9uY!u$fo)F2 cۈ??yR@L>@dhPŅxdIH|~\&o#y81nFV l')": FW8 E+eSFp4;[k2ёɝᕤ A<,ReSЖ*&$˭Pu!.DV kK`8< F&hԑtvh59 7Mɣ``  iu:r c0G("@ :3H'r5` Z0ZGQ 0+D#q:8fZ:rLY!#$+`:rLY!`#n-PFpzBAZGQ0 F(t"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y! u$^@ 2 F(``VDr?#CV6ZGQ0 F(lB JH"5֑`Q0 h`Q0 F(`  6J2LXɫG(`f@בHUS> F(`P0+D~?&(L `Q0 "@Q>GyQ0 F(BY! H 5#I(`Q`V4ZGQ0 F( Y!MֵbK=.G(` f@9bLxTb `Q0 FB3G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  H#pz<.`Q0f@Ց٣`Q0 F"@ :rJ`Q@ Y!XQ֑`Q0 h0+DN<1Ɔ`&jc5n.{(`0+DZ?CԎ@3h֔`Q0 f@4#1aVo*"-c/JzQ0 F( jG xb*Uw>h9 F(lY!#%?:9 F(7Z1|4Ĭ*%8 F(`  H#O%bp3_U ۰G`Q0 0f@T>Wn|Q0 F"@Q`v(`0+DNIhѱQ0 F(xf@wcQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!mϧI;9gQ0 F"@SGb0xv5 F(`  9HAFF`Q0 "@VG#G(` uY!uHLeXnE<tj挎Q0 F"@QĬx0BLpUurv); F(`$  \Gb>'b@D"P F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`VDBɀţu(`  H# G(`! 0+Duh< F(ZB 2#I4H1 F(`  SG"OL"&c.i(Q"8uQ0 FH"@QA1oA3kn͹5Y|$y-#|YFG?# ?f@1=0#9'å1@Fua$*LTaKvFBάQ*5ҟ>Z~7 G@üuoHpY5DHN#*H7H 3RDDL2VP̞!ar#$ G^K 2B`VZv:XHb~$yZu$A5X;vhLcxGz '🲱Vt#qB\țD&Q+};5׈\Q3@-jDABC=2,_GhQH֑쎂S< ,BhH8oD+D pA{ HGRXGG$'$?2h(a(kH 1M@(\wvTc2K} ԭ#j$@6M/Tc}]+GC÷H-#}$ҟ0J`TkTmIB,mTT#!c%I URZLVG[qP^G+li}GTQĬ#hLFCi 3@űV} \"Koh^AbZDPB\ƒwD1$ HB#q5J Q0H@F͊ԃHcyQ0 F(@: FQ0 F(@HՑ5`Q0 '֑4F(` 0;qglLIENDB`html/images/befd863081615f539082d9ff76bf7b39-zend.06-variable-creation.png0100644000101200010120000004613311272550126026077 0ustar docbuilderdocbuilderPNG  IHDRauаgAMAXG cHRMz%u._:oi+KIDATxb? F(` @ @(`Q0 @}}= hQ0 F(0#h`Q0  :~Q4F( lu$H? Q)"?hQ4Fr @Xʏ"ˢ!{iQ4FB$-HTO-]u$@aGՒh!֚УhQ4;DnU'.: #`\тubAªbQ4F(E kgp,[ E|$w(!P<$R?F+Q4F(u$L\u$@ᙏDM‡jayEhQDQRGbUFL?RD2qՑ 1R) 9zc+f%U ~s>F(EhрԑQ@t!~$dXlu$V6~A\Ѭ#Q4F(E T۠+: ԑ@d#wjPظ+f-%EeV7֑hQ4@Ց#k?{D_ԔpRh~Ƭ1e-ԑF(Eha#ɘ | /ρbe;D֑DmUG(Eh c)u$"H"y4l%rUV.5d"WDjEhQ4: ؏pՑ$zG(Eh!Rk/j;HsdHjrEh/1&@Hԓg Dr @8kEPU59F(EhH!ZlB#|$(G(Eh\GˣhQ4F!בRGQ0 F(`?:rQ0 F(@: FQ0 F(@H#G(`t#h`Q0  u$cpG 4SV`ܩㅁ5${ix@Q0 F@H"$I@P/-UG_4jj` ~#hXՑh$P!Q֑` u$@SG `1B:K^WمXA0m4L#1hVQl"ճm܏*F(RGip4YSi,.r*zT٦`"d#.[j'0~c Q0 F(@H#HH-WNE!TGb"h,E6Oa; F(4: PGa@ՑxT֑d؎G;@Lw(`@HfI*bk)թdh[GH#1 ֑Q0 FH @f`ߏ$|\6E/0!5@cQ֑p0UbՋ?:(JX!3 F(4: FV`H @H @ŘfRXD]ts`d0Q0 F: F`Q0 F:ԑ4ZGQ0 F(RGh9 F(`H @u(`Q u$@ԑ`Q0 Fu$@ԑQ0 F(# ב4ZG.@qQ0 F( :Ptp6ݬ0 F(@HRGH?tv揂Q0 F( @JfYG' WFOV`m`Q0 R8:5 'ȵ~a ݬe(` Ց }܏cT R`Q0 @h"PGb}܏{I`Q0 |u \g L7+(7gQ0 F ,u$*pxX1Q? F(4zQ0 F(ZG(`(@u$@ב`Q0 `VE(`Q0f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!uHU)e jC--C( #Gp"@QZGIC=uP70mh@*`VD~Id: F3*A0ZGHCC‘`X  Ȭ#Oă?rhF%Fw`H8xH8r KY!9u$)x't<ͥh(֑Z" !F Ga 0+DG͇ :rh!bC‘`X  H#K3AFH:!bC‘`X  {euFJݓK7R("B }i$xjKh/+9/8m)ALyrj\Ab+8[91ALW.7 uux+1Rۑa" V0IYqKH drwyPMN1HhQj6"+' k8 B߲?.#{eZw)q= OHB%%Ж֗k%Wyw MM_F͞J/gU#} |2H0^~\xu$~e)E^\RzpY\qSDZJ(BD:po %*1*|v0AAws(WF tu$”A|⏌)lA)afX sNM!9ҹ )NPҥe2\<|Mf~q^ p3'y"E,Qh|G1rW ]ྌ5%YO6+U\oC$Ut*>l9{V5^UA {@ -*\|GDxܮ5SDp$餲Գ$KapuY /t(>A1ߕhz"aq A!d؅?!d8yz/HOx(<'*NGEpF!#İJQb5y65=IQ@kY!`qaPjwцCd*4ݑ Vz:e'x;ɨUP[rJtĖH7?@t:<HJ4%zI5$( i2B;InЖd'I&յ '_u0y#U$?RF( 0+D]9 v35*#$>cqL kvQI^H2F\vRW`m(q ~@Z qI)1'HXy邰d.~4Zjخ+'<鲲RMCWhX"Dtr4oh#/!{e붮ć6ƨHC?r&C|j#Qe ׬ 8uQ@`Q0 F`yx  FHjr Fs"@֑tu(0+D#9k! F0+D##Q0 Fuh9<f@u$3F(`B:`trFs"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@$ԑ ].<БD%ydaQ0 F=f@$#_㷑,-,F(` Y!А#(đu(`4Y!hI)#G(`x  hUG2 "ePI6bՅR, yx"pQ0 F=f@4#1+!X-RmSGc>fmxcð`Q0B בk8\uZS110IE_`Q0 0+DZI^|`*|<ޤJi(`"@ :#R .Qn> (`"@ :#^T񨡤R$/`Q0 0+DN&Y+1u$'a(`"@Qz2Qx"CbO|lLx!8`Q0 `V4z(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y! u$n@;٣`Q0 0+D"$`Q0 (hhב(`j  Ȝ$ q(`a0+DN<1Ɔ`&j QXGQ0 F(#`VD~$4QDD8uQ0 F"@ѰT F!fHLLP(`0+D|$^& :;>ZGQ0 F"@ :?`Q0 F&Z1k#[S7Sع`Q0rf@$בvq$ؽchVXEQ0 F(#`VDZ֑V`Q0 F`VD:rI=`Q0 3:u$GG(`8hnQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D"4t5Vw.y`Q[ @ԑ :vQ0 F(`VDYtD ԅU:hQ0 F  H#qɎ֑`Q0 ::u$2c1E(EGQ0 F(pY!H W5Y"IE|M#i(`:  fLJmi)1u.73#I2lQ0 F("@Qgj*Z G^G%<`Q0 0+D.xdɮW$|~AL6.D`Q0 h 0+D=|Q0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`:7s2F`Q0$f@ՑٴXǬHU@(`0+Du$Uh9 F($Y!W#x0ZGQ0 F(`VD:t k&j8ţu(` f@TGbV`h CX֑`Q0 0+Da Yu(`:  99q$X #G(`P`V4&8ɨ#8f`0+DVe8ԝ#L42% `i2?{f)1WeK5̆_jPF(9+<󳅌əjDؒb+Hiܓ.%e0n]/Q|FP-k7+fKЬx|.x 8^:fʾl5I&OP2x|JW3Y0v>ik%iU2a "H8CFRZ )Q̭jȜ7J!X ٔiZeP>+ƆVkXK/AW9 oqjfٌ&ؐTx9SRd/҄o.׷|x)[lc ^ثb`CeTT`g:oC arD?+[%QeRGe+?n芷h+͏CW ui ݚ a3.?͔ɤ!g0ɞ;Iq.vo^x%:)US8*A](KSFQ'J"yxgIA)xb|Jd4]P*+? x`A_nO9̦i];2e$tU袳^L+ ̒{RbFF`XV7 |Ѕx` nAZΐȺJ&@~ɝ?a^Cԭ(#]m`0h!h΄S+%\ LK_Q^0j7cRaTzAّ-S(d ?pI‘' $H$'ɔ{0jy&S}era/& pxa۞2YahL@3قVv.Z+D̾@)M%+QVXlVaӰ^ /C0Hxo$Se{ydNmB+,V&t,41 [p~9ǜjWeW!9~!n+w@n.ZxdCH0~dp)L)@$QL !Fi=lY`$#  F(`  XQ0 F("@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4H(`  X9 F(``V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@$ԑ ].<БD%ydaQ0 F=f@$#_㷑,-,F(` Y!А#(đu(`4Y!hI)#G(`x  hUG2 "ePI6bՅR, yx"pQ0 F=f@4#1+!X-RmSGc>fmxcð`Q0B בk8\uZS110IE_`Q0 0+DZI^|`*|<ޤJi(`"@ :#R .Qn> (`"@ :#^T񨡤R$/`Q0 0+DN&Y+1u$'a(`"@Qz2Qx"CbO|lLx!8`Q0 `V4z(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y! u$n@#b53 * *e|1 F(`H  H# iYۑQ0 F(#`V44H2:rQ0 FIB 2#YGP8``Q@!:u$H: MpqsOI2ZGQ0 F(.hՑMpQGqh9 F(#`VDup;GxL{`Q0 1:T"qQ\}A.pUXUbF(`4Y!k퓍Q0 F(B j֑{`Q0 .:u$`Q0 F"@ލ5 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@䟳`Q0 h0+D"z M; F(` `VDYtD 5 F(`"@VG#G(` uY!uHLeXnE y}MF(``VD:T:Zo.T|La x|`Q@uY!HʹĨ$14AQ0 F(T"@QZG2`*)b J<ƣHv\LsF(``VD5;e:Uj LKpwId;T_Q0 F(':{?pUT-j8<*I5l`Q@gY!p)#KvG%QCL-H|Q0 F("@Q,:\:S=\vaK V A bq `Q@kY!`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@u(`Q"@֑`Q0 F`V4ZGQ0 F( Y!h9 F(`f@$ԑ \rTN`Q0 :u$$.i8V႘FaNb%RSG(`Y!J?LF4MQ0 F(#`VD:S. ~WU 13A`Q0 F zi\+$Hoh9 F(#`V4O|Q0 F(B *kŬ;o:OLarQ0 F"@\GJqĥ`iZ%cwF(`Y!kZG XQ0 F(pY!5V' 6Q0 F(B ԑD`Q0 BѻF(`h`Q0 @B:rQ0 F(  FQ0 F(0+D#G(`svT \G(`"@SGb0kQ0 F( 0+D",:" kQ0 F"@VG((`B ԑʰ܊qLJt`Q0 0+D~Y]0Cd6IHFQ0 F(B *בXPGQ0 F(Ց4H218ZGQ0 F("@Qy]+HI*D`0xP $`E @u$Pw0?!h?3H}=ҟ0J`:r hTGu$nÕ@*KJg ֑Pe9Z0C !Q0 5$P?~Ν0?Kl ABy3'$L 0O Z E:M#s7 un`?CH<ԃŏ=$D0f,8?T˙#dK>E#{-Vw$.Gp)kL7'IehYIj܏<ڷ# \sȕ5 &*H$SěL^VAb:3##Ru$6 `I^L@(~?c"֏FdBI  HGCD<c>}DH5 DF-ڏD>R8֊D QDKFYAb֑< EW(u$~?oHl5"cxDUߊQ0D«F|$ 4ZBRoy\`܏;h< c8sOaD%pś^&O &+: ׏.ː&0ZG֑!1q'ԏԋ$ґŪw 🲱VdweUHeo e5)‘< @b֬B׵ªIp $L?AI#pU1#~$u~ K}B#(fVT$ !uxjGH5!#DHGj`I:r?^ABd$1O9 @׵Iyy{4q1|$2RG-4 OVH $VHI:b8V L\.%hu$qu$wD5e+H: F4`4F0TkG=|R]E :FkO$EE(n,}Gӈ:M r? :Wc ?D`0xP ˩Q0 dԬx@=;G(`t#h`Q0  P9]Q0 F(`p` @hQ0 F( z:ȍIENDB`html/images/befd863081615f539082d9ff76bf7b39-zend.07-warning-messages.png0100644000101200010120000001556111272550127025765 0ustar docbuilderdocbuilderPNG  IHDRB\QgAMAXG cHRMz%u._:oi+IDATxb? F(ʀ Q0 Fl @lQ0$h6`H6 lP?F(9l FBcȁ(E#!gcZC'r^ˢ!y{4F-IMZDх{mr,fQ4hYYHv"U=y@t!gc^`F. :ð;w! &z%e D@Cr2Zx0R?F(̈Y l @xu2Ml<$cUFLmor5l @jc)| !zjx縸X7h$G1mB 1T#Aj6/K;u$>FIh~lk< dc d}=$' k`#03|N&nƣ<4P٘ Ɛ:! pRh~̷RX2b񀧃Q4рdc2oh̕#r~Xhc!')Ƙ&#DpF3rnţ,AKQ4Gdc\`mޘu)og ь:hH`eHʳ1@YϨ 'xxPl-4jj4S@1@ lLFRu u4BDN6FkS4`mW!#S0-`!F /gl6L l6٘vcD~c8>gwxĩH2Tx{IU? 1Bgh4cgIKeg c d.8~栱)%;Lsp  .q" XDdZUM&qK#i 0,@|2&2Ob321 Y2|G-4rr8a)2 "451uK0̱:ty (tccڋ "K(!hBX\Aq<ka@XՃty c6 J"43 rA?W#[Awk"dmn_>;}]qdViBNh92X wv 5# - jр!0,@fF0y Ftkj igh4Q0fl< Fy F(C `Yƣ` 1gh4Q0fl< Fy F(C `Yƣ` 1gh4Q0fl< Fy F(C `Yƣ` 1gh4Q0fl< Fy F(C `Yƣ` 1gh4Q0fl< Fy F(C `Yƣ` 1gh4Q0fl< Fy F(C `Yƣ` 1g;z9~.3`6 HV$I,cJ3܈wHHiD< @$h<r2كhn#Ʃf jfce*V 4HdcV YlL$H͍0,@Q-OfE&Fy($.RM$R<lgh11ʈɮ$O&O%٘R+cLNdXw0y (ZEPVŸLc25ĈXe<>"R~[pt x@ّXJ;* S`Y]S= Fy F(C `Y#َ`Yƣ` 1gh4Q0fl< Fy F(C `Yƣ` 1glềp59X8l YS g'8uIFso/6$P0,@fc=Ҳ ic)z0,@Q!cz ǯS46%}i.A"=BPSX%NdX8 X4V밊)dq9.{t$Mf Ҳ1f|\l"RV6 !KH8ⱅFC2,EDZDab2 .4{ 9V`3٘nlL{UdIB3M[0Cp+C=2lxZ\S d4!U.E54'#a{BH}cGCDYK 1ȚȈ-1r&L<_mܨ"B1~%X@d6Ƭك1ZR]C200eL& ?\`@Ub@aÉB<9L/`işò1@ѯ6N[501@F11k6Ɯ7/O4$AS2 k3 Ά1<o @fHgbaBF5@0Fc@ kcH Gd`HNd`HH1OlTj`NGC>u Y/h6&nTC0$U b!c%If*(q-&@B<al @[# 2m%$GE Z\E#kY-%K;yx?,ND`0x\Q0"` a4G(]1 F(1@Q0 <0l@dzIENDB`html/images/befd863081615f539082d9ff76bf7b39-zend.08-phpinfo-output.png0100644000101200010120000005326511272550127025520 0ustar docbuilderdocbuilderPNG  IHDRI6(3gAMAXG cHRMz%u._:oi+V@IDATxb? F(`Q Q0 F(`ăz` -`Q0 F(2і(`Q0 @2 C(EhQ4FBnH? Q)"?hQ4F(! g@("@Hsa4F(Eh rDb@P_Dх2 camF:G(Eh!-[!54ɳ e@ M6rh;F(Ehd_ Wπdх,@8@Șf26F(EhDL\-³y>4рϣ-Q4F(E+eU1cM@3i !k q&{ M\\ZCQ4F(Eh@Ѐ 9`х,@8 K ꑍ e_v4H2|Q4F((4P-ئ KlZR Y@VƬ4rq -Q4F(Ee@@a3 @pRh~l `JaUXjQ4F(Eg Hr p3@XEQ4F(Eh"@amQ4F(Eh!@ F(`Q0be@-Q0 F(`e@-Q0 F(`e@-Q0 F(`e@-Q0 F(`e@[hjfq31LLdXr4쥧u6q6 F(#@ZDTˀ$qbA WˀPU-Q0 F(2a2D#*pe0 F(@ZDNm1p<   S0-`!F F3 @ˀZ24A89b["DVaco jF(B-hРk@ (&€  1qFpeADYV`hVw(` ա2A2PVϣ`jh`@і(`P ա2і(lꏂQ0 F 2`v@ Fܧ(`4/Te2і(-Q0 F(*2@[ML EˀQ5 p`*H:- hP F(` |62і(`Q@C0Z4(Z``*0@^ Kˀb`Q@U/TV F[  F(^ҹe@֖@ FmQ0 FUPgE3>F3 F[  F(^ҳe\Ohh`@і(`P Uz HjG]i jo@ Z-ʮ9@.`Q@u/T֘@ `FQ[Vz[Ө1 F(TBuho*:f@ w(*^1-і w(*^1-\+G(n0Drq4- xTb:MS A? F(^1-L Sp Qįx6:b4Y71 Ъ"M` W/T֘@ ҖZ<>fVZ/Fkbp9V1!h)Q0 Ck O?hˀxp[2"h5e8V: \-82 F(6^1V-і>q tkQL F(^1>-\ Ո4Ͱ)n qվHmgT( Cz4( ա5f@e R&c?:l@42&$0<E*#j I\LWau)q}3Q0 FpBuh j1 F(`P3і(-Q0 F(*Ck F[  F(^1m(?2`x: he0 h`Q0 3A2w\`4:F(R1-Q0 F(`!7f@-Q0 F(`ȍРhԏAFcQ0 j61,-Z: GW Q0 FUPg?c42Ppe0 F(TBuhh`@і(`P ա5f@-QG[`Q@U/T֘@ FmQ0 FUPZc4ZhB0EhhmQ[ p F"Gu-y`TbL(Ck Q0t>1\ZHzlf-.!RL)Ll+2 ģ}Q@ Ck F[Kijoyܧc>)cX:+x Hj \)lQ0 F~/T֘@ Ӵe0$$h'n&ؖh`a 32`@x+f4-hTj>-1E> j&W"0݃|&#ShX]+l1]K Q0 F^1; 0CJMn:,\-MjRYtn'p21 ڈ@<=<=DOF3/C^.׮V+"? -2o\QDL*{Ђĵ ́Te_I-d/xLNd-E3h`x: h ck0`Fa*Sx\28}ڴ vhqUXc 3q .5bMaE-Wt$1F(PZc4Z1]bcL6 q J.5+Aіh`BuhkS_SH>Oep*+ B|-N%$ij NmQ0^1t-x/K%~06b%1  </X)u =<Y=+`]YbIĪ 78& e2V 7; F(  ա5f@e0x*lP FF$e@@KG(^1m12ƀF-M mQ@/T֘@ 2`e@%D;$9 FBuhh`@2`x: he0 h`Q0 3A2w\`4:F(R1-Q0 F(`!7f@-Q0 F(`ȍРhԏQ0 F( l h 0F(Eh 4th`Q4F(>c42EhQ4@ F(Eh"꣡;f@-Q4F(Ehh`,qvAlROF\r "rܧh@ FHDu Z݆)GiX4r>3Fc42E# *`k(E 1mFDmQ43c42E# #΀ w.OQ4@ FHD 8.!|❁|e@11F3і(Y/#UIq#ǵXE ByRD٣h 1mQ4Lh7FѠBCw F[h 42EhP;f@-Q43Eh;f@-Q4F(Ehh`Q4F(>c4(ZG(`a uܐ3A2`Q0 +rc42`Q0 hܘ@ A(`4:F(`f(32dNQ0 F(@B-h`@і(`P ա5f@-QG[`Q@U/T֘@ FmQ0 FUPZc42Ppe0 F(TBuh j`\M(̻Y*(=\>2t<0M/!EdWObtQ0 FA/T֘@ `V~Wd1X}:mAw+Tf@-QG[`Q@U/T֘@ FmQ0 FUPZc42Ppe0 F(TBuhh`@і(`P ա5f@evqo}}ZWQ0 F^1t-zw@{2hQ0 Buh`o`?p3`x: hp p5b M:-Q0 F(*Ck F0 44p28@{9e r хU(` c/T֘@ f&q@KI }x`Q0PZc4ZecZfBpox# @lQ0 Ck Ftqhlǘbm Q0 F&Ck W?SZl4F[ `3!2VƥMNjHA`Q0PZc4ZJ0`#HxC~'bo>V5G(`xx: h F}l-Q0 F(dx: he0 h`Q0 3і(-Q0 F(*Ck F[  F(^1m(?2`x: hP WQ0 F("Cn E`Q0 F(`ȍh`Q0 F(!rc4(Z``*M| Kˀb`Q@U/T2O@ FmQ0 FUPZc42Ppe0 F(TBuhh`@і(`P ա5f@-QG[`Q@U/T֘@ Җ4uyhw Ӭe|+7a\L-g .bqIz Q0 .Ck ]r-re7bi2 BcuU /)EP/V,G(/T֘@ V>£}ط ȫȰbtvYeReG=VQ0 HBuhjj*[h$-vl0 b!Q0 F^1K DBҔ>HV>!?n---<߅n$L=:f͌ULd [bL4Ε,>cXtı= ؓy$տ b-dl;*\xϦw+x/&Mkg@mA?D ӈǴ>!R( /T֘@ ~6ډq Aj dqLijVU%AUb4YeQO^b!=Z0H`RPZc4[ȀTno>pOSdV/bj!|X\Vc5U2AqL9`"PZc4Zq1eIe2x~cѤ(v>Y-U lwvPexTRe F( ա5f@Cej' 'L#I;.R'e@V}-f@-Q0 F(`X he0 F(` @@ F(`a(3 Z4=aQ0 F(\S>f@ PF(`Q@7e1"epQ0 F(P,m FQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1m` (1`<`xb0aTF he0 ւҊ*u*$ ;J#(P>f@-QpLdX-dC ?h c42耊-n R~:{fF h`A2u? (`qAt0 4"X.\gɢh)ux lDV(:b0/v`g"GL42`I&$L)VB ʰZ,%Fh`JF$Ll/(QFd{'0wT4 M9 p F[_TIvQp:4%ʨed{'0d&VqD#wx< F | F[Qtb3IvDU,E{= *ƥ$BiEd8 (3і(@T,d. NE3)u}A2R>!ރȀ XPw +"}7 F| F[Q bB3c7Hu_P~'v*z( 8Ja5` he0 % Ad J$)Y– $pbT jkb)_He|GQ0c42"J 2e../Td2HIpQ4X22R}iaEw` he0 `يG1 0Cv;<xL1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | 2? F(``@J(3і(`Q@'giZƘ@ F(`zz0i% h`Q0 F(9V1f@-Q0 F( д h[4kQ0 F(pP hmc42`Q0 h2O@ A(`,9 F EJ?5 h 0F(X4%G(" he0F(,9F3і(EF(ETDCw F[h"(͒hQ 1mQ4h4KQDE4t he0n@W x"h4KGj@lpCFhh`"̜?-zF$$ISH74t he0 ٦Ih,Q7[Q e(" 1m C2H]'AF$9?2E3і0DX[hhl45hp%Xet.'€0CY?"5/ğ D-?鈆@ !UؘZڂXJĔMh$0"7yz͌ 1m C{qc-yxl!h٣*h4K0s IIi~43N4t he0 Z%(--͒xf@KY883і0DG F$¦El4t he0 1`ߊhH,7*_2 <-He(xZ-D-M?72d$^\kǪ+o?Q@Gm '9xŚԑT"w4b<1x c(dxZ-D-Z*s>u# F-F3 gFRі(f> ZȕFP Eϖ6' a2 .i-Q0 і(T Eϖ14Zclde 0jR7ͅG[`XZd,r  TG#Abe0 332/hR-Q0 }-H G_=T|]hn&L@< F,g5f@e🔝U;.X,j.@nQ0>NEKh8Vhs1MÔ£+d8 kG(g5f@e0 F(@p Q0 F֘@ F(Ppe0 FUf@-Q0 F(`X he0 F(` @@ F(`a(3і(`Q0|c42`Q0 p HhQ0 F(`pWL@2B`Q0 F Q0 F(` @y?1]g0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 -`RԅK1zSL @gq0IB` he0 - b #R/`w:zG(Ҁ1m ȫF[UQmQ0c42e_1n e@Ph`A(3і(Z-\? F(1maj)<M .aQ(\RD_AV_ 15 g\fRȞ`h he0 ! BcHZK *TF0$FI^OJ8;Vb`h he0  Xgbe+#FTjĬAN0z сK Q0 | F[`"?:dN{6L@p2,B$Ht(P8f@-Q0fUS!IԈ"݆\2)0Ve (3і(V3T/]$HEDjD"mXZ!CIR ӧQ0 3p F[`XJ%HEi$mFj %AJ2\%^( P>f@-Q0|KZ$AJ,a\)%0}_(CP8f@-Q0|ԋ2᷅ `km#Ng)ְM"g(3і(&Zc(WFb\)U#.3A0`1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | F[`Q0 Fh`Q0 F(>1mQ0 F( P8f@-Q0 F(` he0 F(` +@@ F(`(3і(`Q0c42`Q0 | 2? F(``@J(3і(`Q@'giZƘ@ F(`zz0i% h`Q0 F(9V1f@-Q0 F( д h[4kQ0 F(pP hmc42`Q0 h2O@ A(`Q0:j`iP0}3 F(` F2O@ F(`x7 he0 F(`븡5f@-Q0 F(&^ 1mQ0 F(4:nh j0 b!T5mQ0 Fp:nh j@Z%bFV9ZQ0 F(3qCk {26,F(` u3і`Q0BZc4[XhW@3 Z"'84vQ0 F:nh`lS'bFxtau xmQ0 F:nh`lgcʓ2 Fx; F(`x7 hP A2OƊQ0 F(C븡5f@-|k'h,Q0 F(븡5f@äe@Ruﻓ\ UAgQ0 F(^ 1D-<08f|R| DR,`Q0 =qCk Q`Q0 F(N^ 1mQ0 F(4:nhh`Q0 F( qCk F[`Q0 FMZc42`Q0 hu3A2w\Q0 F(:nȍРhQ0 F( 1mQ0 F(4Cn F[`Q0 F 3і(`Q@C0 he0 F(` 1-Q0 F(`x7 K(`Q0g?c42`Q0 hu3і(`Q@֘@ F(`x7 he0 F(`븡5f@e6A.]B-@]F(` Z֘@ rI^L%8 F(`Dx7 hp 0+`:RLhbQ0 F qCk {ˀ<02`Q0^ 1\-bJ!0 fbUl XMcG(` r֘@ j1p$uX٘?!FcG[`Q0TZc4H[nO;1< h1>mQ0 F:nhРn'E?@P kܧޞQ0 F(:nhj9GH]~׎Q0 F(l^ 1t-RgNc5S ::R "G`Q0 -qCk ]>EI4M#VGoAq'LF(` N֘@ (`Q0lZc42`Q0 hu=[$2@-Q0 F(&^ѹe@JH@-Q0 F(&^ѿee@-Q0 F(&^ @ jQ0 F(qCe@e0 F(` W0Z42`Q0 he lh`Q0 F(!1\<-mQ0 F(4>Ye@-Q0 F(`[ hP G(`,-`Q0 F:nh he0 F(`븡2і(`Q@V F[`Q0 FMs4e@-Q0 F(&^ѳet#<>F3 mRՏ! \ c%GQrr$p@[CC%GQr$~f3 p 1T`x  c%GQrĒVĨDm`t`%GQr0o -b\(9JUSe@Ķ a 0:f0J(9H-< `"e@5M`؀1Qr%G@Z)'`6py#VG %3%GQr $ZL@`t`%GQr03u;3%GQr $ބQ(9J{h 쿺Q}&m[2--ǁ1%IADi`RU)/d`%rDřrrHeSY3RYDfWY1zDh&ޑX= FP4, U8 Y1PS)X٣ u Л!m@,-6|F(h@mL[ Eg{2FG6r+ .h֑d(Eh$*cS.rl2R @L,hryQ0t i%]@Jgp)4?cĘRX2bOh\&c| C⃹b?"e"S`hcߒ\4YW @c T0DnJţ,A"Hh()qe<W @/30Ǩg@* ђwQDZbWR^.~f>xH)IRO-]2@<k@TE(Ehh ȳ \  hEh"!r FEhG2@#5 F(@e-G(`H @(` )h\` 2@ˣ`Q0X\ 2B- 860T@)w*~xa`M#^zZi#m` ,DTL81^d[\ pi4rh< F.)hX˔h$P!Qˣ`@e"\F :`B^مXA0m4L#1hVQl"ճm܏*F(R.ip4Y5)D4{p9kDEXlp w0Aqd2-X (C@e5$CfEESqdxaXEp93KgAXQ0\ *d=P22юt< Fpr Y.Ө"#+bXJvGHr`JjO(\m/ 2@ ؼ2*G%|\6E/0!5@cQp0UbՋ?:(JX!3 Fr FFQ0r\ 2bL3hg21mݜ=A7Cc4)h< F(@e-G(`H @(` )h\` 2@`Q0  v(`2@˃ Я4 F(|R.z:8nV PJ` )K<"@@S7 ڙ? F(*RrY_?f2z2zm ݬe(`DH@eE3\ 4#tL-t` e@+Σ#XF(#@"P.c)Lޏ{`d)_<QtrsF( @ R.Sm ЅÊQ0 F  F x` ^)h|Q0 F(`\eB/)9 F(# `E(`r}Rr FQ0 F(&HYh< F(_6\ryQ0 (/h\`je-G(r FQ0 F(&Z.3`P\ryQ0 0eRe"e"\&~4~QQP1]"Qh r i/I4Ed3m*h,q EӎX2%Dj0F0~Yu+!2`'U ig#I1J⃂r)LY2B^o/.5|\֑Q0~#U/*ɓj2Mm*m@/~e(oր0XF$͘0@އM@L a F~P^rV`4X02@4sĂѨɀ2@4d9,hԏh\ 2s1`4Ge-iUG[LF(Oq{ Feѱ F~$4Z.Q0 Fe-G(2@ˣ`Q@e@a{ FQ0 F(& @(`PP^ryQ0 (o/h< F(Th\`jDѹT ᣋ`44F(Z2@\.ӮD3s0ъj(o/`)1Vˣ` 9@a{ ȆVh< FhP/*zFTIdz(C P^AcI8> F0h\x0> Fr_b_BGfbISt!xQ0 ~RxJZ e>In&ƝpeC i:XhQ@ @4,+\:q ~n&;z$}bgQ0 ebcLwhz1 F( P^!P.a,A-4܏T2 F( P^W.;2ZF(d 4Z.S;h(4 ?RQ(T@y{ Fe{Y"ޏT2 F( P^rޡ(HE-`Re-RCЩdZF(d 48 ;"!UT}=; F( P^r*΀EL Q0 F2@ r?Bil8.]%ߖQ0 F2@Qznx)@#\vw ~!O >` (l/Р8sQ0 @(`PP^ryQ0 (o/h< F(Th\`j4Z.Q0 Fe-G(2@ˣ`Q@e@a{ FQ0 F(& @(`PP^ryQ0 (o/h< F(Th\`j4Z.Q0 Fe-G(2@ˣ`Q@e@a{ FQ0 F(& @(`PP^ryQ0 (o/h< F(Th\`j4Z.Q0 Fe-G(2@ˣ`Q@e@a{ FQ0 F(& @(`PP^ryQ0 (o/h< F(Th\`j4Z.Q0 Fe"\f 4#Gp){h<3Y UZDZM OO_ȂCw@ЏCAG0:q|(eFV 2~0H1 (o/˘ʆn*-b=h< 9 @T.1{G9ׅTb@XB a#(kU|e-G( @(X( 4Z.Q0 F5e-G(ʀ2@ˣ`Q@M@y{ FQ0 F(2 @(`PP^G ת;^ _t^XF0'wu$n2Z8~ 4Ha9T( w ˤAiaGhFg083йeG.΀4qKdNr0]!(l/#5Z.S˴n\&ۢAG(o/ rAPt]j S! +̖ 73 Td=$𮚫ς*%Ǜ0u&UcK=\j5@#u%&<l$ϝ4ģxe&u \J?#d"-olAGh0#Ev"Ŵ܅+7?RJ%%{?15AHdtc5RG UR !"<'l 4+!I;I.!xe乄f;cxZ3[{y 1Fn f@I>P^r:`4F 2=e-)û;6 (iA(o/h< F(Th\`j4Z.Q0 Fe-G(2@ˣ`Q@e@a{ A+BH,.5Fh$Z@@y JQ (l/#E@VP T1dX(N2@ =R2`\$@a{ ) E0ô< ..]x\H] xkGcc0d@!CpG|A(o/`G .1Z8Mqbl QLF(2@ {G#V1FJC+,VpQM&;}hWBQ$89h\&$ bL&/m` 4Z.T0)1vWӧ\ƣh< 9 @)xD|LLTldS ٤>F%҃(2@ =Rx`$I \Z>c~ⷎH_hȂ1Z"=[щa(P^1)Z$ KF( 4Z.R0Z.Q0De-/ fcQ0e-G(2@ˣ`Q@e@a{ FQ0 F(& @(`PP^ryQ0 (o/h< F(Th\`j4Z.Q0 Fe-G(2@ˣ`Q@Mp,r1 a-G(R E.f! @(`P r FQ0 F(&\ryQ0 (/h\`je-G(Pe4Z.Q0 F5Z{W\ryQ0 01xe-G(2f\ryQ0 (ryQ0 (/h\`je-G(r FQ0 F(&D2@ˣ`Q@Mu/ Y!2~?G\(9H2}B *o1J䀓I0@,1TCw(9JNZ$`4Z.cQr%$e"\&fsQr%$fV @ĖD1RӤ6.c'0GqGI?Mɩ*32] hRLB]fͿ˞.8]O>( ʑbsudn]/\s:G_22(.w7a #t2E_H^6G1S+{Bv:,%s6^q9GdԂ",J6dPV +@^&旟} ge#le6W2ʜʟd\`\ra ʑGhXS N&n|ipiCxl \(؀o8AGvM5Zz_rh8?Y u<[Dҿ p9S֛e.s90eUʂ(\b('/_K lC0 z e,rHcLVLP ,ZkX-"ޑl2|Ж&y(E3jy| KƎ \26!_ `L^L@F=1 bH ЀH2=Y2eGCDe<c>maH DFMam/5)V4ʨE"%\,1eA O[PBi͍%i&d_R. \5o+es Od'h%%]K} ñP+@RW|,׸֐$OzZ{"_|3#~fY͙%sp r &21k)Kd?2^%5e,Vdc ؘ4]@ PHA@ŔLZG GHHYkΆek(_+2 `0 $\U(_  IL0JTc@P9eHq S"CNH  @b&SkW 2u x { EsBs hbfe$0ZFC*?1 2ES7K2 2UeXI ed3qZ<.epЄMFF5e er F-`48RDE چG#JB""ZW*Kj4v[(DJ(;`4yc"9P.h\Q0 F(,R.h< F(@e`Q 2@Q0 F(\ >Ũ._BIENDB`html/install.windows.iis6.html0100644000101200010120000002736711272547375017745 0ustar docbuilderdocbuilder Microsoft IIS 5.1 and IIS 6.0

Microsoft IIS 5.1 and IIS 6.0

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

Configuring IIS to process PHP requests

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

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

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

Beispiel #1 CGI and FastCGI settings in php.ini

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

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

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

Beispiel #2 Configuring FastCGI extension to handle PHP requests

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

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

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

Impersonation and file system access

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

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

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

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

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

  3. Click the "Directory Security" tab;

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

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

Beispiel #3 Configuring file access permissions

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

Set index.php as a default document in IIS

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

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

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

  3. Click the "Documents" tab;

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

FastCGI and PHP Recycling configuration

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

Beispiel #4 Configuring FastCGI and PHP recycling

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

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

Configuring FastCGI timeout settings

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

Beispiel #5 Configuring FastCGI timeout settings

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

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

Changing the Location of php.ini file

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

Beispiel #6 Changing the location of php.ini file

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


html/install.windows.iis7.html0100644000101200010120000004234011272547375017732 0ustar docbuilderdocbuilder Microsoft IIS 7.0 and later

Microsoft IIS 7.0 and later

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

Enabling FastCGI support in IIS

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

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

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

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

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

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

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

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

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

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

Configuring IIS to process PHP requests

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

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

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

Beispiel #1 CGI and FastCGI settings in php.ini

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

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

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

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

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

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

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

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

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

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

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

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

Using command line tool to create a handler mapping for PHP

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

Beispiel #2 Creating IIS FastCGI process pool

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

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

Beispiel #3 Creating handler mapping for PHP requests

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

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

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

Impersonation and file system access

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

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

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

Beispiel #4 Determining the account used as IIS anonymous identity

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

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

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

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

Beispiel #5 Configuring file access permissions

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

Set index.php as a default document in IIS

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

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

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

FastCGI and PHP Recycling configuration

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

Beispiel #7 Configuring FastCGI and PHP recycling

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

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

Configuring FastCGI timeout settings

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

Beispiel #8 Configuring FastCGI and PHP recycling

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

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

Changing the Location of php.ini file

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

Beispiel #9 Changing the location of php.ini file

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


html/install.windows.apache1.html0100644000101200010120000001657511272547375020374 0ustar docbuilderdocbuilder Apache 1.3.x on Microsoft Windows

Apache 1.3.x on Microsoft Windows

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

Hinweis: Please read the manual installation steps first!

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

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

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

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

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

Installing as an Apache module

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

Beispiel #1 PHP as an Apache 1.3.x module

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

For PHP 4:

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

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

For PHP 5:

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

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

For both:

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

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

Installing as a CGI binary

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

Beispiel #2 PHP and Apache 1.3.x as CGI

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

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

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

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

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

Warnung

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

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


html/install.windows.apache2.html0100644000101200010120000002346211272547375020366 0ustar docbuilderdocbuilder Apache 2.0.x on Microsoft Windows

Apache 2.0.x on Microsoft Windows

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

Hinweis: You should read the manual installation steps first!

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

Warnung

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

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

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

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

Warnung

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

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

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

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

Installing as a CGI binary

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

Beispiel #1 PHP and Apache 2.0 as CGI

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

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

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

Warnung

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

Installing as an Apache module

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

Beispiel #2 PHP and Apache 2.0 as Module

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

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

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

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

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

Warnung

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


html/install.windows.sun.html0100644000101200010120000003576711272547375017703 0ustar docbuilderdocbuilder Sun, iPlanet and Netscape servers on Microsoft Windows

Sun, iPlanet and Netscape servers on Microsoft Windows

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

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

CGI setup on Sun, iPlanet and Netscape servers

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

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

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

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

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

NSAPI setup on Sun, iPlanet and Netscape servers

To install PHP with NSAPI, do the following:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

CGI environment and recommended modifications in php.ini

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

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

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

variables_order = "GPCS"
register_globals = On

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


html/install.windows.omnihttpd.html0100644000101200010120000001047211272547375021066 0ustar docbuilderdocbuilder OmniHTTPd Server

OmniHTTPd Server

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

Hinweis: You should read the manual installation steps first!

Warnung

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

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

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

  1. Install OmniHTTPd server.

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

  3. Click on Web Server Global Settings

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

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

  6. Click OK

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

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


html/install.windows.sambar.html0100644000101200010120000000657411272547375020335 0ustar docbuilderdocbuilder Sambar Server on Microsoft Windows

Sambar Server on Microsoft Windows

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

Hinweis: You should read the manual installation steps first!

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

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

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

    Beispiel #1 ISAPI configuration of Sambar

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

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

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

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


html/install.windows.xitami.html0100644000101200010120000000735611272547375020362 0ustar docbuilderdocbuilder Xitami on Microsoft Windows

Xitami on Microsoft Windows

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

Hinweis: You should read the manual installation steps first!

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

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

Warnung

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

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

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

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

  • Press the 'Save' icon.

  • Restart the server to reflect changes.


html/install.windows.building.html0100644000101200010120000000411311272547375020650 0ustar docbuilderdocbuilder Building from source

Building from source

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

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


html/install.windows.extensions.html0100644000101200010120000005065111272547376021263 0ustar docbuilderdocbuilder Installation of extensions on Windows

Installation of extensions on Windows

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

The DLLs for PHP extensions are prefixed with php_.

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

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

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

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

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

    extension_dir = C:\php\extensions

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

    Beispiel #1 Enable Bzip2 extension for PHP-Windows

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

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

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

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

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

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


html/install.windows.commandline.html0100644000101200010120000001665311272547376021356 0ustar docbuilderdocbuilder Command Line PHP on Microsoft Windows

Command Line PHP on Microsoft Windows

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

Hinweis: You should read the manual installation steps first!

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

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

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

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

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

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

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

    assoc .php=phpfile
    

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

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

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

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

Beispiel #1 Registry changes

Windows Registry Editor Version 5.00

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

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

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

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

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

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

With these changes the same command can be written as:

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

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

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

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


html/install.windows.html0100644000101200010120000001076111272547376017063 0ustar docbuilderdocbuilder Installation on Windows systems

Installation on Windows systems

Inhaltsverzeichnis

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

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

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

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

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

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

Warnung

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


html/install.pecl.intro.html0100644000101200010120000000577511272547376017457 0ustar docbuilderdocbuilder Introduction to PECL Installations

Introduction to PECL Installations

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

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

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

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


html/install.pecl.downloads.html0100644000101200010120000000706111272547376020304 0ustar docbuilderdocbuilder Downloading PECL extensions

Downloading PECL extensions

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

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


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

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

html/install.pecl.windows.html0100644000101200010120000002034311272547376020002 0ustar docbuilderdocbuilder Installing a PHP extension on Windows

Installing a PHP extension on Windows

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

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

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

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

Where to find an extension?

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

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

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

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

Which extension to download?

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

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

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

Beispiel #1 phpinfo() call

<?php
phpinfo
();
?>

Or from the command line, run:

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

Loading an extension

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

;extension=php_extname.dll
extension=php_extname.dll

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

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

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

Resolving problems

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

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

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

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

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


html/install.pecl.pear.html0100644000101200010120000000562511272547376017245 0ustar docbuilderdocbuilder Compiling shared PECL extensions with the pecl command

Compiling shared PECL extensions with the pecl command

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


$ pecl install extname

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

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


$ pecl install extname-beta

You may also install a specific version using this variant:


$ pecl install extname-0.1

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


html/install.pecl.phpize.html0100644000101200010120000000607011272547376017610 0ustar docbuilderdocbuilder Compiling shared PECL extensions with phpize

Compiling shared PECL extensions with phpize

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

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

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

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

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

Execute phpize --helpto display additional usage information.


html/install.pecl.static.html0100644000101200010120000000612511272547376017601 0ustar docbuilderdocbuilder Compiling PECL extensions statically into PHP

Compiling PECL extensions statically into PHP

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

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

This will result in the following directory:


/your/phpsrcdir/ext/extname

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


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

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

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


$ ./configure --help | grep extname


html/install.pecl.html0100644000101200010120000000362411272547376016314 0ustar docbuilderdocbuilder Installation of PECL extensions

html/install.problems.faq.html0100644000101200010120000000257411272547376017765 0ustar docbuilderdocbuilder Read the FAQ

Read the FAQ

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


html/install.problems.support.html0100644000101200010120000000461611272547376020731 0ustar docbuilderdocbuilder Other problems

Other problems

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

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


html/install.problems.bugs.html0100644000101200010120000000361411272547376020152 0ustar docbuilderdocbuilder Bug reports

Bug reports

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

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


html/install.problems.html0100644000101200010120000000275311272547376017216 0ustar docbuilderdocbuilder Problems?

Problems?

Inhaltsverzeichnis


html/configuration.file.html0100644000101200010120000001456111272547376017513 0ustar docbuilderdocbuilder Die Konfigurationsdatei

Die Konfigurationsdatei

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

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

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

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

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

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

  • Aktuelles Arbeitsverzeichnis (außer CLI)

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

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

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

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

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

Beispiel #1 php.ini-Beispiel

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

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

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

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


html/configuration.file.per-user.html0100644000101200010120000000574011272547376021253 0ustar docbuilderdocbuilder .user.ini-Dateien

.user.ini-Dateien

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

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

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

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

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


html/configuration.changes.modes.html0100644000101200010120000000754011272547376021311 0ustar docbuilderdocbuilder Wo Konfigurationseinstellungen gesetzt werden können

Wo Konfigurationseinstellungen gesetzt werden können

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

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

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


html/configuration.changes.html0100644000101200010120000002224611272547376020203 0ustar docbuilderdocbuilder Wie man Konfigurationseinstellungen ändert

Wie man Konfigurationseinstellungen ändert

PHP läuft als Apachemodul

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

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

php_value Name Wert

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

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

php_flag Name on|off

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

php_admin_value Name Walue

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

php_admin_flag Name on|off

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

Beispiel #1 Apache-Konfigurationsbeispiel

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

Achtung

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

Die PHP-Konfiguration mit der Windows Registry ändern

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

Andere Zugänge zu PHP

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

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


html/configuration.html0100644000101200010120000000316111272547376016567 0ustar docbuilderdocbuilder Laufzeiteinstellungen

html/install.html0100644000101200010120000001307511272547376015373 0ustar docbuilderdocbuilder Installation und Konfiguration

Installation und Konfiguration


html/language.basic-syntax.phpmode.html0100644000101200010120000002062311272547376021544 0ustar docbuilderdocbuilder Den HTML-Bereich der Datei verlassen

Den HTML-Bereich der Datei verlassen

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

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

Sie können aber auch komplexere Strukturen verwenden:

Beispiel #1 Fortgeschrittenes Erweitern

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

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

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

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

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

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

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

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

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

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

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

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

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


html/language.basic-syntax.instruction-separation.html0100644000101200010120000000671411272547376024641 0ustar docbuilderdocbuilder Abgrenzung von Anweisungen

Abgrenzung von Anweisungen

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

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

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

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

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


html/language.basic-syntax.comments.html0100644000101200010120000001136711272547376021742 0ustar docbuilderdocbuilder Kommentare

Kommentare

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

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

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

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

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

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


html/language.basic-syntax.html0100644000101200010120000000302011272547376020101 0ustar docbuilderdocbuilder Grundlagen der Syntax

html/language.types.intro.html0100644000101200010120000002124111272547376017777 0ustar docbuilderdocbuilder Einführung

Einführung

PHP unterstützt acht primitive Typen.

Vier skalare Typen:

Zwei zusammengesetzte Typen:

Und zuletzt zwei spezielle Typen:

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

Sowie die Pseudovariable $... .

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

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

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

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

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


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

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

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

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


html/language.types.boolean.html0100644000101200010120000002306711272547376020273 0ustar docbuilderdocbuilder Booleans

Booleans

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

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

Syntax

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

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

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

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

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

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

Converting to boolean

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

Siehe auch Typumwandlungen.

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

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

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

Warnung

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

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

html/language.types.integer.html0100644000101200010120000003534711272547376020315 0ustar docbuilderdocbuilder Integers

Integers

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

See also:

Syntax

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

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

Beispiel #1 Integer literals

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

Formally, the structure for integer literals is:

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

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

octal       : 0[0-7]+

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

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

Warnung

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

Beispiel #2 Octal weirdness

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

Integer overflow

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

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

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

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

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

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

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

This was fixed in PHP 4.1.0.

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

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

Converting to integer

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

See also: type-juggling.

From booleans

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

From floating point numbers

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

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

Warnung

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

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

See also the warning about float precision.

From strings

See String conversion to numbers

From other types

Achtung

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


html/language.types.float.html0100644000101200010120000001216211272547376017753 0ustar docbuilderdocbuilder Fließkommazahlen

Fließkommazahlen

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

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

Formell:

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

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

Warnung

Fließkommagenauigkeit

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

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

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

Umwandlung in Fließkommawerte

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


html/language.types.string.html0100644000101200010120000015352211272547376020162 0ustar docbuilderdocbuilder Strings

Strings

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

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

Syntax

A string literal can be specified in four different ways:

Single quoted

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

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

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

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

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

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

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

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

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

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

Double quoted

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

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

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

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

Heredoc

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

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

Warnung

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

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

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

Beispiel #1 Invalid example

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

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

Beispiel #2 Heredoc string quoting example

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

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

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

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

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

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

Hinweis: Heredoc support was added in PHP 4.

Nowdoc

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

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

Beispiel #3 Nowdoc string quoting example

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

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

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

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

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

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

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

Beispiel #4 Static data example

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

Hinweis: Nowdoc support was added in PHP 5.3.0.

Variable parsing

When a string is specified in double quotes or with heredoc, variables are parsed within it.

There are two types of syntax: a simple one and a complex one. The simple syntax is the most common and convenient. It provides a way to embed a variable, an array value, or an object property in a string with a minimum of effort.

The complex syntax was introduced in PHP 4, and can be recognised by the curly braces surrounding the expression.

Simple syntax

If a dollar sign ($) is encountered, the parser will greedily take as many tokens as possible to form a valid variable name. Enclose the variable name in curly braces to explicitly specify the end of the name.

<?php
$beer 
'Heineken';
echo 
"$beer's taste is great"// works; "'" is an invalid character for variable names
echo "He drank some $beers";   // won't work; 's' is a valid character for variable names
echo "He drank some ${beer}s"// works
echo "He drank some {$beer}s"// works
?>

Similarly, an array index or an object property can be parsed. With array indices, the closing square bracket (]) marks the end of the index. The same rules apply to object properties as to simple variables.

<?php
// These examples are specific to using arrays inside of strings.
// When outside of a string, always quote array string keys and do not use
// {braces}.

// Show all errors
error_reporting(E_ALL);

$fruits = array('strawberry' => 'red''banana' => 'yellow');

// Works, but note that this works differently outside a string
echo "A banana is $fruits[banana].";

// Works
echo "A banana is {$fruits['banana']}.";

// Works, but PHP looks for a constant named banana first, as described below.
echo "A banana is {$fruits[banana]}.";

// Won't work, use braces.  This results in a parse error.
echo "A banana is $fruits['banana'].";

// Works
echo "A banana is " $fruits['banana'] . ".";

// Works
echo "This square is $square->width meters broad.";

// Won't work. For a solution, see the complex syntax.
echo "This square is $square->width00 centimeters broad.";
?>

For anything more complex, you should use the complex syntax.

Complex (curly) syntax

This isn't called complex because the syntax is complex, but because it allows for the use of complex expressions.

In fact, any value in the namespace can be included in a string with this syntax. Simply write the expression the same way as it would appeared outside the string, and then wrap it in { and }. Since { can not be escaped, this syntax will only be recognised when the $ immediately follows the {. Use {\$ to get a literal {$. Some examples to make it clear:

<?php
// Show all errors
error_reporting(E_ALL);

$great 'fantastic';

// Won't work, outputs: This is { fantastic}
echo "This is { $great}";

// Works, outputs: This is fantastic
echo "This is {$great}";
echo 
"This is ${great}";

// Works
echo "This square is {$square->width}00 centimeters broad."

// Works
echo "This works: {$arr[4][3]}";

// This is wrong for the same reason as $foo[bar] is wrong  outside a string.
// In other words, it will still work, but only because PHP first looks for a
// constant named foo; an error of level E_NOTICE (undefined constant) will be
// thrown.
echo "This is wrong: {$arr[foo][3]}"

// Works. When using multi-dimensional arrays, always use braces around arrays
// when inside of strings
echo "This works: {$arr['foo'][3]}";

// Works.
echo "This works: " $arr['foo'][3];

echo 
"This works too: {$obj->values[3]->name}";

echo 
"This is the value of the var named $name{${$name}}";

echo 
"This is the value of the var named by the return value of getName(): {${getName()}}";

echo 
"This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";
?>

Hinweis: Functions and method calls inside {$} work since PHP 5.

String access and modification by character

Characters within strings may be accessed and modified by specifying the zero-based offset of the desired character after the string using square array brackets, as in $str[42]. Think of a string as an array of characters for this purpose.

Hinweis: Strings may also be accessed using braces, as in $str{42}, for the same purpose. However, this syntax is deprecated as of PHP 6. Use square brackets instead.

Beispiel #5 Some string examples

<?php
// Get the first character of a string
$str 'This is a test.';
$first $str[0];

// Get the third character of a string
$third $str[2];

// Get the last character of a string.
$str 'This is still a test.';
$last $str[strlen($str)-1]; 

// Modify the last character of a string
$str 'Look at the sea';
$str[strlen($str)-1] = 'e';

?>

Hinweis: Accessing variables of other types using [] or {} silently returns NULL.

Useful functions and operators

Strings may be concatenated using the '.' (dot) operator. Note that the '+' (addition) operator will not work for this. See String operators for more information.

There are a number of useful functions for string manipulation.

See the string functions section for general functions, and the regular expression functions or the Perl-compatible regular expression functions for advanced find & replace functionality.

There are also functions for URL strings, and functions to encrypt/decrypt strings (mcrypt and mhash).

Finally, see also the character type functions.

Converting to string

A value can be converted to a string using the (string) cast or the strval() function. String conversion is automatically done in the scope of an expression where a string is needed. This happens when using the echo() or print() functions, or when a variable is compared to a string. The sections on Types and Type Juggling will make the following clearer. See also the settype() function.

A boolean TRUE value is converted to the string "1". Boolean FALSE is converted to "" (the empty string). This allows conversion back and forth between boolean and string values.

An integer or float is converted to a string representing the number textually (including the exponent part for floats). Floating point numbers can be converted using exponential notation (4.1E+6).

Hinweis: The decimal point character is defined in the script's locale (category LC_NUMERIC). See the setlocale() function.

Arrays are always converted to the string "Array"; because of this, echo() and print() can not by themselves show the contents of an array. To view a single element, use a construction such as echo $arr['foo']. See below for tips on viewing the entire contents.

Objects in PHP 4 are always converted to the string "Object". To print the values of object members for debugging reasons, read the paragraphs below. To get an object's class name, use the get_class() function. As of PHP 5, the __toString method is used when applicable.

Resources are always converted to strings with the structure "Resource id #1", where 1 is the unique number assigned to the resource by PHP at runtime. Do not rely upon this structure; it is subject to change. To get a resource's type, use the get_resource_type() function.

NULL is always converted to an empty string.

As stated above, directly converting an array, object, or resource to a string does not provide any useful information about the value beyond its type. See the functions print_r() and var_dump() for more effective means of inspecting the contents of these types.

Most PHP values can also be converted to strings for permanent storage. This method is called serialization, and is performed by the serialize() function. If the PHP engine was built with WDDX support, PHP values can also be serialized as well-formed XML text.

String conversion to numbers

When a string is evaluated in a numeric context, the resulting value and type are determined as follows.

The string will be evaluated as a float if it contains any of the characters '.', 'e', or 'E'. Otherwise, it will be evaluated as an integer.

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.

<?php
$foo 
"10.5";                // $foo is float (11.5)
$foo "-1.3e3";              // $foo is float (-1299)
$foo "bob-1.3e3";           // $foo is integer (1)
$foo "bob3";                // $foo is integer (1)
$foo "10 Small Pigs";       // $foo is integer (11)
$foo "10.2 Little Piggies"// $foo is float (14.2)
$foo "10.0 pigs " 1;          // $foo is float (11)
$foo "10.0 pigs " 1.0;        // $foo is float (11)     
?>

For more information on this conversion, see the Unix manual page for strtod(3).

To test any of the examples in this section, cut and paste the examples and insert the following line to see what's going on:

<?php
echo "\$foo==$foo; type is " gettype ($foo) . "<br />\n";
?>

Do not expect to get the code of one character by converting it to integer, as is done in C. Use the ord() and chr() functions to convert between ASCII codes and characters.


html/language.types.array.html0100644000101200010120000021454711272547376017777 0ustar docbuilderdocbuilder Arrays

Arrays

An array in PHP is actually an ordered map. A map is a type that associates values to keys. This type is optimized for several different uses; it can be treated as an array, list (vector), hash table (an implementation of a map), dictionary, collection, stack, queue, and probably more. As array values can be other arrays, trees and multidimensional arrays are also possible.

Explanation of those data structures is beyond the scope of this manual, but at least one example is provided for each of them. For more information, look towards the considerable literature that exists about this broad topic.

Syntax

Specifying with array()

An array can be created by the array() language construct. It takes as parameters any number of comma-separated key => value pairs.

array(  key =>  value
     , ...
     )
// key may only be an integer or string
// value may be any value of any type
<?php
$arr 
= array("foo" => "bar"12 => true);

echo 
$arr["foo"]; // bar
echo $arr[12];    // 1
?>

A key may be either an integer or a string. If a key is the standard representation of an integer, it will be interpreted as such (i.e. "8" will be interpreted as 8, while "08" will be interpreted as "08"). Floats in key are truncated to integer. The indexed and associative array types are the same type in PHP, which can both contain integer and string indices.

A value can be any PHP type.

<?php
$arr 
= array("somearray" => array(=> 513 => 9"a" => 42));

echo 
$arr["somearray"][6];    // 5
echo $arr["somearray"][13];   // 9
echo $arr["somearray"]["a"];  // 42
?>

If a key is not specified for a value, the maximum of the integer indices is taken and the new key will be that value plus 1. If a key that already has an assigned value is specified, that value will be overwritten.

<?php
// This array is the same as ...
array(=> 433256"b" => 12);

// ...this array
array(=> 43=> 32=> 56"b" => 12);
?>
Warnung

Before PHP 4.3.0, appending to an array in which the current maximum key was negative would create a new key as described above. Since PHP 4.3.0, the new key will be 0.

Using TRUE as key will evaluate to integer 1 as a key. Using FALSE as key will evaluate to integer 0 as a key. Using NULL as a key will evaluate to the empty string. Using the empty string as a key will create (or overwrite) a key with the empty string and its value; it is not the same as using empty brackets.

Arrays and objects can not be used as keys. Doing so will result in a warning: Illegal offset type.

Creating/modifying with square bracket syntax

An existing array can be modified by explicitly setting values in it.

This is done by assigning values to the array, specifying the key in brackets. The key can also be omitted, resulting in an empty pair of brackets ([]).

$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value of any type

If $arr doesn't exist yet, it will be created, so this is also an alternative way to create an array. To change a certain value, assign a new value to that element using its key. To remove a key/value pair, call the unset() function on it.

<?php
$arr 
= array(=> 112 => 2);

$arr[] = 56;    // This is the same as $arr[13] = 56;
                // at this point of the script

$arr["x"] = 42// This adds a new element to
                // the array with key "x"
                
unset($arr[5]); // This removes the element from the array

unset($arr);    // This deletes the whole array
?>

Hinweis: As mentioned above, if no key is specified, the maximum of the existing integer indices is taken, and the new key will be that maximum value plus 1. If no integer indices exist yet, the key will be 0 (zero). If a key that already has a value is specified, that value will be overwritten.
Note that the maximum integer key used for this need not currently exist in the array. It need only have existed in the array at some time since the last time the array was re-indexed. The following example illustrates:

<?php
// Create a simple array.
$array = array(12345);
print_r($array);

// Now delete every item, but leave the array itself intact:
foreach ($array as $i => $value) {
    unset(
$array[$i]);
}
print_r($array);

// Append an item (note that the new key is 5, instead of 0).
$array[] = 6;
print_r($array);

// Re-index:
$array array_values($array);
$array[] = 7;
print_r($array);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

Useful functions

There are quite a few useful functions for working with arrays. See the array functions section.

Hinweis: The unset() function allows removing keys from an array. Be aware that the array will not be reindexed. If a true "remove and shift" behavior is desired, the array can be reindexed using the array_values() function.

<?php
$a 
= array(=> 'one'=> 'two'=> 'three');
unset(
$a[2]);
/* will produce an array that would have been defined as
   $a = array(1 => 'one', 3 => 'three');
   and NOT
   $a = array(1 => 'one', 2 =>'three');
*/

$b array_values($a);
// Now $b is array(0 => 'one', 1 =>'three')
?>

The foreach control structure exists specifically for arrays. It provides an easy way to traverse an array.

Array do's and don'ts

Why is $foo[bar] wrong?

Always use quotes around a string literal array index. For example, $foo['bar'] is correct, while $foo[bar] is not. But why? It is common to encounter this kind of syntax in old scripts:

<?php
$foo
[bar] = 'enemy';
echo 
$foo[bar];
// etc
?>

This is wrong, but it works. The reason is that this code has an undefined constant (bar) rather than a string ('bar' - notice the quotes). PHP may in future define constants which, unfortunately for such code, have the same name. It works because PHP automatically converts a bare string (an unquoted string which does not correspond to any known symbol) into a string which contains the bare string. For instance, if there is no defined constant named bar, then PHP will substitute in the string 'bar' and use that.

Hinweis: This does not mean to always quote the key. Do not quote keys which are constants or variables, as this will prevent PHP from interpreting them.

<?php
error_reporting
(E_ALL);
ini_set('display_errors'true);
ini_set('html_errors'false);
// Simple array:
$array = array(12);
$count count($array);
for (
$i 0$i $count$i++) {
    echo 
"\nChecking $i: \n";
    echo 
"Bad: " $array['$i'] . "\n";
    echo 
"Good: " $array[$i] . "\n";
    echo 
"Bad: {$array['$i']}\n";
    echo 
"Good: {$array[$i]}\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Checking 0: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 1

Checking 1: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 2

More examples to demonstrate this behaviour:

<?php
// Show all errors
error_reporting(E_ALL);

$arr = array('fruit' => 'apple''veggie' => 'carrot');

// Correct
print $arr['fruit'];  // apple
print $arr['veggie']; // carrot

// Incorrect.  This works but also throws a PHP error of level E_NOTICE because
// of an undefined constant named fruit
// 
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit];    // apple

// This defines a constant to demonstrate what's going on.  The value 'veggie'
// is assigned to a constant named fruit.
define('fruit''veggie');

// Notice the difference now
print $arr['fruit'];  // apple
print $arr[fruit];    // carrot

// The following is okay, as it's inside a string. Constants are not looked for
// within strings, so no E_NOTICE occurs here
print "Hello $arr[fruit]";      // Hello apple

// With one exception: braces surrounding arrays within strings allows constants
// to be interpreted
print "Hello {$arr[fruit]}";    // Hello carrot
print "Hello {$arr['fruit']}";  // Hello apple

// This will not work, and will result in a parse error, such as:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// This of course applies to using superglobals in strings as well
print "Hello $arr['fruit']";
print 
"Hello $_GET['foo']";

// Concatenation is another option
print "Hello " $arr['fruit']; // Hello apple
?>

When error_reporting is set to show E_NOTICE level errors (by setting it to E_ALL, for example), such uses will become immediately visible. By default, error_reporting is set not to show notices.

As stated in the syntax section, what's inside the square brackets ('[' and ']') must be an expression. This means that code like this works:

<?php
echo $arr[somefunc($bar)];
?>

This is an example of using a function return value as the array index. PHP also knows about constants:

<?php
$error_descriptions
[E_ERROR]   = "A fatal error has occured";
$error_descriptions[E_WARNING] = "PHP issued a warning";
$error_descriptions[E_NOTICE]  = "This is just an informal notice";
?>

Note that E_ERROR is also a valid identifier, just like bar in the first example. But the last example is in fact the same as writing:

<?php
$error_descriptions
[1] = "A fatal error has occured";
$error_descriptions[2] = "PHP issued a warning";
$error_descriptions[8] = "This is just an informal notice";
?>

because E_ERROR equals 1, etc.

So why is it bad then?

At some point in the future, the PHP team might want to add another constant or keyword, or a constant in other code may interfere. For example, it is already wrong to use the words empty and default this way, since they are reserved keywords.

Hinweis: To reiterate, inside a double-quoted string, it's valid to not surround array indexes with quotes so "$foo[bar]" is valid. See the above examples for details on why as well as the section on variable parsing in strings.

Converting to array

For any of the types: integer, float, string, boolean and resource, converting a value to an array results in an array with a single element with index zero and the value of the scalar which was converted. In other words, (array)$scalarValue is exactly the same as array($scalarValue).

If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side. This can result in some unexpected behaviour:

<?php

class {
    private 
$A// This will become '\0A\0A'
}

class 
extends {
    private 
$A// This will become '\0B\0A'
    
public $AA// This will become 'AA'
}

var_dump((array) new B());
?>

The above will appear to have two keys named 'AA', although one of them is actually named '\0A\0A'.

Converting NULL to an array results in an empty array.

Comparing

It is possible to compare arrays with the array_diff() function and with array operators.

Examples

The array type in PHP is very versatile. Here are some examples:

<?php
// this
$a = array( 'color' => 'red',
            
'taste' => 'sweet',
            
'shape' => 'round',
            
'name'  => 'apple',
                       
4        // key will be 0
          
);

// is completely equivalent with
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name']  = 'apple';
$a[]        = 4;        // key will be 0

$b[] = 'a';
$b[] = 'b';
$b[] = 'c';
// will result in the array array(0 => 'a' , 1 => 'b' , 2 => 'c'),
// or simply array('a', 'b', 'c')
?>

Beispiel #1 Using array()

<?php
// Array as (property-)map
$map = array( 'version'    => 4,
              
'OS'         => 'Linux',
              
'lang'       => 'english',
              
'short_tags' => true
            
);
            
// strictly numerical keys
$array = array( 7,
                
8,
                
0,
                
156,
                -
10
              
);
// this is the same as array(0 => 7, 1 => 8, ...)

$switching = array(         10// key = 0
                    
5    =>  6,
                    
3    =>  7
                    
'a'  =>  4,
                            
11// key = 6 (maximum of integer-indices was 5)
                    
'8'  =>  2// key = 8 (integer!)
                    
'02' => 77// key = '02'
                    
0    => 12  // the value 10 will be overwritten by 12
                  
);
                  
// empty array
$empty = array();         
?>

Beispiel #2 Collection

<?php
$colors 
= array('red''blue''green''yellow');

foreach (
$colors as $color) {
    echo 
"Do you like $color?\n";
}

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?

Changing the values of the array directly is possible since PHP 5 by passing them by reference. Before that, a workaround is necessary:

Beispiel #3 Collection

<?php
// PHP 5
foreach ($colors as &$color) {
    
$color strtoupper($color);
}
unset(
$color); /* ensure that following writes to
$color will not modify the last array element */

// Workaround for older versions
foreach ($colors as $key => $color) {
    
$colors[$key] = strtoupper($color);
}

print_r($colors);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => RED
    [1] => BLUE
    [2] => GREEN
    [3] => YELLOW
)

This example creates a one-based array.

Beispiel #4 One-based index

<?php
$firstquarter  
= array(=> 'January''February''March');
print_r($firstquarter);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array 
(
    [1] => 'January'
    [2] => 'February'
    [3] => 'March'
)

Beispiel #5 Filling an array

<?php
// fill an array with all items from a directory
$handle opendir('.');
while (
false !== ($file readdir($handle))) {
    
$files[] = $file;
}
closedir($handle); 
?>

Arrays are ordered. The order can be changed using various sorting functions. See the array functions section for more information. The count() function can be used to count the number of items in an array.

Beispiel #6 Sorting an array

<?php
sort
($files);
print_r($files);
?>

Because the value of an array can be anything, it can also be another array. This enables the creation of recursive and multi-dimensional arrays.

Beispiel #7 Recursive and multi-dimensional arrays

<?php
$fruits 
= array ( "fruits"  => array ( "a" => "orange",
                                       
"b" => "banana",
                                       
"c" => "apple"
                                     
),
                  
"numbers" => array ( 1,
                                       
2,
                                       
3,
                                       
4,
                                       
5,
                                       
6
                                     
),
                  
"holes"   => array (      "first",
                                       
=> "second",
                                            
"third"
                                     
)
                );

// Some examples to address values in the array above 
echo $fruits["holes"][5];    // prints "second"
echo $fruits["fruits"]["a"]; // prints "orange"
unset($fruits["holes"][0]);  // remove "first"

// Create a new multi-dimensional array
$juices["apple"]["green"] = "good"
?>

Array assignment always involves value copying. It also means that the internal array pointer used by current() and similar functions is reset. Use the reference operator to copy an array by reference.

<?php
$arr1 
= array(23);
$arr2 $arr1;
$arr2[] = 4// $arr2 is changed,
             // $arr1 is still array(2, 3)
             
$arr3 = &$arr1;
$arr3[] = 4// now $arr1 and $arr3 are the same
?>

html/language.types.object.html0100644000101200010120000001030211272547376020106 0ustar docbuilderdocbuilder Objects

Objects

Object Initialization

To create a new object, use the new statement to instantiate a class:

<?php
class foo
{
    function 
do_foo()
    {
        echo 
"Doing foo."
    }
}

$bar = new foo;
$bar->do_foo();
?>

For a full discussion, see the Classes and Objects chapter.

Converting to object

If an object is converted to an object, it is not modified. If a value of any other type is converted to an object, a new instance of the stdClass built-in class is created. If the value was NULL, the new instance will be empty. Arrays convert to an object with properties named by keys, and corresponding values. For any other value, a member variable named scalar will contain the value.

<?php
$obj 
= (object) 'ciao';
echo 
$obj->scalar;  // outputs 'ciao'
?>

html/language.types.resource.html0100644000101200010120000000627611272547376020506 0ustar docbuilderdocbuilder Ressourcen

Ressourcen

Eine resource ist eine spezielle Variable, die eine Referenz zu einer externen Ressource darstellt. Ressourcen werden mit Hilfe spezieller Funktionen erzeugt und genutzt. Im Anhang finden Sie eine Liste all dieser Funktionen und der zugehörigen resource-Typen.

Hinweis: Der resource-Typ wunde in PHP 4 eingeführt.

Siehe auch get_resource_type().

Konvertierung von Resosurcen.

Da resource-Variablen spezielle Referenzen auf geöffnete Dateien, Datenbankverbindungen, Grafikbereichen usw. enthalten macht die Konvertierung von resource keinen Sinn.

Resourcen freigeben

Dank der mit der Zend Engine von PHP 4 eingeführten Referenzzähler werden Ressourcen, die von keiner Variablen mehr referenziert werden, automatisch erkannt und vom Garbage Collector freigegeben. Aus diesem Grund ist es selten nötig Speicher von Hand freizugeben.

Hinweis: Persistente Datenbankverbindungen sind eine Ausnahme von dieser Regel, sie werden nicht vom Garbage Collector entfernt. Mehr Informationen finden sie im Abschnitt Persistente Verbindungen.


html/language.types.null.html0100644000101200010120000000674111272547376017626 0ustar docbuilderdocbuilder NULL

NULL

Der spezielle Wert NULL repräsentiert eine Variable ohne Wert. NULL ist der einzig mögliche Wert des Typs NULL.

Hinweis: Der null Typ wurde in PHP eingeführt.

Eine Variable gilt als vom Typ null wenn:

  • ihr die Konstante NULL zugewiesen wurde.

  • ihr noch kein Wert zugewiesen wurde.

  • sie mit unset() gelöscht wurde.

Syntax

Es gibt nur einen Wert vom Typ null: das Schlüsselwort NULL (Groß- und Kleinschreibung ist dabei nicht wichtig).

<?php
$var 
NULL;       
?>

Siehe auch die Funktionen is_null() und unset().

Umwandlung auf NULL

Die Umwandlung einer Variable auf den Typ null entfernt die Variable und löscht ihren Inhalt.


html/language.pseudo-types.html0100644000101200010120000002274611272547376020155 0ustar docbuilderdocbuilder Pseudo-types and variables used in this documentation

Pseudo-types and variables used in this documentation

mixed

mixed indicates that a parameter may accept multiple (but not necessarily all) types.

gettype() for example will accept all PHP types, while str_replace() will accept strings and arrays.

number

number indicates that a parameter can be either integer or float.

callback

Some functions like call_user_func() or usort() accept user-defined callback functions as a parameter. Callback functions can not only be simple functions, but also object methods, including static class methods.

A PHP function is passed by its name as a string. Any built-in or user-defined function can be used, except language constructs such as: array(), echo(), empty(), eval(), exit(), isset(), list(), print() or unset().

A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.

Static class methods can also be passed without instantiating an object of that class by passing the class name instead of an object at index 0.

Apart from common user-defined function, create_function() can also be used to create an anonymous callback function.

Beispiel #1 Callback function examples

<?php 

// An example callback function
function my_callback_function() {
    echo 
'hello world!';
}

// An example callback method
class MyClass {
    static function 
myCallbackMethod() {
        echo 
'Hello World!';
    }
}

// Type 1: Simple callback
call_user_func('my_callback_function'); 

// Type 2: Static class method call
call_user_func(array('MyClass''myCallbackMethod')); 

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
class {
    public static function 
who() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
who() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::who')); // A
?>

Hinweis: In PHP4, it was necessary to use a reference to create a callback that points to the actual object, and not a copy of it. For more details, see References Explained.

void

void as a return type means that the return value is useless. void in a parameter list means that the function doesn't accept any parameters.

...

$... in function prototypes means and so on. This variable name is used when a function can take an endless number of arguments.


html/language.types.type-juggling.html0100644000101200010120000003523011272547376021434 0ustar docbuilderdocbuilder Type Juggling

Type Juggling

PHP does not require (or support) explicit type definition in variable declaration; a variable's type is determined by the context in which the variable is used. That is to say, if a string value is assigned to variable $var, $var becomes a string. If an integer value is then assigned to $var, it becomes an integer.

An example of PHP's automatic type conversion is the addition operator '+'. If either operand is a float, then both operands are evaluated as floats, and the result will be a float. Otherwise, the operands will be interpreted as integers, and the result will also be an integer. Note that this does not change the types of the operands themselves; the only change is in how the operands are evaluated and what the type of the expression itself is.

<?php
$foo 
"0";  // $foo is string (ASCII 48)
$foo += 2;   // $foo is now an integer (2)
$foo $foo 1.3;  // $foo is now a float (3.3)
$foo "10 Little Piggies"// $foo is integer (15)
$foo "10 Small Pigs";     // $foo is integer (15)
?>

If the last two examples above seem odd, see String conversion to numbers.

To force a variable to be evaluated as a certain type, see the section on Type casting. To change the type of a variable, see the settype() function.

To test any of the examples in this section, use the var_dump() function.

Hinweis: The behaviour of an automatic conversion to array is currently undefined.
Also, because PHP supports indexing into strings via offsets using the same syntax as array indexing, the following example holds true for all PHP versions:

<?php
$a    
'car'// $a is a string
$a[0] = 'b';   // $a is still a string
echo $a;       // bar
?>

See the section titled String access by character for more information.

Type Casting

Type casting in PHP works much as it does in C: the name of the desired type is written in parentheses before the variable which is to be cast.

<?php
$foo 
10;   // $foo is an integer
$bar = (boolean) $foo;   // $bar is a boolean
?>

The casts allowed are:

  • (int), (integer) - cast to integer
  • (bool), (boolean) - cast to boolean
  • (float), (double), (real) - cast to float
  • (string) - cast to string
  • (binary) - cast to binary string (PHP 6)
  • (array) - cast to array
  • (object) - cast to object
  • (unset) - cast to NULL (PHP 5)

(binary) casting and b prefix forward support was added in PHP 5.2.1

Note that tabs and spaces are allowed inside the parentheses, so the following are functionally equivalent:

<?php
$foo 
= (int) $bar;
$foo = ( int ) $bar;
?>

Casting literal strings and variables to binary strings:

<?php
$binary 
= (binary)$string;
$binary b"binary string";
?>

Hinweis: Instead of casting a variable to a string, it is also possible to enclose the variable in double quotes.

<?php
$foo 
10;            // $foo is an integer
$str "$foo";        // $str is a string
$fst = (string) $foo// $fst is also a string

// This prints out that "they are the same"
if ($fst === $str) {
    echo 
"they are the same";
}
?>

It may not be obvious exactly what will happen when casting between certain types. For more information, see these sections:


html/language.types.html0100644000101200010120000000373011272547376016650 0ustar docbuilderdocbuilder Typen

html/language.variables.basics.html0100644000101200010120000003201611272547376020716 0ustar docbuilderdocbuilder Grundlegendes

Grundlegendes

Variablen werden in PHP dargestellt durch ein Dollar-Zeichen ($) gefolgt vom Namen der Variablen. Bei Variablen-Namen wird zwischen Groß- und Kleinschreibung unterschieden (case-sensitive).

Variablen-Namen werden in PHP nach den gleichen Regeln wie andere Bezeichner erstellt. Ein gültiger Variablen-Name beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen. Als regulärer Ausdruck (regular expression) würde das wie folgt ausgedrückt: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'.

Hinweis: Unserem Zweck entspricht also ein Buchstabe von a bis z bzw. A bis Z oder einem ASCII-Zeichen von 127 bis 255 (0x7f bis 0xff).

Hinweis: $this ist eine spezielle Variable der kein Wert zugewiesen werden kann.

Tipp

Siehe auch Userland Naming Guide.

Information zu Funktionen im Zusammenhang mit Variablen finden Sie im Abschnitt Funktionen zur Behandlung von Variablen.

<?php
$var 
"Du";
$vaR "und";
$Var "ich";
$vAr "wir lernen PHP"
echo "$var $vaR $Var$vAr"// gibt "Du und ich, wir lernen PHP" aus

$4site  'nicht jetzt';     // ungültig, da Anfang eine Zahl
$_4site 'nicht jetzt';     // gültig, da Unterstrich am Anfang
$täbyte 'irgendwas';       // gültig, da 'ä' dem (Erweiterten) ASCII-Wert 228 entspricht
?>

Variablen werden durch ihren Wert bestimmt. Das heisst, wenn Sie einer Variablen einen Ausdruck zuweisen, wird der gesamte Inhalt des Originalausdrucks in die Zielvariable kopiert. Die Folge ist, dass eine Variable, die ihren Inhalt von einer anderen Variablen erhalten hat, ihren Inhalt behält, auch wenn Sie danach den Inhalt der anderen (Quell- / Ursprungs-)Variablen ändern. Die Inhalte der Ziel- und Quellvariablen sind also insoweit unabhängig voneinander. Für weitere Informationen lesen Sie bitte das Kapitel unter Expressions / Ausdrücke.

PHP bietet eine andere Möglichkeit der Wertzuweisung bei Variablen: Zuweisung durch Referenzierung. Das bedeutet, dass der Wert der neuen Variablen eine Referenz zur Ursprungs-Variablen darstellt (mit anderen Worten: Der Wert ist ein Alias bzw. Zeiger auf den Inhalt der Ursprungsvariablen). Beide Variablen zeigen also auf die selbe(n) Speicherstelle(n). Änderungen der neuen Variablen ändern auch deren Ursprungs-Variable und umgekehrt.

Für die Zuweisung per Referenz müssen Sie lediglich ein & der (Ausgangs-, Quell-) Variablen voranstellen, die sie einer anderen Variablen zuweisen wollen. Der folgende Skript- Ausschnitt wird zweimal 'Mein Name ist Bob' ausgeben:

<?php
$foo 
'Bob';             // 'Bob' der Variablen $foo zuweisen.
$bar = &$foo;             // Zeiger auf $foo in $bar erzeugen.
$bar "Ich hei&szlig;e $bar";  // $bar verändern...
echo $bar;
echo 
$foo;                // $foo wurde dadurch ebenfalls verändert.
?>

Zu beachten ist, dass nur Variablenbezeichner referenziert werden können.

<?php
$foo 
25;
$bar = &$foo;     // Gültige Zuweisung.
$bar = &(24 7); // Ungültig, da kein Variablenbezeichner
                  // zugewiesen wird.
function test() {
    return 
25;
}

$bar = &test();   // Ungültig.
?>

Es ist in PHP nicht zwingend notwendig Variablen zu initialisieren, es wird aber trotzdem empfohlen. Nicht initialisierte Variablen haben einen Vorgabewert der vom Typ abhängt - FALSE Null, leerer String oder leeres Array.

Beispiel #1 Vorgabewerte uninitialisierter Variablen

<?php
echo ($unset_bool "true" "false"); // false
$unset_int += 25// 0 + 25 => 25
echo $unset_string "abc"// "" . "abc" => "abc"
$unset_array[3] = "def"// array() + array(3 => "def") => array(3 => "def")
?>

Es ist problematisch sich auf den Vorgabewert einer nicht initialisierten Variable zu verlassen wenn Sie Dateien inkludieren die die gleichen Variablennamen benutzen. Wenn register_globals aktiviert ist führt dies zu einem extremen Sicherheitsproblem. Bei Zugriffen auf nicht initialisierte Variablen wird ein Fehler der Stufe E_NOTICE ausgegeben, dies trifft allerdings nicht auf das Anfügen von Elementen an nicht initialisierte Arrays zu. Das isset() Sprachkonstrukt kann genutzt werden um zu prüfen ob eine Variable bereits initialisiert wurde.


html/language.variables.predefined.html0100644000101200010120000001357711272547377021573 0ustar docbuilderdocbuilder Vordefinierte Variablen

Vordefinierte Variablen

PHP bietet jedem ausgeführtem Skript eine Vielzahl von vordefinierten Variablen an. Viele dieser Variablen können jedoch nicht vollständig erläutert werden, da sie abhängig sind vom Web-Server, der Version und dem Setup des Web- Servers sowie weiteren Faktoren. Einige dieser Variablen stehen nicht zur Verfügung, wenn PHP-Skripte per Kommando-Zeilen-Aufruf ausgeführt werden. Für eine Liste dieser Variablen lesen Sie bitte den Abschnitt Vordefinierte Variablen.

Warnung

Ab PHP 4.2.0 ist der standardmäßige Wert für die PHP-Anweisung register_globals off. Dies ist eine wesentliche Änderung in PHP. Die Anweisung register_globals off beeinflusst den Satz von vordefinierten Variablen, die im globalen Bereich verfügbar sind. Um zum Beispiel DOCUMENT_ROOT zu bekommen, müssen Sie $_SERVER['DOCUMENT_ROOT'] statt $DOCUMENT_ROOT verwenden oder um $id von der URL http://www.example.com/test.php?id=3 zu bekommen $_GET['id'] statt $id oder $_ENV['HOME'] statt $HOME.

Für diese Änderung betreffende Informationen lesen Sie bitte den Konfigurations-Eintrag für register_globals, das Sicherheitskapitel über die Verwendung von Register Globals und außerdem die PHP » 4.1.0 und » 4.2.0 Release Announcements.

Die reservierten vordefinierten Variablen, wie die Superglobalen Arrays, sollten bevorzugt verwendet werden.

Ab Version 4.1.0 stehen in PHP eine zusätzliche Reihe vordefinierter Arrays zur Verfügung, die Variablen vom Webserver (gegebenenfalls), von der Umgebung und von Benutzereingaben enthalten. Diese neuen Arrays sind insofern etwas sehr Spezielles, als sie automatisch global sind -- d.h., sie stehen automatisch in jedem Bereich zur Verfügung. Deshalb sind sie auch bekannt als 'Superglobale'. (Es gibt in PHP keinen Mechanismus für benutzerdefinierte Superglobale.) Die Superglobale werden nachfolgend aufgelistet, aber für eine Liste ihres Inhalts und die weitere Diskussion vordefinierter Variablen und ihres Wesens lesen Sie bitte den Abschnitt Reservierte vordefinierte Variablen. Außerdem werden Sie feststellen, dass die alten vordefinierten Variablen ($HTTP_*_VARS) noch existieren. Seit PHP 5.0.0 können Sie die Registrierung der langen von PHP vordefinierten Arrays mit der Konfigurationsoption register_long_arrays abschalten.

Hinweis: Variable Variablen
Superglobale können innerhalb von Funktionen und Methoden nicht als Variable Variablen verwendet werden.

Hinweis: Obwohl Superglobale und die HTTP_*_VARS zur gleichen Zeit existieren können sind sie nicht identisch. Änderungen dieser Variablen haben keinen Einfluss auf die jeweils anderen.

Falls bestimmte Variablen nicht unter variables_order angegeben sind, dann bleiben auch ihre entsprechenden vordefinierten Arrays leer.


html/language.variables.scope.html0100644000101200010120000006221711272547377020572 0ustar docbuilderdocbuilder Geltungsbereich von Variablen

Geltungsbereich von Variablen

Der Geltungsbereich einer Variablen ergibt sich aus dem Zusammenhang, in dem sie definiert wurde. Meistens besteht dieser aus einem einzigen Bereich. Dieser beinhaltet auch den Bereich für Dateien, die per "include"- oder "require"-Anweisung eingebunden wurden, z.B.:

<?php
$a 
1;
include 
"b.inc";
?>

Die Variable $a ist auch in der eingebundenen Datei b.inc verfügbar. In benutzerdefinierten Funktionen wird ein auf die Funktion beschränkter Geltungsbereich eingeführt. Jede in einer Funktion benutzte Variable ist zunächst auf den lokalen Bereich der Funktion beschränkt, z.B.:

<?php
$a 
1// globaler Bereich

function test () { 
    echo 
$a// Referenz auf einen lokalen Variablen-Bereich


test ();
?>

Dieses Skript erzeugt keine Bildschirm-Ausgabe, da sich die Echo- Anweisung auf eine lokale Variable namens $a bezieht und dieser kein Wert im lokalen Bezug zugewiesen worden ist. Dies ist ein kleiner Unterschied zu C, wo globale Variablen auch in Funktionen vorhanden sind, es sei denn, sie werden durch eine funktionsinterne Definition überschrieben. Das kann zu Problemen führen, denn in PHP müssen global geltende Variablen innerhalb von Funktionen als solche definiert werden.

Das global Schlüsselwort

Zunächst ein Beispiel für die Verwendung von global:

Beispiel #1 Die Verwendung von global

<?php
$a 
1;
$b 2;

function 
Summe()
{
    global 
$a$b;

    
$b $a $b;


Summe();
echo 
$b;
?>

Das obige Skript gibt "3" aus. Durch das Deklararieren der Variablen $a und $binnerhalb der Funktion als global, weisen alle Referenzen zu beiden Variablen auf die nun globalen Werte. Es gibt keine Beschränkungen bei der Anzahl an globalen Variablen, die durch eine Funktion verändert werden können.

Eine weitere Möglichkeit besteht in der Verwendung des speziellen $GLOBALS PHP-Array. Das obige Beispiel kann damit auch so geschrieben werden:

Beispiel #2 Die Verwendung von $GLOBALS statt global

<?php
$a 
1;
$b 2;

function 
Summe()
{
    
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];


Summe();
echo 
$b;
?>

Das $GLOBALS-Array ist ein assoziatives Array mit dem Bezeichner der globalen Variablen als Schlüssel und dem Inhalt dieser Variablen als Wert des Array-Elements. Beachten Sie, dass $GLOBALS in jedem Bereich existiert, weil $GLOBALS eine Superglobale ist. Hier ist ein Beispiel, das die Stärke von Superglobalen demonstriert:

Beispiel #3 Beispiel zur Demonstration von Superglobalen und Bereich

<?php
function test_global()
{
    
// Die meisten vordefinierten Variablen sind nicht "super" und
    // benötigen 'global', um im lokalen Bereich von Funktionen zur
    // Verfügung zu stehen.
    
global $HTTP_POST_VARS;

    echo 
$HTTP_POST_VARS['name'];

    
// Superglobale stehen in jedem Bereich zur Verfügung und
    // benötigen kein 'global'. Superglobale stehen seit PHP 4.1.0
    // zur Verfügung und HTTP_POST_VARS gilt nun als veraltet
    
echo $_POST['name'];
}
?>

Die Verwendung von statischen Variablen

Ein weiterer wichtiger Anwendungszweck von Variablen-Bereichen ist die static-Variable. Eine statische Variable existiert nur in einem lokalen Funktions-Bereich, der Wert geht beim Verlassen dieses Bereichs aber nicht verloren. Schauen Sie das folgende Beispiel an:

Beispiel #4 Beispiel, das die Notwendigkeit von statischen Variablen demonstriert

<?php
function test ()
{
    
$a 0;
    echo 
$a;
    
$a++;
}
?>

Diese Funktion ist sinnlos, da sie bei jedem Aufruf $a auf 0 setzt und "0" ausgibt. Die Anweisung $a++, welche den Wert erhöht, macht keinen Sinn, da der Wert von $a beim Verlassen der Funktion verloren geht. Um eine sinnvolle Zählfunktion zu implementieren, die ihren aktuell gesetzten Wert nicht vergisst, müssen Sie die Variable $aals "static" deklarieren:

Beispiel #5 Beispiel zur Verwendung statischer Variablen

<?php
function Test()
{
    static 
$a 0;
    echo 
$a;
    
$a++;
}
?>

Jetzt wird bei jedem Aufruf der Test()-Funktion der aktuelle Wert von $a ausgegeben und dann um 1 erhöht.

Static-Variablen ermöglichen auch einen Weg zum Umgang mit rekursiven Funktionen. Das sind Funktionen, die sich selbst aufrufen. Hierbei besteht die Gefahr, so genannte Endlos- Schleifen zu programmieren. Sie müssen also einen Weg vorsehen, diese Rekursion zu beenden. Die folgende einfache Funktion zählt rekursiv bis 10. Die statische Variable $zaehler wird benutzt, um die Rekursion zu beenden:

Beispiel #6 Statische Variablen in rekursiven Funktionen

<?php
function Test()
{
    static 
$zaehler 0;

    
$zaehler++;
    echo 
$zaehler;
    if (
$zaehler 10) {
        
Test ();
    }
    
$zaehler--;
}
?>

Hinweis: Statische Variablen werden wie in oben stehenden Beispielen deklariert. Das Zuweisen eines Wertes, welcher das Ergebnis eines Ausdrucks ist, wird mit einem parse error quittiert.

Beispiel #7 Statische Variablen deklarieren

<?php
function foo(){
    static 
$int 0;          // korrekt
    
static $int 1+2;        // falsch  (da ein Ausdruck vorliegt)
    
static $int sqrt(121);  // falsch  (ebenfalls ein Ausdruck)

    
$int++;
    echo 
$int;
}
?>


Referenzen bei globalen und statischen Variablen

Die Zend Engine 1, die PHP 4 zugrunde liegt, führt die static- und global-Wandler für Variablen in Bezug auf Referenzen aus. Zum Beispiel erzeugt eine echte globale Variable, die mit der Anweisung global in den Funktionsbereich importiert wurde, tatsächlich eine Referenz zur globalen Variable. Das kann zu einem unerwarteten Verhalten führen, auf das im folgenden Beispiel eingegangen wird:

<?php
function test_global_ref() {
    global 
$obj;
    
$obj = &new stdclass;
}

function 
test_global_noref() {
    global 
$obj;
    
$obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
?>

Die Ausführung dieses Beispiels erzeugt die folgende Ausgabe:


NULL
object(stdClass)(0) {
}

Ein ähnliches Verhalten gilt auch für die Anweisung static. Referenzen werden nicht statisch gespeichert:

<?php
function &get_instance_ref() {
    static 
$obj;

    echo 
"Statisches Objekt: ";
    
var_dump($obj);
   if (!isset(
$obj)) {
        
// Der statischen Variablen eine Referenz zuweisen
        
$obj = &new stdclass;
    }
    
$obj->eigenschaft++;
    return 
$obj;
}

function &
get_instance_noref() {
    static 
$obj;

    echo 
"Statisches Objekt: ";
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Der statischen Variablen ein Objekt zuweisen
        
$obj = new stdclass;
    }
    
$obj->eigenschaft++;
    return 
$obj;
}

$obj1 get_instance_ref();
$immer_noch_obj1 get_instance_ref();
echo 
"\n";
$obj2 get_instance_noref();
$immer_noch_obj2 get_instance_noref();
?>

Die Ausführung dieses Beispiels erzeugt die folgende Ausgabe:


Statisches Objekt: NULL
Statisches Objekt: NULL

Statisches Objekt: NULL
Statisches Objekt: object(stdClass)(1) {
["eigenschaft"]=>
int(1)
}

Dieses Beispiel demonstriert, dass die Referenz, die einer statischen Variablen zugewiesen wird, beim zweiten Aufruf der Funktion &get_instance_ref() vergessen ist.


html/language.variables.variable.html0100644000101200010120000001164611272547377021246 0ustar docbuilderdocbuilder Variable Variablen

Variable Variablen

Manchmal ist es komfortabel, variable Variablen-Bezeichner zu benutzen. Das bedeutet, einen Variablen-Namen zu setzen und dynamisch zu gebrauchen. Eine normale Variable wird wie folgt gebildet:

<?php
$a 
"Hallo";
?>

Eine variable Variable nimmt den Wert einer Variablen und behandelt ihn als Bezeichner der Variablen. Im obigen Beispiel kann Hallo als Variablen-Name gebraucht werden, indem man zwei $-Zeichen benutzt, also schreibt:

<?php
$$a "Welt";
?>

Nun existieren in der PHP-Symbol-Struktur zwei definierte und gespeicherte Variablen: $a mit dem Inhalt "Hallo" und $Hallo mit dem Inhalt "Welt". Deshalb wird die Anweisung

<?php
echo "$a ${$a}";
?>

zur genau gleichen Ausgabe führen wie:

<?php
echo "$a $Hallo";
?>

also zu: Hallo Welt.

Wenn Sie variable Variablen mit Arrays verwenden, müssen Sie eine Doppeldeutigkeit beachten. Wenn Sie nämlich $$a[1] schreiben, dann muss der Parser wissen, ob Sie $a[1] als Variable oder $$a als Variable und dann [1] als Index dieser Variablen verwenden wollen bzw. gemeint haben. Die Syntax zur Lösung dieser Doppeldeutigkeit: Verwenden Sie im ersten Fall ${$a[1]} und im zweiten Fall ${$a}[1].

Warnung

Bitte beachten Sie, dass variable Variablen nicht bei Superglobalen Arrays verwendet werden können. Die Variable $this ist also eine spezielle Variabele die nicht dynamisch referenziert werden kann.


html/language.variables.external.html0100644000101200010120000004225111272547377021277 0ustar docbuilderdocbuilder Variablen aus externen Quellen

Variablen aus externen Quellen

HTML-Formulare (GET and POST)

Sobald ein Formular an ein PHP-Skript übergeben wird, werden die Informationen dieses Formulars dem Skript automatisch verfügbar gemacht. Es gibt viele Möglichkeiten, auf diese Informationen zuzugreifen, zum Beispiel:

Beispiel #1 Ein einfaches HTML-Formular

<form action="foo.php" method="post">
    Name:  <input type="text" name="username" /><br />
    Email: <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="Und ab!" />
</form>

Abhängig von Ihrem speziellen Setup und Ihren persönlichen Vorlieben gibt es viele Möglichkeiten, auf die Daten von Ihren HTML-Formularen zuzugreifen. Hier einige Beispiele:

Beispiel #2 Zugriff auf die Daten von einem einfachen POST HTML-Formular

<?php
// Seit PHP 4.1.0 verfügbar

   echo $_POST['benutzername'];
   echo $_REQUEST['benutzername'];

   import_request_variables('p', 'p_');
   echo $p_benutzername;

// Ab PHP 6.0.0 nicht mehr verfügbar. Ab PHP 5.0.0 können diese langen
// vordefinierten Variablen mit der Anweisung register_long_arrays
// deaktiviert werden.

   echo $HTTP_POST_VARS['benutzername'];

// Verfügbar, falls die PHP-Anweisung register_globals = on. Ab
// PHP 4.2.0 ist der standardmäßige Wert von register_globals = off.
// Es ist nicht empfehlenswert, diese Methode zu verwenden, bzw. sich
// darauf zu verlassen.

   echo $benutzername;
?>

Die Verwendung eines GET Formulars ist, davon abgesehen, dass Sie stattdessen die entsprechende vordefinierte GET-Variable erhalten, ähnlich. Außerdem wird GET auch für den QUERY_STRING (die Information nach dem '?' in einer URL) verwendet. So enthält zum Beispiel http://www.example.com/test.php?id=3 GET-Daten, auf die mit $_GET['id'] zugegriffen werden kann. Siehe auch $_REQUEST und import_request_variables().

Hinweis: Superglobale Arrays wie $_POST und $_GET stehen seit PHP 4.1.0 zur Verfügung.

Wie gezeigt, war register_globals vor PHP 4.2.0 standardmäßig on. Die PHP-Gemeinschaft ermuntert alle, sich nicht auf diese Anweisung zu stützen, weil es vorzuziehen ist, davon auszugehen, dass sie off ist und entsprechend zu programmieren.

Hinweis: Die Konfigurationseinstellung zu magic_quotes_gpc betrifft Get-, Post- und Cookie-Werte. Ist diese Einstellung aktiv, wird der Wert (It's "PHP!") automatisch zu (It\'s \"PHP!\"). Escaping ist notwendig, wenn Sie ihre Daten in eine Datenbank einfügen wollen. Siehe auch addslashes(), stripslashes() und magic_quotes_sybase.

Im Zusammenhang mit Formular-Variablen versteht PHP auch Arrays (siehe auch die verwandte Faq). Sie können z.B. die betreffenden Variablen gruppieren oder dieses Leistungsmerkmal nutzen, um Werte aus Mehrfach-Auswahl-Bereichen zu erhalten. Schicken wir zum Beispiel ein Formular an sich selbst und lassen nach dem Abschicken die Daten anzeigen:

Beispiel #3 Komplexere Formular-Variablen

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Name:  <input type="text" name="personal[name]" /><br />
    Email: <input type="text" name="personal[email]" /><br />
    Bier: <br />
    <select multiple name="bier[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbräu</option>
    </select><br />
    <input type="submit" name="submit" value="Und ab!" />
</form>

IMAGE SUBMIT Variablen-Bezeichner

Zur Übertragung eines Formulars kann auch ein Bild (Image) statt eines Übertragungs-Schalters (Submit-Button) benutzt werden, dessen Tag wie folgt aussieht:

<input type="image" src="image.gif" name="sub" />

Klickt der Benutzer irgendwo auf das Bild, wird das entsprechende Formular an den Web-Server übertragen. Hierbei sind zwei zusätzliche Variablen vorhanden, sub_x und sub_y. Diese enthalten die Koordinaten des Klick-Punktes innerhalb des Bildes. Die Erfahreneren werden sagen, dass die Variablen, die vom Browser gesendet werden einen Punkt enthalten statt eines Unterstrichs. Dieser Punkt wird von PHP automatisch in einen Unterstrich verwandelt.

HTTP-Cookies

PHP unterstützt HTTP-Cookies, wie sie in » Netscape's Spec definiert sind. Cookies ermöglichen die Daten-Speicherung innerhalb der jeweiligen Browser-Umgebung zur Weiterleitung oder wiederholten Identifikation von Benutzern. Sie können Cookies erzeugen, indem Sie die Funktion setcookie() benutzen. Cookies sind Teil des HTTP-Headers, deshalb muss die setcookie-Funktion aufgerufen werden, bevor irgendeine Ausgabe an den Browser gesendet wird. Dabei handelt es sich um die gleiche Einschränkung, die auch für die header()-Funktion gilt. Cookie-Daten stehen dann sowohl in den entsprechenden Cookie-Daten-Arrays, wie zum Beispiel $_COOKIE, $HTTP_COOKIE_VARS als auch in $_REQUEST zur Verfügung. Für weitere Details und Beispiele lesen Sie bitte die setcookie()-Seite des Handbuchs.

Wenn Sie einer einzelnen Cookie-Variable mehrere Werte zuweisen wollen, müssen Sie diese als Array übertragen. Zum Beispiel:

<?php
setcookie
("MeinCookie[foo]""Ich teste 1"time()+3600);
setcookie("MeinCookie[bar]""Ich teste 2"time()+3600);
?>

Das erzeugt zwei einzelne Cookies obwohl MeinCookie in Ihrem Skript nun ein einziges Array ist. Wenn Sie nur ein Cookie mit mehreren Werten setzen wollen, sollten Sie zuerst serialize() oder explode() auf das Array anwenden.

Bedenken Sie, dass ein Cookie ein vorhergehendes Cookie gleichen Namens überschreibt, es sei denn, der Pfad oder die Domain ist anders. Für eine Warenkorb-Anwendung können Sie deshalb z.B. einen Zähler bilden und diesen weiterleiten:

Beispiel #4 Ein setcookie()-Beispiel

<?php
if (isset($_COOKIE['zaehler'])) {
    
$zaehler $_COOKIE['zaehler'] + 1;
} else {
    
$zaehler 1;
}
setcookie("zaehler"$zaehlertime()+3600);
setcookie("Cart[$zaehler]"$itemtime()+3600);
?>

Punkte in eingelesenen Variablen-Bezeichnern

Normalerweise verändert PHP die Variablen-Bezeichner nicht, wenn sie einem Skript übergeben werden. Es sollte aber beachtet werden, dass der Punkt (".") kein gültiger Bestandteil eines Variablen-Bezeichners ist. Deshalb achten Sie auf folgendes:

<?php
$varname
.ext;  /* ungültiger Variablen-Bezeichner */
?>

Der PHP-Parser sieht eine Variable namens $varname, gefolgt von einem Zeichenketten-Verbindungs-Operator, dieser wiederrum gefolgt von der offenen Zeichenkette 'ext' (also nicht eingegrenzt durch '"' und auch keinem Schlüssel oder reserviertem Bezeichner entsprechend). Das kann natürlich nicht zum gewünschten Ergebnis führen.

Deshalb ist es wichtig zu wissen, dass PHP in den ihm übergebenen Variablen alle Punkte (.) automatisch durch einen Unterstrich (_) ersetzt.

Bestimmung des Variablen-Typs

Da PHP den Typ der Variablen bestimmt und (im Allgemeinen) selbst eine entsprechende Umformung vornimmt, ist es nicht immer klar, welchen Typ eine Variable gerade hat. PHP beinhaltet einige Funktionen, die dies herausfinden, wie zum Beispiel: gettype(), is_array(), is_float(), is_int(), is_object() und is_string(). Lesen Sie bitte auch das Kapitel über Typen.


html/language.variables.html0100644000101200010120000000317311272547377017456 0ustar docbuilderdocbuilder Variablen

html/language.constants.syntax.html0100644000101200010120000001610411272547377021045 0ustar docbuilderdocbuilder Syntax

Syntax

Sie können eine Konstante definieren, indem Sie entweder die define()-Funktion oder ab PHP 5.3.0 das Schlüsselwort const außerhalb einer Klassendefinition verwenden. Einmal definiert, kann eine Konstane weder verändert noch gelöscht werden.

Konstanten können nur skalare Daten (boolean, integer, float und string) enthalten. Es ist möglich, Konstanten vom Typ resource zu definieren, dies sollte allerdings vermieden werden, da es zu unerwarteten Ergebnissen führen kann.

Den Wert einer Konstanten erhalten Sie durch die einfache Angabe ihres Namens. Im Gegensatz zu Variablen sollten Sie einer Konstanten kein $ voranstellen. Ebenso können Sie die Funktion constant() benutzen, um den Wert einer Konstanten auszulesen, wenn Sie den Namen der Konstanten dynamisch erhalten wollen. Benutzen Sie get_defined_constants(), um eine Liste aller definierten Konstanten zu erhalten.

Hinweis: Konstanten und (globale) Variablen befinden sich in unterschiedlichen Namensräumen. Das hat zum Beispiel zur Folge, dass TRUE und $TRUE etwas völlig Verschiedenes sind.

Falls Sie eine undefinierte Konstante verwenden, nimmt PHP an, dass Sie den Namen der Konstanten selbst meinen, so als ob Sie sie als einen string (CONSTANT vs "CONSTANT") aufgerufen hätten. Falls das passiert, wird Ihnen ein Fehler vom Typ E_NOTICE ausgegeben. Lesen Sie ebenfalls den entsprechenden Manualabschnitt, der erklärt, warum $foo[bar] falsch ist (zumindest solange Sie nicht zuvor bar mittels define() als Konstante definiert haben). Möchten Sie einfach nur nachprüfen, ob eine Konstante definiert ist, benutzen Sie die Funktion defined().

Das hier sind die Unterschiede zwischen Konstanten und Variablen:

  • Konstanten haben kein Dollarzeichen ($) vorangestellt;
  • Konstanten können nur über die Funktion define() definiert werden, nicht durch einfache Zuweisung;
  • Konstanten können überall definiert werden, und auf Ihren Wert können Sie ohne Rücksicht auf Namensraumregeln von Variablen zugreifen;
  • Sobald Konstanten definiert sind, können sie nicht neu definiert oder gelöscht werden; und
  • Konstanten können nur skalare Werte haben.

Beispiel #1 Definiton von Konstanten

<?php
define
("KONSTANTE""Hallo Welt.");
echo 
KONSTANTE;     // Ausgabe: "Hallo Welt."
echo Konstante;     // Ausgabe: "Konstante" und eine Notice.
?>

Beispiel #2 Definition von Konstanten unter Verwendung des const-Keywords

<?php
// Funktioniert seit PHP 5.3.0
const CONSTANT 'Hallo Welt';

echo 
CONSTANT;
?>

Lesen Sie ebenfalls den Abschnitt über Klassenkonstanten.


html/language.constants.predefined.html0100644000101200010120000001317311272547377021627 0ustar docbuilderdocbuilder Magische Konstanten

Magische Konstanten

PHP stellt jedem Skript zur Laufzeit eine Vielzahl von vordefinierten Konstanten zur Verfügung. Viele dieser Konstanten werden jedoch von verschiedenen Erweiterungen definiert, die nur zur Verfügung stehen, wenn diese Erweiterungen selbst zur Verfügung stehen, d.h. entweder über dynamisches Laden zur Laufzeit oder Einkompilieren.

Es gibt sieben magische Konstanten, die, abhängig davon, wo sie eingesetzt werden, einen unterschiedlichen Wert haben. Zum Beispiel hängt der Wert der Konstanten __LINE__ davon ab, in welcher Zeile ihres Skripts Sie diese Konstante verwenden. Diese besonderen Konstanten sind unabhängig von Groß-/Kleinschreibung und sind folgende:

Einige "magische" PHP-Konstanten
Name Beschreibung
__LINE__ Die aktuelle Zeilennummer einer Datei.
__FILE__ Der vollständige Pfad- und Dateiname einer Datei. Wird diese Konstante innerhalb einer nachgeladenen Datei verwendet, wird der Name dieser eingebundenen Datei zurückgegeben. Seit PHP 4.0.2 enthält __FILE__ immer einen absoluten Pfad mit aufgelösten Symlinks, während in älteren Versionen unter Umständen ein relativer Pfad enthalten sein kann.
__DIR__ Der Name des Verzeichnisses, in dem sich die Datei befindet. Wird die Konstante innerhalb eines Includes verwendet, wird das Verzeichnis der eingebundenen Datei zurückgegeben. Dies entspricht dem Verhalten von dirname(__FILE__). Der Verzeichnisname hat keinen beendenden Schrägstrich, sofern es sich nicht um das Rootverzeichnis handelt. (Hinzugefügt in PHP 5.3.0)
__FUNCTION__ Der Name der Funktion. (Hinzugefügt in PHP 4.3.0.) Mit PHP 5 enthält diese Konstante den Namen der Funktion, wie dieser deklariert wurde (Beachtung der Groß- und Kleinschreibung). In PHP 4 wird der Wert immer in Kleinschrift ausgegeben.
__CLASS__ Der Name einer Klasse. (Hinzugefügt in PHP 4.3.0.) Mit PHP 5 enthält diese Konstante den Namen der Klasse, wie dieser deklariert wurde (Beachtung der Groß- und Kleinschreibung). In PHP 4 wird der Wert immer in Kleinschrift ausgegeben.
__METHOD__ Der Name einer Klassenmethode. (Hinzugefügt in PHP 5.0.0.) Der Methodenname wird genauso zurückgegeben, wie er deklariert wurde (Beachtung der Groß- und Kleinschreibung).
__NAMESPACE__ Der Name des aktuellen Namespace (Beachtung der Groß- und Kleinschreibung). Diese Konstante wird zum Kompilierungszeitpunkt definiert. (Hinzugefügt in PHP 5.3.0)

Siehe auch get_class(), get_object_vars(), file_exists() und function_exists().


html/language.constants.html0100644000101200010120000001254611272547377017526 0ustar docbuilderdocbuilder Konstanten

Konstanten

Inhaltsverzeichnis

Eine Konstante ist ein Bezeichner (Name) für eine einfache Variable. Wie der Name bereits nahelegt, kann der Wert einer Konstanten zur Laufzeit des Skripts nicht verändert werden (ausgenommen die Magischen Konstanten, die aber keine wirklichen Konstanten sind.) Eine Konstante unterscheidet standardmäßig zwischen Groß- und Kleinschreinbung (case-sensitive). Nach gängiger Konvention werden Konstanten immer in Großbuchstaben geschrieben.

Der Name einer Konstanten folgt den gleichen Regeln wie alle anderen Bezeichner in PHP. Ein gültiger Name beginnt mit einem Buchstaben oder einem Unterstrich, gefolgt von beliebig vielen Buchstaben, Ziffern oder Understrichen. Als regulärer Ausdruck könnte das so beschrieben werden: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

Tipp

Siehe auch Userland Naming Guide.

Beispiel #1 Gültige und ungültige Namen für Konstanten

<?php

// Gueltige Namen fuer Konstanten
define("FOO",     "irgendwas");
define("FOO2",    "etwas anderes");
define("FOO_BAR""irgendwas ganz anderes");

// Ungueltige Namen fuer Konstanten
define("2FOO",    "irgendwas");

// Folgendes ist korrekt, sollte aber vermieden werden:
// PHP koennte eines Tages eine Magische Konstante unterstuetzen
// die Ihr Skript nicht mehr wie gewuenscht funktionieren laesst
define("__FOO__""irgendwas");

?>

Hinweis: Für unsere Zwecke ist ein Buchstabe a-z, A-Z und die ASCII-Zeichen von 127 bis 255 (0x7f-0xff).

Wie bei superglobals ist der Gültigkeitsbereich einer Konstanten global. Unabhängig vom Gültigkeitsbereich können Sie in Ihrem Skript überall auf eine Konstante zugreifen. Für mehr Information zum Gültigkeitsbereich lesen Sie bitte den Abschnitt über den Geltungsbereich von Variablen.


html/language.expressions.html0100644000101200010120000004273511272547377020077 0ustar docbuilderdocbuilder Ausdrücke

Ausdrücke

Ausdrücke (Expressions) sind die wichtigsten Bausteine von PHP. In PHP ist fast alles, was geschrieben wird, ein Ausdruck. Die einfachste, aber auch zutreffendste Definition für einen Ausdruck ist "alles, was einen Wert hat".

Die grundlegendsten Formen von Ausdrücken sind Konstanten und Variablen. Wenn man "$a = 5" schreibt, weist man $a den Ausdruck '5' zu. '5' hat offensichtlich den Wert 5. Anders ausgedrückt: '5' ist ein Ausdruck mit dem Wert 5 (in diesem Fall ist '5' eine Integer-Konstante).

Nach dieser Zuweisung würde man erwarten, dass der Wert von $a nun ebenfalls 5 ist; wenn man also $b = $a schreibt, sollte dasselbe dabei herauskommen, als hätte man $b = 5 geschrieben. Anders ausgedrückt: $a ist ebenfalls ein Ausdruck mit dem Wert 5. Wenn alles richtig funktioniert, wird genau das passieren.

Etwas kompliziertere Beispiele für Ausdrücke sind Funktionen. Betrachten wi zum Beispiel die folgende Funktion:

<?php
function foo ()
{
    return 
5;
}
?>

Angenommen, Sie sind mit dem Konzept von Funktionen vertraut (wenn Sie es nicht sind, lesen Sie das Kapitel über Funktionen), dann würden Sie davon ausgehen, dass die Eingabe von $c = foo() grundsätzlich dasselbe bedeutet, als würde man $c = 5 schreiben, und genau das trifft zu. Funktionen sind Ausdrücke mit dem Wert ihres Rückgabewertes. Da foo() den Wert 5 zurückgibt, ist der Wert des Ausdruckes 'foo()' 5. Normalerweise geben Funktionen nicht einfach einen statischen Wert zurück, sondern berechnen etwas.

Natürlich müssen Werte in PHP keine Integer-Zahlen sein, und oft sind sie es auch nicht. PHP unterstützt vier skalare Datentypen: integer (Ganzzahlen), float (Fließkommazahlen), string (Zeichenketten) und boolean (Wahrheitswerte). (Skalare sind Datentypen, die man, im Gegensatz zu zum Beispiel Arrays, nicht in kleinere Stücke 'brechen' kann.) PHP unsterstützt auch zwei zusammengesetzte (nicht-skalare) Datentypen: Arrays und Objekte. Jeder dieser Datentypen kann Variablen zugewiesen und von Funktionen zurückgegeben werden.

PHP fasst den Begriff Ausdruck aber noch viel weiter, wie es auch andere Programmiersprachen tun. PHP ist eine ausdrucksorientierte Sprache, in dem Sinne, dass fast alles einen Ausdruck darstellt. Zurück zu dem Beispiel, mit dem wir uns bereits beschäftigt haben: '$a = 5'. Es ist einfach zu erkennen, dass hier zwei Werte enthalten sind: Der Wert der Integer-Konstanten '5' und der Wert von $a, der auf 5 geändert wird. In Wirklichkeit ist aber noch ein weiterer Wert enthalten, nämlich der Wert der Zuweisung selbst. Die Zuweisung selbst enthält den zugewiesenen Wert, in diesem Fall 5. In der Praxis bedeutet dies, dass '$a = 5', egal was es tut, immer einen Ausdruck mit dem Wert 5 darstellt. Folglich ist '$b = ($a = 5)' gleichbedeutend mit '$a = 5; $b = 5;' (ein Semikolon markiert das Ende einer Anweisung). Da Wertzuweisungen von rechts nach links geparst werden, kann man auch '$b = $a = 5' schreiben.

Ein anderes gutes Beispiel für die Ausdrucksorientierung von PHP sind Prä- und Post-Inkrement sowie die entsprechenden Dekremente. Benutzer von PHP und vielen anderen Sprachen sind vermutlich mit den Notationen 'variable++' und 'variable--' vertraut. Dies sind Inkrement- und Dekrement-Operatoren. IN PHP/FI 2 hat das Statement '$a++' keinen Wert (es ist kein Ausdruck) und daher kann man es nicht als Wert zuweisen oder in irgendeiner Weise benutzen. PHP erweitert die Eigenschaften von Dekrement und Inkrement, indem es die beiden ebenfalls wie in C zu Ausdrücken macht. In PHP gibt es, wie in C, zwei Arten von Inkrementen - Prä-Inkrement und Post-Inkrement. Grundsätzlich erhöhen sowohl Prä- als auch Post-Inkrement den Wert der Variable, und der Effekt auf die Variable ist derselbe. Der Unterschied liegt im Wert des Inkrement-Ausdruckes. Das Prä-Inkrement, das '++$variable' geschrieben wird, enthält als Wert den Wert der erhöhten Variabe (PHP erhöht den Wert der Variablen, bevor es ihren Wert ausliest, daher der Name 'PRÄ-Inkrement'). Das Post-Inkrement, das '$variable++' geschrieben wird, enthält dagegen den ursprünglichen Wert der Variablen vor der Erhöhung (PHP erhöht den Wert der Variablen, nachdem es ihren Wert ausgelesen hat, daher der Name 'POST-Inkrement').

Ein sehr gebräuchlicher Typ von Ausdrücken sind Vergleichsausdrücke. Diese Ausdrücke geben entweder FALSE oder TRUE zurück. PHP unterstützt > (größer), >= (größer oder gleich), == (gleich), != (ungleich), < (kleiner), und <= (kleiner oder gleich). Die Sprache unterstützt weiterhin ein Set von absoluten Vergleichsoperatoren: === (inhalts- und typgleich) und !== (nicht inhalts- oder typgleich). Diese Ausdrücke werden meist in bedingten Anweisungen, wie z. B. in if-Anweisungen, verwendet.

Im letzten Beispiel für Ausdrücke befassen wir uns mit kombinierten Zuweisungs- und Operator-Ausdrücken. Wir wissen bereits, dass, wenn wir $a um 1 erhöhen wollen, wir einfach '$a++' oder '++$a' schreiben können. Aber was tut man, wenn man den Wert um mehr als eins erhöhen will, z. B. um 3? Man könnte mehrer Male '$a++' schreiben, aber das ist offensichtlich weder ein effizienter noch komfortabler Weg. Viel üblicher ist es, einfach '$a = $a + 3' zu schreiben. '$a + 3' gibt den Wert von $a plus 3 zurück, dieser wird wieder $a zugewiesen, was dazu führt, dass $a nun um 3 erhöht wurde. In PHP - wie in einigen anderen Programmiersprachen, z. B. in C - kann man dies aber noch kürzer schreiben, was mit der Zeit klarer wird und auch einfacher zu verstehen ist. Um 3 zu dem aktuellen Wert von $a hinzuzufügen, schreibt man '$a += 3'. Das bedeutet exakt: "Nimm den Wert von $a, addiere 3 hinzu und weise $a den entstandenen Wert zu". Zusätzlich dazu, dass diese Schreibweise kürzer und klarer ist, wird sie auch schneller ausgeführt. Der Wert von '$a += 3' ist, wie der Wert einer regulären Zuweisung, der zugewiesene Wert. Beachten Sie, dass dieser Wert NICHT 3, sondern dem kombinierten Wert von $a plus 3 entspricht (das ist der Wert, der $a zugewiesen wird). Jeder Operator, der zwei Elemente verbindet, kann in dieser Schreibweise verwendet werden, z. B. '$a -= 5' (vermindert den Wert von $a um 5) oder '$a *= 7' (multipliziert den Wert von $a mit 7 und weist das Ergebnis $a zu), usw.

Es gibt einen weiteren Ausdruck, der Ihnen vielleicht seltsam vorkommt, wenn Sie ihn bisher noch in keiner Programmiersprache kennengelernt haben, den dreifach konditionalen Operator:

<?php
$eins 
$zwei $drei
?>

Wenn der Wert des ersten Sub-Ausdruckes (hier: $eins) TRUE ist (d. h. nicht 0), dann wird der Wert des zweiten Subausdrucks (hier: $zwei) ausgewertet und ist das Ergebnis des konditionalen Ausdrucks. Andernfalls wird der dritte Subausdruck ausgewertet und dessen Wert zurückgegeben.

Das folgende Beispiel sollte das Verständnis von Prä- und Post-Inkrement und von Ausdrücken im Allgemeinen erleichtern:

<?php
function verdoppeln($i)
{
    return 
$i*2;
}
$b $a 5;        /* Weise den Variablen $a und $b den Wert 5 zu */
$c $a++;          /* Post-Inkrement, der urspruengliche Wert von $a (5)
                       wird $c zugewiesen. */
$e $d = ++$b;     /* Prae-Inkrement, der erhöhte Wert von $b (6) wird $d und
                       $e zugewiesen. */

/* An diesem Punkt sind $d und $e beide gleich 6 */

$f verdoppeln($d++);  /* Weise $f den doppelten Wert von $d vor
                           der Erhöhung um eins zu, 2*6 = 12 */
$g verdoppeln(++$e);  /* Weise $g den doppelten Wert von $e nach
                           der Erhoehung um eins zu, 2*7 = 14 to $g */
$h $g += 10;      /* Zuerst wird $g um 10 erhöht und hat damit den Wert
                       24. Der Wert dieser Zuweisung (24) wird dann $h
                       zugewiesen, womit $h ebenfalls den Wert von 24 hat. */
?>

Einige Ausdrücke können wie Anweisungen verwendet werden. In diesem Falle hat eine Anweisung die Form 'expr ;', dies meint einen Ausdruck gefolgt von einem Semikolon. In '$b = $a = 5;' ist '$a = 5' ein gültiger Ausdruck, aber für sich allein keine Anweisung. '$b = $a = 5;' ist jedoch eine gültige Anweisung.

Ein letzter Punkt, der noch zu erwähnen ist, ist der Wahrheitswert von Ausdrücken. In vielen Fällen, hauptsächlich in bedingten Anweisungen und Schleifen, ist man nicht am spezifischen Wert eines Ausdrucks interessiert, sondern kümmert sich nur darum, ob er TRUE oder FALSE bedeutet. Die Konstanten TRUE und FALSE (case-insensitiv) sind die beiden möglichen Wahrheitswerte. Wenn nötig wird ein Ausdruck automatisch in einen Boolschen Wert konvertiert. Wenn Sie mehr darüber erfahren wollen, lesen Sie den Abschnitt über Typecasting.

PHP stellt eine vollständige und mächtige Implementat von Ausdrücken bereit, deren vollständige Dokumentation den Rahmen dieses Manuals sprengen würde. Die obigen Beispiele sollten Ihnen einen guten Eindruck davon verschaffen, was Ausdrücke sind und wie man nützliche Ausdrücke konstruieren kann. Im Rest dieses Manuals werden wir expr schreiben, um ausdrücken, dass an dieser Stelle jeder gültige PHP-Ausdruck stehen kann.


html/language.operators.precedence.html0100644000101200010120000001211511272547377021614 0ustar docbuilderdocbuilder Operator-Rangfolge

Operator-Rangfolge

Die Operator-Rangfolge legt fest, wie "eng" ein Operator zwei Ausdrücke miteinander verbindet. Zum Beispiel ist das Ergebnis des Ausdruckes 1 + 5 * 3 16 und nicht 18, da der Multiplikations-Operator ("*") in der Rangfolge höher steht als der Additions-Operator ("+"). Wenn nötig, können Sie Klammern setzen, um die Rangfolge der Operatoren zu beeinflussen. Zum Beispiel ergibt: (1 + 5) * 3 18. Ist die Rangfolge der Operatoren gleich, wird links nach rechts Assoziativität benutzt.

Die folgende Tabelle zeigt die Rangfolge der Operatoren, oben steht der Operator mit dem höchsten Rang.

Operator-Rangfolge
Assoziativität Operator
keine Richtung new
rechts [
rechts ! ~ ++ -- (int) (float) (string) (array) (object) @
links * / %
links + - .
links << >>
keine Richtung < <= > >=
keine Richtung == != === !==
links &
links ^
links |
links &&
links ||
links ? :
rechts = += -= *= /= .= %= &= |= ^= <<= >>=
rechts print
links and
links xor
links or
links ,

Hinweis: Obwohl ! einen höheren Rang gegenüber = hat, erlaubt es Ihnen PHP immer noch ähnliche Ausdrücke wie den folgenden zu schreiben: if (!$a =foo()).In diesem Ausdruck wird die Ausgabe von foo() der Variablen $a zugewiesen.


html/language.operators.arithmetic.html0100644000101200010120000000571111272547377021654 0ustar docbuilderdocbuilder Arithmetische Operatoren

Arithmetische Operatoren

Erinnern Sie sich noch an die Grundrechenarten aus der Schule? Die arithmetischen Operatoren funktionieren genauso:

Arithmetische Operatoren
Beispiel Name Ergebnis
$a + $b Addition Summe von $a und $b.
$a - $b Subtraktion Differenz von $a und $b.
$a * $b Multiplikation Produkt von $a und $b.
$a / $b Division Quotient von $a und $b.
$a % $b Modulus Rest von $a geteilt durch $b.

Der Divisions-Operator ("/") gibt immer eine Fließkommazahl zurück, sogar wenn die zwei Operanden Ganzzahlen sind (oder Zeichenketten, die nach Ganzzahlen umgewandelt wurden).

Siehe auch im Handbuch das Kapitel über Mathematische Funktionen.


html/language.operators.assignment.html0100644000101200010120000001252711272547377021676 0ustar docbuilderdocbuilder Zuweisungsoperatoren

Zuweisungsoperatoren

Der einfachste Zuweisungsoperator ist "=". Wahrscheinlich kommt man als erstes auf die Idee, ihn mit "ist gleich" zu bezeichnen. Das ist falsch. In Wirklichkeit bedeutet er, dass dem linken Operanden der Wert des Ausdrucks auf der rechten Seite zugewiesen wird (man müsste ihn also mit "wird gesetzt auf den Wert von" übersetzen).

Der Wert eines Zuweisungs-Ausdruckes ist der zugewiesene Wert. D.h. der Wert des Ausdruckes "$a = 3" ist 3. Das erlaubt es, einige raffinierte Dinge anzustellen:

<?php

$a 
= ($b 4) + 5// $a ist nun gleich 9 und $b wurde auf den Wert 4 gesetzt.

?>

Zusätzlich zu dem oben vorgestellten Zuweisungsoperator "=" gibt es "kombinierte Operatoren" für alle binären, arithmetischen und String-Operatoren, die es erlauben, den Wert einer Variablen in einem Ausdruck zu benutzen, und dieser anschließend das Ergebnis des Ausdrucks als neuen Wert zuzuweisen. Zum Beispiel:

<?php

$a 
3;
$a += 5// setzt $a auf den Wert 8, als ob wir geschrieben haetten: $a = $a + 5;
$b "Hallo ";
$b .= "Du!"// setzt $b auf den Wert "Hallo Du!", aequivalent zu 
             // $b = $b . "Du!";
?>

Man beachte, dass die Zuweisung nur den Wert der Ursprungsvarialbe der neuen Variable zuweist (Zuweisung als Wert, sie "kopiert"), weshalb sich Änderungen an der einen Variablen nicht auf die andere auswirken werden. Das kann wichtig sein, wenn man ein großes Array o. ä. in einer Schleife kopieren muss. Beginnend mit PHP 4 wird 'assignement by reference' (Zuweisung als Verweis), mit Hilfe der Schreibweise $var =&$othervar; unterstützt , das funktioniert jedoch nicht in PHP 3. 'Assignement by reference' bedeutet, dass beide Variablen nach der Zuweisung die selben Daten repräsentieren und nichts kopiert wird. Um mehr über Referenzen zu lernen, lesen Sie bitte den Abschnitt Referenzen erklärt.


html/language.operators.bitwise.html0100644000101200010120000001176511272547377021177 0ustar docbuilderdocbuilder Bit-Operatoren

Bit-Operatoren

Bit-Operatoren erlauben es, in einem Integer bestimmte Bits "ein- oder auszuschalten" (auf 0 oder 1 zu setzen). Wenn beide, der links- und rechtsseitige Parameter, Zeichenketten sind, arbeiten die Bit-Operatoren mit ASCII-Werten der einzelnen Zeichen.

<?php
echo 12 9// Ausgabe '5'

echo "12" "9"// Ausgabe: das Backspace-Zeichen (ascii 8)
                 // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8

echo "hallo" "hello"// Gibt die ASCII-Werte #0 #4 #0 #0 #0
                        // 'a' ^ 'e' = #4 aus
?>

Bit-Operatoren
Beispiel Name Ergebnis
$a & $b Und Bits, die in $a und $b gesetzt sind werden gesetzt.
$a | $b Oder Bits, die in $a oder $b gesetzt sind werden gesetzt.
$a ^ $b Entweder oder (Xor) Bits, die entweder in $a oder $b gesetzt sind, werden gesetzt aber nicht in beiden.
~ $a Nicht Die Bits, die in $a nicht gesetzt sind, werden gesetzt und umgekehrt.
$a << $b Nach links verschieben Verschiebung der Bits von $a um $b Stellen nach links (jede Stelle entspricht einer Mulitplikation mit zwei).
$a >> $b Nach rechts verschieben Verschiebt die Bits von $a um $b Stellen nach rechts (jede Stelle entspricht einer Division durch zwei).

html/language.operators.comparison.html0100644000101200010120000003072411272547377021677 0ustar docbuilderdocbuilder Vergleichs-Operatoren

Vergleichs-Operatoren

Vergleichs-Operatoren erlauben es - wie der Name schon sagt - zwei Werte zu vergleichen. Wenn Sie an Beispielen verschiedener auf Typen bezogener Vergleiche interessiert sind, können Sie sich PHP type comparison tables anschauen.

Vergleichsoperatoren
Beispiel Name Ergebnis
$a == $b Gleich Gibt TRUE zurück, wenn $a gleich $b ist.
$a === $b Identisch Gibt TRUE zurück wenn $a gleich $b ist und beide vom gleichen Typ sind (eingeführt in PHP 4).
$a != $b Ungleich Gibt TRUE zurück, wenn $a nicht gleich $b ist.
$a <> $b Ungleich Gibt TRUE zurück, wenn $a nicht gleich $b ist.
$a !== $b Nicht identisch Gibt TRUE zurück, wenn $a nicht gleich $b ist, oder wenn beide nicht vom gleichen Typ sind (eingeführt in PHP 4).
$a < $b Kleiner Als Gibt TRUE zurück, wenn $a kleiner als $b ist.
$a > $b Größer Als Gibt TRUE zurück, wenn $a größer als $b ist.
$a <= $b Kleiner Gleich Gibt TRUE zurück, wenn $a kleiner oder gleich $b ist.
$a >= $b Größer Gleich Gibt TRUE zurück, wenn $a größer oder gleich $b ist.

Ein weiter Vergleichs-Operator ist der "?:"- oder Trinitäts-Operator.

<?php
// Beispielanwendung für den Trinitäts-Operator
$action = (empty($_POST['action'])) ? 'standard' $_POST['action'];

// Obiges ist mit dieser if/else-Anweisung identisch
if (empty($_POST['action'])) {
    
$action 'standard';
} else {
    
$action $_POST['action'];
}
?>

Der Ausdruck (ausdr1) ? (ausdr2) : (ausdr3) gibt ausdr2 zurück, wenn ausdr1 TRUE zurückgibt und ausdr3, wenn ausdr1 FALSE zurückgibt.

Siehe auch strcasecmp(), strcmp(), Array-Operatoren und den Abschnitt über Typen.

Ternary Operator

Another conditional operator is the "?:" (or ternary) operator.

Beispiel #1 Assigning a default value

<?php
// Example usage for: Ternary Operator
$action = (empty($_POST['action'])) ? 'default' $_POST['action'];

// The above is identical to this if/else statement
if (empty($_POST['action'])) {
    
$action 'default';
} else {
    
$action $_POST['action'];
}

?>

The expression (expr1) ? (expr2) : (expr3) evaluates to expr2 if expr1 evaluates to TRUE, and expr3 if expr1 evaluates to FALSE.

Since PHP 5.3, it is possible to leave out the middle part of the ternary operator. Expression expr1 ?: expr3 returns expr1 if expr1 evaluates to TRUE, and expr3 otherwise.

Hinweis: Please note that the ternary operator is a statement, and that it doesn't evaluate to a variable, but to the result of a statement. This is important to know if you want to return a variable by reference. The statement return $var == 42 ? $a : $b; in a return-by-reference function will therefore not work and a warning is issued in later PHP versions.

Hinweis: It is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious:

Beispiel #2 Non-obvious Ternary Behaviour

<?php
// on first glance, the following appears to output 'true'
echo (true?'true':false?'t':'f');

// however, the actual output of the above is 't'
// this is because ternary expressions are evaluated from left to right

// the following is a more obvious version of the same code as above
echo ((true 'true' 'false') ? 't' 'f');

// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>



html/language.operators.errorcontrol.html0100644000101200010120000001244711272547377022261 0ustar docbuilderdocbuilder Fehler-Kontroll-Operatoren

Fehler-Kontroll-Operatoren

PHP unterstützt einen Operator zur Fehlerkontrolle: Das @-Symbol. Stellt man das @ in PHP vor einen Ausdruck werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden könnten, ignoriert.

Ist das track_errors-Feature aktiviert, werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden, in der Variablen $php_errormsg gespeichert. Da diese Variable mit jedem neuen Auftreten eines Fehlers überschrieben wird, sollte man sie möglichst bald nach Verwendung des Ausdrucks überprüfen, wenn man mit ihr arbeiten will.

<?php
/* Beabsichtigter Dateifehler */
$my_file = @file ('nicht_vorhandene_Datei') or
    die (
"Datei konnte nicht geöffnetwerden: Fehler war:'$php_errormsg'");

// Das funktioniert bei jedem Ausdruck, nicht nur bei Funktionen:
$value = @$cache[$key]; 
// erzeugt keine Notice, falls der Index $key nicht vorhanden ist.

?>

Hinweis: Der @-Operator funktioniert nur bei Ausdrücken. Eine einfache Daumenregel: wenn Sie den Wert von etwas bestimmen können, dann können Sie den @-Operator davor schreiben. Zum Beispiel können Sie ihn vor Variablen, Funktionsaufrufe und vor include() setzen, vor Konstanten und so weiter. Nicht verwenden können Sie diesen Operator vor Funktions- oder Klassendefinitionen oder vor Kontrollstrukturen wie zum Beispiel if und foreach und so weiter.

Siehe auch error_reporting() und den Abschnitt über Error Handling and Logging Functions.

Hinweis: Der @ Fehler-Kontroll-Operator verhindert jedoch keine Meldungen, welche aus Fehlern beim Parsen resultieren.

Warnung

Zum gegenwärtigen Zeitpunkt deaktiviert der "@" Fehler-Kontrolloperator die Fehlermeldungen selbst bei kritischen Fehlern, die die Ausführung eines Skripts beenden. Unter anderem bedeutet das, wenn Sie "@" einer bestimmten Funktion voranstellen, diese aber nicht zur Verfügung steht oder falsch geschrieben wurde, Ihr PHP-Skript einfach beendet wird, ohne Hinweis auf die Ursache.


html/language.operators.execution.html0100644000101200010120000000634211272547377021527 0ustar docbuilderdocbuilder Operatoren zur Programmausführung

Operatoren zur Programmausführung

PHP unterstützt einen Operator zur Ausführung externer Programme: Die sog. Backticks (``). Achtung: Die Backticks sind keine einfachen Anführungszeichen! PHP versucht, den Text zwischen den Backticks als Kommandozeilen-Befehl auszuführen. Die Ausgabe des aufgerufenen Programms wird zurückgegeben (d.h. wird nicht einfach ausgegeben, sondern kann einer Variablen zugewiesen werden). Die Verwendung des Backtick-Operators ist mit shell_exec() identisch.

<?php
$output 
= `ls -al`;
echo 
"<pre>$output</pre>";
?>

Hinweis: Der Backtick-Operator steht nicht zur Verfügung, wenn Safe Mode aktiviert ist oder die Funktion shell_exec() deaktiviert wurde.

Siehe auch den Abschnitt über Funktionen zur Programmausführung, popen(), proc_open() und Using PHP from the commandline.


html/language.operators.increment.html0100644000101200010120000002100611272547377021502 0ustar docbuilderdocbuilder Inkrement- bzw. Dekrementoperatoren

Inkrement- bzw. Dekrementoperatoren

PHP unterstützt Prä- und Post-Inkrement- und Dekrementoperatoren im Stil der Programmiersprache C.

Inkrement- und Dekrementoperatoren
Beispiel Name Auswirkung
++$a Prä-Inkrement Erhöht den Wert von $a um eins (inkrementiert $a) und gibt anschließend den neuen Wert von $a zurück.
$a++ Post-Inkrement Gibt zuerst den aktuellen Wert von $a zurück und erhöht dann den Wert von $a um eins.
--$a Prä-Dekrement Vermindert den Wert von $a um eins (dekrementiert $a) und gibt anschließend den neuen Wert von $a zurück.
$a-- Post-Dekrement Gibt zuerst den aktuellen Wert von $a zurück und erniedrigt dann den Wert von $a um eins.

Ein einfaches Beispiel-Skript:

<?php
echo "<h3>Post-Inkrement</h3>";
$a 5;
echo 
"Sollte 5 sein: " $a++ . "<br />\n";
echo 
"Sollte 6 sein: " $a "<br />\n";

echo 
"<h3>Pre-Inkrement</h3>";
$a 5;
echo 
"Sollte 6 sein: " . ++$a "<br />\n";
echo 
"Sollte 6 sein: " $a "<br />\n";

echo 
"<h3>Post-Dekrement</h3>";
$a 5;
echo 
"Sollte 5 sein: " $a-- . "<br />\n";
echo 
"Sollte 4 sein: " $a "<br />\n";

echo 
"<h3>Pre-Dekrement</h3>";
$a 5;
echo 
"Sollte 4 sein: " . --$a "<br />\n";
echo 
"Sollte 4 sein: " $a "<br />\n";
?>

PHP folgt bei der Behandlung arithmetischer Operationen an Zeichenvariablen der Perl-Konvention und nicht der von C. Zum Beispiel wird in Perl aus 'Z'+1 'AA', während aus 'Z'+1 in C '[' wird ( ord('Z') == 90, ord('[') == 91 ). Beachten Sie, dass Zeichenvariablen zwar inkrementiert aber nicht dekrementiert werden können.

Beispiel #1 Arithmetrische Operationen an Zeichenvariablen

<?php
$i 
'W';
for(
$n=0$n<6$n++)
  echo ++
$i "\n";

/*
  Erzeugt in etwa folgende Ausgabe:

X
Y
Z
AA
AB
AC

*/
?>


html/language.operators.logical.html0100644000101200010120000000664111272547377021140 0ustar docbuilderdocbuilder Logische Operatoren

Logische Operatoren

Logische Operatoren
Beispiel Name Ergebnis
$a and $b Und TRUE wenn sowohl $a als auch $b TRUE ist.
$a or $b Oder TRUE wenn $a oder $b TRUE ist.
$a xor $b Entweder Oder TRUE wenn entweder $a oder $b TRUE ist, aber nicht beide.
! $a Nicht TRUE wenn $a nicht TRUE ist.
$a && $b Und TRUE wenn sowohl $a als auch $b TRUE ist.
$a || $b Oder TRUE wenn $a oder $b TRUE ist.

Der Grund dafür, dass es je zwei unterschiedliche Operatoren für die "Und"- und die "Oder"-Verknüpfung gibt ist der, dass die beiden Operatoren jeweils Rangfolgen haben. (siehe auch Operator-Rangfolge.)


html/language.operators.string.html0100644000101200010120000000656311272547377021037 0ustar docbuilderdocbuilder Zeichenketten-Operatoren

Zeichenketten-Operatoren

Es gibt in PHP zwei Operatoren für string (Zeichenkette). Der erste ist der Vereinigungs-Operator ('.'), dessen Rückgabewert eine zusammengesetzte Zeichenkette aus dem rechten und dem linken Argument ist. Der zweite ist der Vereinigungs-Zuweisungsoperator ('.='), der das Argument auf der rechten Seite an das Argument der linken Seite anhängt. Siehe Zuweisungs-Operatoren für weitere Informationen.

<?php
$a 
"Hallo ";
$b $a "Welt!"// $b enthält jetzt den Text "Hallo Welt!"

$a "Hallo ";
$a .= "Welt!";    // $a enthält jetzt den Text "Hallo Welt!"
?>

Siehe auch die Abschnitte über Strings / Zeichenketten und String-Funktionen.


html/language.operators.array.html0100644000101200010120000002043611272547377020642 0ustar docbuilderdocbuilder Array-Operatoren

Array-Operatoren

Array-Operatoren
Beispiel Name Ergebnis
$a + $b Vereinigung Verinigung von $a und $b.
$a == $b Gleichwerigkeit TRUE wenn $a und $b die gleichen Schlüssel- und Wert-Paare enthalten.
$a === $b Identität TRUE wenn $a und $b die gleichen Schlüssel- und Wert-Paare in der gleichen Reihenfolge enthalten.
$a != $b Ungleichheit TRUE wenn $a nicht gleich $b ist.
$a <> $b Ungleichheit TRUE wenn $a nicht gleich $b ist.
$a !== $b nicht identisch TRUE wenn $a nicht identisch zu $b ist.

Der + Operator hängt das rechsstehende Array an das linksstehende Array an, wobei doppelte Schlüssel NICHT überschrieben werden.

<?php
$a 
= array("a" => "Apfel""b" => "Banane");
$b = array("a" =>"pear""b" => "Erdbeere""c" => "Kirsche");

$c $a $b// Verinigung von $a mit $b;
echo "Vereinigung von \$a mit \$b: \n";
var_dump($c);

$c $b $a// Vereinigung von $b mit $a;
echo "Vereinigung von \$b mit \$a: \n";
var_dump($c);
?>

Dieses Skript gibt folgendes aus:

Vereinigung von $a mit $b:
array(3) {
  ["a"]=>
  string(5) "Apfel"
  ["b"]=>
  string(6) "Banane"
  ["c"]=>
  string(7) "Kirsche"
}
Vereinigung von $b mit $a:
array(3) {
  ["a"]=>
  string(4) "pear"
  ["b"]=>
  string(8) "Erdbeere"
  ["c"]=>
  string(7) "Kirsche"
}

Beim Vergleich werden Arrayelemente als gleich angesehen, wenn diese dieselben Schlüssel und Werte beinhalten.

Beispiel #1 Array-Vergleiche

<?php
$a 
= array("Apfel""Banane");
$b = array(=> "Banane""0" => "Apfel");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

Siehe auch die Abschnitte über Arrays und Array-Funktionen.


html/language.operators.type.html0100644000101200010120000000514611272547377020506 0ustar docbuilderdocbuilder Typ Operatoren

Typ Operatoren

In PHP gibt es einen einzigen Typ Operator: instanceof. instanceof wird dazu verwendet um festzustellen, ob ein gegebenes Objekt ein Objekt ist, das zu einer bestimmten Klasse gehört.

instanceof wurde in PHP 5 eingeführt. Vorher wurde is_a() benutzt, aber is_a() ist veraltet und instanceof sollte stattdessen benutzt werden.

<?php
class A { }
class B { }

$ding = new A;

if ($ding instanceof A) {
    echo 'A';
}
if ($ding instanceof B) {
    echo 'B';
}
?>

Da $ding ein object vom Typ A und nicht von B ist, wird nur der Programmblock ausgeführt, der abhängig von Typ A ist:

A

See auch get_class() und is_a().


html/language.operators.html0100644000101200010120000000706111272547377017524 0ustar docbuilderdocbuilder Operatoren

Operatoren

Inhaltsverzeichnis

Ein Operator ist etwas das Sie mit einem oder mehreren Werten füttern (oder Ausdrücken, um im Programmierjargon zu sprechen) und Sie erhalten als Ergebnis einen anderen Wert (damit wird diese Konstruktion selbst zu einem Ausdruck). Als Eselsbrücke können Sie sich Operatoren als Funktionen oder Konstrukte vorstellen, die Ihnen einen Wert zurück liefern (ähnlich print) und alles, was Ihnen keinen Wert zurück liefert (ähnlich echo) als irgend etwas Anderes.

Es gibt drei Arten von Opratoren. Als erstes gibt es den unären Operator, der nur mit einem Wert umgehen kann, zum Beispiel ! (der Verneinungsoperator) oder ++ (der Inkrementoperator). Die zweite Gruppe sind die sogenannten binären Operatoren; diese Gruppe enthält die meisten Operatoren, die PHP unterstützt. Eine Liste dieser Operatoren finden Sie weiter unten im Abschnitt Operator-Rangfolge .

Die dritte Gruppe bildet der ternäre Operator : ?:. Dieser sollte eher benutzt werden um abhängig von einem dritten Ausdruck eine Auswahl zwischen zwei Ausdrücken zu treffen, als zwischen zwei Sätzen oder Pfaden der Programmausführung zu wählen. Übrigens ist es eine sehr gute Idee ternäre Ausdrücke in Klammern zu setzen.


html/control-structures.intro.html0100644000101200010120000000347011272547377020757 0ustar docbuilderdocbuilder Einführung

Einführung

Ein PHP-Skript besteht aus einer Abfolge von Anweisungen. Eine Anweisung kann eine Zuweisung, ein Funktionsaufruf oder ein bedingte Anweisung sein oder sogar eine Anweisung die nichts tut (eine leere Anweisung). Anweisungen enden in der Regel mit einem Semikolon. Anweisungen können des Weiteren in Anweisungsgruppen zusammengefasst werden indem sie in geschweifte Klammern eingeschlossen werden. Eine Anweisungsgruppe ist ebenfalls wieder eine Anweisung. Die verschiedenen Anweisungstypen werden in diesem Kapitel beschrieben.


html/control-structures.if.html0100644000101200010120000001136011272547377020217 0ustar docbuilderdocbuilder if

if

Das if-Konstrukt ist eines der wichtigsten Features vieler Programmiersprachen, so auch in PHP, denn es ermöglicht die bedingte Ausführung von Kodefragmenten. PHP bietet eine if-Anweisung die der in C ähnelt:

if (expression)
  statement

expression wird wie im Abschnitt über Ausdrücke beschrieben zu einem boolschen Wahr