|
|
 |
|
|
 |
 |
 |
 |
 |
Hits gesamt: 5203802 Hits Heute: 459 max. Hits (10.07.07): 6964 User Online: 24 Scripts: 2828 |
|
|
 |
 |
 |
 |
 |
 |
|
 |
|
|
 |
|
|
 |
|
|
 |
|
|
 |
|
 |
 |
 |
 |
 |
Manuals > PHP >
Installation auf Windows Systemen |
Installation auf Windows Systemen
Dieser Abschnitt behandelt Windows 98/Me und Windows NT/2000/XP
PHP läuft nicht auf 16 Bit-Plattformen wie z.B. Windows 3.1, und
manchmal sprechen wir bei den unterstützten Plattformen von Win32.
Seit PHP 4.3.0 wird auch Windows 95 nicht mehr unterstützt.
Es gibt zwei Wege PHP für Windows zu installieren: entweder
manuell, oder mittels
dem InstallShield
Installer.
Wenn Sie Microsoft Visual Studio besitzen, können Sie auch den
Source Code von PHP selbst kompilieren.
Haben Sie PHP erst einmal auf Ihrem Windows System installiert,
können Sie als Erweiterung der Funktionalität auch verschiedene
Erweiterungen laden.
Windows InstallShield
Der auf der Downloadseite http://www.php.net/downloads.php erhältliche
Windows PHP Installer installiert die CGI Version
von PHP, und konfiguriert auch die Webserver IIS,
PWS, und Xitami.
Anmerkung:
Beachten Sie bitte, dass der InstallShield Installer zwar eine einfache
Art der Installation von PHP ist, gleichzeitig aber
auch in verschiedenen Aspekten eingeschränkt ist, wie z.B. ein
automatisches Setup von Erweiterungen nicht unterstützt wird. Das gesamte
Angebot an unterstützten Erweiterungen ist nur verfügbar, wenn Sie die
Binärdistribution im zip-Format herunterladen.
Installieren Sie Ihren gewünschten HTTP Server auf
Ihrem System und stellen Sie sicher, dass er läuft.
Starten Sie nun das Installationsprogramm, und folgen Sie den
Instruktionen des Installation Wizards. Es werden zwei
Installationsarten unterstützt: Standard bietet zweckmäßige
Standardeinstellungen wo dies möglich ist, und Advanced (erweitert),
welche die gewünschten Einstellungen während der Installation abfragt.
Der Installation Wizard sammelt genug Informationen, um die php.ini zu
erstellen, und den Webserver für den Einsatz von PHP zu konfigurieren.
Für IIS und auch PWS auf Windows NT Workstation wird eine Liste mit den
Knoten auf dem Server, sowie eine Liste mit den Script Mappings angezeigt
aus welcher Sie die gewünschten Knoten auswählen können, auf denen PHP in
die Script Mappings eingetragen werden soll.
Wenn die Installation fertig ist informiert Sie der Installer, ob Sie
Ihr System oder den Server neu starten sollen, oder ob Sie einfach mit
der Nutzung von PHP beginnen können.
| Warnung |
Seien Sie sich darüber im Klaren, dass dieses Setup von PHP nicht sicher
ist. Wenn Sie ein sicheres Setup von PHP möchten, setzen Sie PHP manuell
auf, und wählen jede Option sorgfältig aus. Dieses automatische Setup
bietet Ihnen eine sofort lauffähige PHP Installation, ist jedoch nicht
für den Einsatz auf Online-Servern gedacht.
|
Manuelle Installationsschritte
Diese Installationsanleitung hilft Ihnen, PHP auf Ihrem Windows
Webserver manuell zu installieren und zu konfigurieren. Laden Sie sich
hierfür bitte die gezippte Distribution von der Downloadseite http://www.php.net/downloads.php herunter. Die
Originalversion dieser Anleitung wurde von Bob Silva verfasst, welche
Sie auf http://www.umesd.k12.or.us/php/win32install.html finden.
Diese Anleitung unterstützt Sie bei der manuellen Installation für:
Personal Web Server 3 und 4 oder neuer
Internet Information Server 3 und 4 oder neuer
Apache 1.3.x
OmniHTTPd 2.0b1 und höher
Oreilly Website Pro
Xitami
Netscape Enterprise Server, iPlanet
PHP 4 für Windows gibt es in zwei Varianten - ein CGI Modul (php.exe),
und verschiedene SAPI Module (z.B. php4isapi.dll). Letztere ist neu
in PHP 4, und bietet eine signifikant höhere Performance, sowie neue
Funktionalitäten. Zusätzlich gibt es eine CLI Version, die im Abschnitt
Using PHP from the command
line näher beschrieben ist.
| Warnung |
Die Qualität der SAPI Module wurde in PHP 4.1 signifikant erhöht. In
älteren Systemen könnte es vorkommen, dass beim Server Fehlermeldungen
auftreten, oder dass andere Servermodule wie z.B. ASP nicht funktionieren.
|
Wenn Sie eines der SAPI Module unter Windows 95 einsetzen möchten, holen
Sie sich das DCOM Update von den Microsoft
DCOM Seiten. Für das ISAPI Modul wird ein ISAPI 4.0 kompatibler
Webserver benötigt (getestet wurden IIS 4.0, PWS 4.0 und IIS 5.0).
IIS 3.0 wird NICHT unterstützt. Wenn Sie gediegene
PHP Unterstützung wünschen, sollten Sie In diesem Fall den Windows NT 4.0
Option Pack mit IIS 4.0 downloaden.
Die folgenden Schritte sollten vor den serverspezifischen Instruktionen
an allen Installationen durchgeführt werden.
Entpacken Sie die in der Distribution enthaltenen Dateien in ein
Verzeichnis Ihrer Wahl. Wir empfehlen c:\php\.
Sie sollten jedoch keinen Pfad wählen, in dem sich Leerzeichen
befinden (z.B. c:\program files\php ist keine gute Idee), da
sonst manche Webserver abstürzen könnten.
Stellen Sie sicher, dass die von PHP verwendeten DLLs gefunden
werden können. Welche DLLs benötigt werden, hängt von dem
verwendeten Webserver ab, und ob Sie PHP als CGI- oder Server-Modul
einsetzen. php4ts.dll wird immer verwendet.
Wenn Sie ein Server-Modul benutzen (z.B. ISAPI oder Apache), dann
brauchen Sie die entsprechende DLL des sapi
Verzeichnisses. Wenn Sie PHP extension DLLs benutzen, benötigen
Sie diese ebenfalls. Um sicherzugehen, dass diese auch gefunden
werden, können Sie sie entweder in das Systemverzeichnis (z.B.
winnt/system32 oder
windows/system) kopieren, oder Sie können
sie in das gleiche Verzeichnis stellen, in welchem sich auch die
von Ihrem Webserver benutzte EXE- bzw. DLL-Datei befindet (z.B.
php.exe, php4apache.dll).
Die PHP Programmdatei, die SAPI Module, und einige Erweiterungen
benötigen externe DLLs. Stellen Sie sicher, dass diese DLLs der
Distribution in einem Verzeichnis liegen, welches im Windows PATH
liegt. Wenn Sie z.B. php_oci8.dll in der php.ini
aktivieren, dann muss das Oracle Heimatverzeichnis im PATH sein, sodass
PHP die oci.dll finden kann.
Der einfachste Weg dazu ist, die nachstehenden Dateien in
Ihr Systemverzeichnis zu kopieren. Dieses heißt gewöhnlich:
|
c:\windows\system auf Windows 9x/ME
| |
c:\winnt\system32 auf Windows NT/2000
| |
c:\windows\system32 auf Windows XP
|
Die zu kopierenden Dateien sind:
|
php4ts.dll. Wenn sie dort bereits existiert,
überschreiben Sie sie.
| |
Die Dateien in dem Verzeichnis 'dlls' Ihrer
Distribution. Sollten diese Dateien bereits auf Ihrem System
installiert sein, überschreiben Sie diese nur, wenn etwas
nicht korrekt läuft (Vor dem Überschreiben empfehlen wir ein
Backup, oder verschieben diese Dateien in ein anderes
Verzeichnis - nur für den Fall dass etwas schiefgeht).
|
Holen Sie sich die letzte Version der Microsoft Data Access
Components (MDAC) für Ihre Plattform, speziell wenn Sie Windows
9x/NT4 benutzen. MDAC finden Sie unter http://www.microsoft.com/data/.
Kopieren Sie die gewünschte ini Datei (siehe unten) in Ihr
'%WINDOWS%' Verzeichnis auf Windows 9x/ME, oder in Ihr
'%SYSTEMROOT%' Verzeichnis unter Windows NT/2000/XP,
und benennen Sie sie in php.ini um. Ihr '%WINDOWS%'
oder '%SYSTEMROOT%' Verzeichnis ist normalerweise:
| c:\windows auf Windows 9x/ME/XP | | c:\winnt oder c:\winnt40
auf NT/2000 Servern |
In der Zip-Datei befinden sich zwei ini Dateien:
php.ini-dist und
php.ini-optimized. Wir empfehlen, die
php.ini-optimized zu verwenden, da in
dieser Datei die Default-Einstellungen für Performance und
Sicherheit optimiert sind. Am besten ist es, all die
ini Einstellungen
selbst manuell vorzunehmen. Wenn Sie die bestmögliche Sicherheit
erreichen wollen ist dies der Weg für Sie, auch wenn PHP mit den
Standardeinstellungen gut läuft.
Editieren Sie Ihre Datei php.ini:
Tragen Sie bei 'extension_dir' Ihr PHP Installationsverzeichnis
oder den Pfad zu Ihren php_*.dll Dateien ein.
Bitte vergessen Sie nicht den letzten Rückstrich (Backslash).
z.B.: c:\php\extensions\
Wenn Sie OmniHTTPd benutzen, überspringen Sie diesen Schritt.
Geben Sie bei 'doc_root' das Dokumentenverzeichnis des Webservers
an. z.B.: c:\apache\htdocs oder
c:\webroot.
Wählen Sie nun die Erweiterungen (Module) aus, die beim Start von
PHP geladen werden sollen. Lesen Sie in Windows Erweiterungen
wie Sie eine davon aktivieren können, und welche bereits inkludiert
sind. Bei einer Neuinstallation ist es ratsam, erst PHP zu
installieren und zu testen, bevor Sie Erweiterungen in der
php.ini aktivieren.
Bei PWS und IIS können Sie auch browscap.ini
auf
c:\windows\system\inetsrv\browscap.ini unter
Windows 9x/Me,
c:\winnt\system32\inetsrv\browscap.ini unter
NT/2000, und
c:\windows\system32\inetsrv\browscap.ini
unter XP.
setzen.
Beachten Sie, dass das mibs Verzeichnis
in der Windows Distribution Dateien für die SNMP Unterstützung
enthält. Dieses Verzeichnis sollte nach
DRIVE:\usr\mibs verschoben werden
(DRIVE: ist das Laufwerk, auf dem PHP
installiert ist).
Wenn Sie NTFS auf Windows NT, 2000 oder XP benutzen, stellen Sie
sicher, dass der Benutzer unter dem der Webserver läuft, eine
Leseberechtigung auf die php.ini hat (z.B. können Sie diese
für alle zum Lesen freigeben).
Bei PWS erteilen Sie das Recht zum Ausführen auf das
Web-Hauptverzeichnis:
Starten Sie den PWS Web Manager
Editieren Sie die Einstellungen des "Home"-Verzeichnisses
Wählen Sie das "execute" Auswahlkästchen aus
Den Source kompilieren
Bevor wir beginnen lohnt es sich, folgende Frage zu beantworten:
"Warum ist das Kompilieren unter Windows so schwer?" Zwei Gründe
drängen sich auf:
Windows genießt (noch) keine große Gemeinschaft von Entwicklern
welche auch bereit sind, deren Sourcecode frei zur Verfügung zu
stellen. Als Ergebnis wurden die nötigen Investitionen in die
für solche Entwicklungen nötige Infrastruktur nicht getätigt.
Das meiste was verfügbar ist, wurde durch die Portierung der
nötigen Werkzeuge von Unix möglich gemacht. Seien Sie deshalb
nicht überrascht, wenn manches aus diesem Erbe von Zeit zu Zeit
durchscheint.
Fast alle der folgenden Instruktionen sind von der Art "Einstellen
und vergessen". Deshalb lehnen Sie sich zurück, und folgen den
nachstehenden Instruktionen so gewissenhaft wie möglich.
Anforderungen
Um PHP kompilieren und erstellen zu können,
benötigen eine Microsoft Entwicklungsumgebung. Microsoft Visual
C++ 6.0 wird empfohlen. Um die heruntergeladenen Dateien entpacken
zu können, brauchen Sie ein Programm zum Dekomprimieren. Sollten
Sie über kein derartiges Programm verfügen, erhalten Sie eine freie
Version von InfoZip.
Bevor Sie beginnen, müssen Sie einiges downloaden...
Letztendlich benötigen Sie noch die Sourcecodes von PHP 4 selbst.
Sie erhalten die letzte Entwicklerversion mittels anonymen CVS, einem sog. Snapshot, oder dem Sourcecode der letzten offiziellen
Version.
Alles zusammenfügen
Nach dem Download der benötigten Pakete dekomprimieren Sie diese an
einer geeigneten Stelle.
Erstellen Sie ein Arbeitsverzeichnis, in dem sich nach dem Dekomprimieren
alle Dateien befinden werden, z.B. c:\work.
Erstellen Sie das Verzeichnis win32build unter
Ihrem Arbeitsverzeichnis (c:\work), und dekomprimieren
Sie die win32build.zip hinein.
Erstellen Sie das Verzeichnis bindlib_w32 unter
Ihrem Arbeitsverzeichnis (c:\work), und dekomprimieren
Sie die bindlib_w32.zip hinein.
Dekomprimieren Sie den PHP Sourcecode in Ihr Arbeitsverzeichnis
(c:\work).
Diesen Schritten folgend, sollte Ihre Verzeichnisstruktur wie folgt aussehen:
Erstellen Sie das Verzeichnis c:\usr\local\lib, und
kopieren Sie bison.simple von
c:\work\win32build\bin nach
c:\usr\local\lib.
Anmerkung:
Benutzer von Cygwin können den
letzten auslassen. Eine entsprechend installierte Cygwin Umgebung
bietet die erforderlichen Dateien bison.simple
und bison.exe.
MVC ++ konfigurieren
Der nächste Vorbereitungsschritt ist die Konfiguration von MVC ++.
Starten Sie Microsoft Visual C++, und wählen Sie im Menü Tools =>
Options aus. Wählen Sie in dem Dialog den Verzeichnis-Tab aus.
Wechseln Sie zu Executables, Includes, and Library files. Ihre
Einträge sollten wie folgt aussehen:
Executable files: c:\work\win32build\bin,
Cygwin users: cygwin\bin
Include files: c:\work\win32build\include
Library files: c:\work\win32build\lib
resolv.lib erstellen
Sie müssen die resolv.lib Bibliothek erstellen.
Entscheiden Sie, ob Sie die debug symbols verfügbar haben möchten
(bindlib - Win32 Debug) oder nicht (bindlib - Win32 Release).
Erstellen Sie die folgende Konfiguration:
Als Benutzer des GUI starten Sie VC++ und wählen Datei => Arbeitsbereich
öffnen aus, navigieren zu c:\work\bindlib_w32
und selektieren bindlib.dsw. Dann wählen Sie
Erstellen => Setze aktuelle Konfiguration und die gewünschte
Konfiguration aus. Zum Schluss wählen Sie Erstellen => Rebuild All.
Als Benutzer der Kommandozeile stellen Sie sicher, dass Sie entweder
die C++ Umgebungsvariablen registriert, oder vcvars.bat
ausgeführt haben. Dann führen Sie eines der folgenden Kommandos aus:
Nun sollten Sie eine verwendbare resolv.lib in
Ihrem c:\work\bindlib_w32\Debug oder
Release Unterverzeichnis haben. Kopieren Sie diese
Datei nach c:\work\win32build\lib, und überschreiben
Sie die dort vorhandene Datei mit dem selben Namen.
Kompilieren
Der einfachste Weg zu beginnen, ist das Erstellen der CGI Version.
Wenn Sie das GUI benutzen: Starten Sie VC++, selektieren Sie
Datei => Arbeitsbereich öffnen, und wählen Sie
c:\work\php-4.x.x\win32\php4ts.dsw aus.
Dann selektieren Sie Erstellen => Setze aktuelle Konfiguration,
und wählen die gewünschte Konfiguration aus (entweder
php4ts - Win32 Debug_TS oder
php4ts - Win32 Release_TS). Letztendlich wählen
Sie Erstellen => Rebuild All.
Wenn Sie die Kommandozeile benutzen stellen Sie sicher, dass
die C++ Environmentvariablen registriert sind oder starten Sie
vcvars.bat, und führen in dem Verzeichnis
c:\work\php-4.x.x\win32 eines der folgenden
Kommandos aus:
msdev php4ts.dsp /MAKE "php4ts - Win32 Debug_TS"
msdev php4ts.dsp /MAKE "php4ts - Win32 Release_TS"
Nun sollten Sie entweder in Ihrem Debug_TS
oder Release_TS Unterverzeichnis eine
verwendbare php.exe haben.
Durch editieren der main/config.win32.h.in ist es
möglich, kleinere Adaptierungen zum Prozess des Erstellens vorzunehmen.
So können Sie z.B. die inkludierten Erweiterungen, den Ort der php.ini,
etc. ändern.
Als nächstes möchten Sie vielleicht die CLI Version erstellen, die für
den Einsatz auf der Kommandozeile konzipiert wurde (PHP from the command line). Die
Schritte sind die gleichen wie bei der CGI Version, außer dass Sie
die Projektdateien php4ts_cli - Win32 Debug_TS bzw.
php4ts_cli - Win32 Release_TS auswählen müssen.
Nach dem erfolgreichen Kompilieren finden Sie die php.exe
entweder in dem Verzeichnis Release_TS\cli\ oder in
Debug_TS\cli\.
Anmerkung:
Wenn Sie PEAR und das komfortable Installationsprogramm benutzen möchten,
ist das CLI-SAPI erforderlich. Weitere Informationen zu PEAR und dem
Installationsprogramm finden Sie in der Dokumentation auf der PEAR Webseite.
Um das SAPI Modul php4isapi.dll zur Integration von
PHP mit Microsoft IIS zu erstellen, setzen Sie aktive Konfiguration auf
php4isapi-wasimmer-config, und kompilieren Sie die
gewünschte dll.
Installation von Windows Erweiterungen
Sind PHP und ein Webserver einmal auf Windows installiert, möchten
Sie vielleicht einige Erweiterungen mit zusätzlicher Funktionalität
installieren. Die folgende Tabelle beschreibt einige der verfügbaren
Erweiterungen. Sie können Erweiterungen auswählen, welche beim Start
von PHP geladen werden, indem Sie das Kommentarzeichen (';') in den
entsprechenden 'extension=php_*.dll' Zeilen in der php.ini
entfernen. Sie können ein Modul mittels dl() auch
dynamisch laden.
Die DLLs für PHP Erweiterungen enthalten als Präfix 'php_' (und 'php3_'
in PHP 3), um Verwechslungen zwischen PHP Erweiterungen und deren
unterstützenden Bibliotheken zu vermeiden.
Anmerkung:
In PHP 4.0.6 ist die Unterstützung für BCMath, Calendar, COM, FTP,
MySQL, ODBC, PCRE, Session, WDDX und XML inkludiert.
Um diese Funktionen zu benutzen, brauchen Sie keine zusätzlichen
Erweiterungen zu laden. Eine Liste der bereits inkludierten Module
befindet sich in der README.txt oder
install.txt Ihrer Distribution.
Anmerkung:
Einige Erweiterungen benötigen externe DLLs, wovon bereits einige
im Verzeichnis 'dlls' der PHP Distribution enthalten sind.
Manche Erweiterungen benötigen jedoch DLLs, welche nicht in der PHP
Distribution enthalten sind, wie z.B. Oracle (php_oci8.dll).
Kopieren Sie die DLLs vom Verzeichnis 'dlls' in Ihren
Windows PATH, gute Plätze sind:
| c:\windows\system auf Windows 9x/Me | | c:\winnt\system32 auf Windows NT/2000 | | c:\windows\system32 auf Windows XP |
Sollten diese Dateien bereits auf Ihrem System installiert sein,
überschreiben Sie diese nur, wenn etwas nicht korrekt läuft
(Vor dem Überschreiben empfehlen wir ein Backup, oder verschieben
diese Dateien in ein anderes Verzeichnis - nur für den Fall dass
etwas schiefgeht).
Tabelle 3-1. PHP Erweiterungen (Extensions) | Erweiterung | Beschreibung | Anmerkungen |
|---|
| php_bz2.dll | bzip2 Komprimierungsfunktionen | Keine | | php_calendar.dll | Kalender Umwandlungsfunktionen | Ist seit PHP 4.0.3 integriert | | php_cpdf.dll | ClibPDF Funktionen | Keine | | php_crack.dll | Crack Funktionen | Keine | | php3_crypt.dll | Verschlüsselungsfunktionen | Keine | | php_ctype.dll | ctype Funktionen | Keine | | php_curl.dll | CURL, Client URL Bibliotheksfunktionen | Benötigt libeay32.dll, ssleay32.dll (bundled) | | php_cybercash.dll | Cybercash Zahlungssystem
Funktionen | Keine | | php_db.dll | DBM Funktionen | Veraltet, verwenden Sie stattdessen DBA (php_dba.dll) | | php_dba.dll | DBA Datenbank (dbm-style) Abstraktions-Funktionen | Keine | | php_dbase.dll | dBase Funktionen | Keine | | php3_dbm.dll | Berkeley DB2 Bibliothek | Keine | | php_domxml.dll | DOM XML Funktionen | Benötigt libxml2.dll (bundled) | | php_dotnet.dll | .NET Funktionen | Keine | | php_exif.dll | Liest EXIF
Headers einer JPEG-Grafik | Keine | | php_fbsql.dll | FrontBase Funktionen | Keine | | php_fdf.dll | FDF Forms Data Format Funktionen. | Benötigt fdftk.dll (bundled) | | php_filepro.dll | filePro Funktionen | Nur Lesezugriff | | php_ftp.dll | FTP Funktionen | Ist seit PHP 4.0.3 integriert | | php_gd.dll | GD Bibliotheksfunktionen | Keine | | php_gd2.dll | GD2 Bibliotheksfunktionen
zur Bildmanipulation | Keine | | php_gettext.dll | Gettext Funktionen | Benötigt gnu_gettext.dll (bundled) | | php_hyperwave.dll | HyperWave Funktionen | Keine | | php_iconv.dll | ICONV Zeichensatzumwandlung | Benötigt iconv-1.3.dll (bundled) | | php_ifx.dll | Informix Funktionen | Benötigt Informix Bibliotheken | | php_iisfunc.dll | IIS Managementfunktionen | keine | | php_imap.dll | IMAP POP3 und NNTP Funktionen | PHP 3: php3_imap4r1.dll | | php_ingres.dll | Ingres II Funktionen | Benötigt Ingres II Bibliotheken | | php_interbase.dll | InterBase Funktionen | Benötigt gds32.dll (bundled) | | php_java.dll | Java extension | Benötigt jvm.dll (bundled) | | php_ldap.dll | LDAP Funktionen | Benötigt libsasl.dll (bundled) | | php_mhash.dll | Mhash Funktionen | Keine | | php_ming.dll | Ming Funktionen für Flash | Keine | | php_msql.dll | mSQL Funktionen | Benötigt msql.dll (bundled) | | php3_msql1.dll | mSQL 1 Client | unknown | | php3_msql2.dll | mSQL 2 Client | unknown | | php_mssql.dll | MSSQL Funktionen | Benötigt ntwdblib.dll (bundled) | | php3_mysql.dll | MySQL Funktionen | In PHP 4 integriert | | php3_nsmail.dll | Netscape Mail Funktionen | unknown | | php3_oci73.dll | Oracle Funktionen | unknown | | php_oci8.dll | Oracle 8 Funktionen | Benötigt Oracle 8 Client Bibliotheken | | php_openssl.dll | OpenSSL Funktionen | Benötigt libeay32.dll (bundled) | | php_oracle.dll | Oracle Funktionen | Benötigt Oracle 7 Client Bibliotheken | | php_pdf.dll | PDF Funktionen | Keine | | php_pgsql.dll | PostgreSQL Funktionen | Keine | | php_printer.dll | Printer Funktionen | Keine | | php_xslt.dll | XSLT Funktionen | Benötigt sablot.dll (bundled) | | php_snmp.dll | SNMP get and walk Funktionen | Nur NT! | | php_sybase_ct.dll | Sybase Funktionen | Benötigt Sybase Client Bibliotheken | | php_yaz.dll | YAZ Funktionen | Keine | | php_zlib.dll | ZLib Komprimierungsfunktionen | Keine |
|
|
|
 |
 |
 |
 |
 |
 |
|
 |