PHP auf der iSeries unter OS/400 PASE

Mit den Großen spielen
Kommentare

Einige Kunden haben immer wieder den Wunsch an IBM herangetragen, PHP unter OS/400 zu benutzen. Die alternative Möglichkeit, eine Linux-Partition auf der iSeries einzurichten und mittels virtuellem OptiConnect oder virtuellem LAN mit der OS/400-Partition zu kommunizieren, auf der die eigentliche Datenbank residiert, erschien vielen dieser Kunden als umständlich. Daher, und auch um die mächtigen Möglichkeiten des Portable Application Solutions Environment zu demonstrieren, entschloss IBM sich, einen Patch für PHP zu schreiben, der die eingebaute Unterstützung von PHP für eine AIX DB2 auf eine OS/400 DB2 abändert.

Der vorliegende Artikel, der eine überarbeitete Übersetzung des IBM RedPapers 3639 Bring PHP to your eServer iSeries Server darstellt, beschäftigt sich mit der Installation und Konfiguration dieser abgeänderten Version von PHP.

Voraussetzungen

Dieser Artikel setzt voraus, dass Sie folgende Hardware und Software auf Ihrem iSeries-Server installiert haben:

  • 5722SS1: OS/400 V5R2 (diese Vorgehensweise sollte auch unter V5R1 funktionieren)
  • 5722-SS1 Option 13: OS/400 System Openness Includes
  • 5722-SS1 Option 33: OS/400 Portable App Solutions Environment
  • 5722-DG1: IBM HTTP Server für iSeries. Dieses lizenzierte Software-Produkt beinhaltet den HTTP Server (powered by Apache), der der einzige HTTP Server ist, der PHP unterstützt. Installieren Sie bitte auch das aktuellste HTTP Server Gruppen-PTF. Für V5R2 ist dies die PTF-Nummer SF99098.
  • Der Befehl make: Der make-Befehl ist in OS/400 PASE V5R2 beinhaltet. Wenn Sie OS/400 V5R1 benutzen, sollten Sie sich GNU make von folgender URL herunterladen: www.gnu.org/directory/gnu/make.html
  • 5799-PTL: (Optional) PRPQ iSeries Tools for Developers: Dieses Toolkit benötigen Sie, um PHP zu übersetzen (und zur Installation der VisualAge Compiler auf der iSeries), da dieses Toolkit Perl für die iSeries beinhaltet. Perl für die iSeries wird auch unter folgender URL zum Download bereitgestellt: www.cpan.org/ports/index.html#os400

Anmerkung: Wir nehmen an, dass Sie V5R2 installiert haben. OS/400 V5R1 unterstützt einige Hardware-Konfigurationen, die von PASE nicht unterstützt werden. Sie finden eine ausführliche Liste der Hardware, die PASE unterstützt, unter folgender URL: www-919.ibm.com/servers/eserver/iseries/developer/factory/pase/ehardware.html

Dieser Artikel setzt auch voraus, dass Sie folgende Hardware und Software auf ihrer Übersetzungs-Maschine installiert haben. Die Übersetzungs-Maschine kann entweder eine pSeries mit AIX oder eine iSeries mit OS/400 und der folgenden Software sein:

Der Befehl patch: Der patch-Befehl ist in OS/400 PASE V5R2 beinhaltet. Wenn Sie den patch-Befehl nicht auf Ihrem System haben, probieren Sie es mit GNU patch. Sie können Version 2.5 (nicht 2.5.4) unter folgender URL beziehen: ftp://ftp.gnu.org/pub/gnu/patch

Um die Quellen zu übersetzen, befolgen Sie bitte folgende Schritte:

  • Entpacken Sie die Quellen mit dem tar-Befehl.
  • Wechseln Sie in das soeben erstellte Verzeichnis.
  • Geben Sie ./configure ein.
  • Geben Sie make ein.
  • Geben Sie make install ein.

Der Befehl gzip: Der gzip-Befehl dient zum Packen und Entpacken von Dateien. Dieser Befehl ist unter folgender URL zu finden: www.gnu.org/directory/GNU/gzip.html

Der VisualAge C++ Compiler für AIX: Informationen über diesen Compiler sind unter folgender URL zu finden: www.ibm.com/software/ad/vacpp

Wenn Ihre Übersetzungs-Maschine AIX (nicht OS/400) ist, dann müssen Sie die Version des Compilers verwenden, die kompatibel zu der PASE-Version ist, die Sie auf Ihrer iSeries installiert haben. Weiterführende Informationen zu diesen Thema finden Sie unter der URL: publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rzalf/rzalfplanning.htm

Wir haben die beschriebene Vorgehensweise mit AIX 4.3 und höher getestet. Alternativ unterstützt OS/400 PASE V5R2 nun auch die Installation der Softwareprodukte IBM VisualAge C++ Professional für AIX Version 6.0 oder IBM C für AIX Version 6.0. Das bedeutet, dass OS/400 PASE-Applikationen in PASE selbst kompiliert werden können. Ein separates AIX-System ist nicht vonnöten. IBM VisualAge C++ Professional für AIX Version 6.0 (5765-F65) und IBM C für AIX Version 6.0 (5765-F57) sind separat erhältliche Lizenzprogrammprodukte. VisualAge C++ Professional beinhaltet C für AIX.

Anmerkung: Zum Zeitpunkt der Entstehung des Artikels ist eine 60-Tage-Testversion unter folgender URL erhältlich: www14.software.ibm.com/webapp/download/search.jsp?go=y&rs=vacpp

Installationsanweisungen

Befolgen Sie folgende Schritte, um die Quellen für PHP herunterzuladen und zum Kompilieren vorzubereiten:

PHP herunterladen: Laden Sie die Version von PHP herunter, die Sie für Ihre iSeries benötigen. (Anmerkung: Wir haben Patch-Dateien für die Version 4.3.0 und die ältere Version 4.2.2 von PHP vorbereitet. Diese Anleitung ist jedoch für Version 4.3.0 geschrieben. Im Anhang stehen die Unterschiede bei der Vorgehensweise beim Kompilieren der älteren Version 4.2.2.)

  • Laden Sie die tar-Datei php-4.3.0.tar.gz für PHP 4.3.0 von folgender URL herunter: www.php.net.
  • Bringen Sie diese Datei mittels FTP auf die Maschine, auf der Sie übersetzen. Das kann Ihre AIX-Maschine oder Ihre iSeries-Maschine mit dem VisualAge-Compiler sein. Wir nennen diese Maschine die Übersetzungs-Maschine.
  • Packen Sie die Datei aus, indem Sie folgende Befehle ausführen: gunzip php-4.3.0.tar.gz tar -xvf php-4.3.0.tar

Patchen Sie die Quell-Dateien: Ein Patch ist vonnöten, um PHP auf der iSeries auszuführen. Wir haben Patch-Dateien für PHP 4.3.0 und die ältere 4.2.2 Version von PHP bereitgestellt. Der Patch ändert die standardmäßige PHP DB2-Datenbankunterstützung von AIX DB2 auf OS/400 DB2.

Abb. 1: Screenshot : phpinfo()

Finden Sie iSeries-spezifische Dateien: Sie müssen folgende iSeries-spezifische Dateien finden und auf die Übersetzungs-Maschine kopieren. Die Dateien sqlcli.h und libdb400.exp enthalten DB2 UDB für iSeries-Unterstützung. Die Datei as400_libc.exp ist eine iSeries-spezifische Ergänzung zur AIX-Datei libc.a. Diese Dateien sind Bestandteil von 5722-SS1 Option 13 – System Openness Includes. Führen Sie danach folgende Schritte durch, um diese Dateien von Ihrer iSeries zu erhalten:

  • Führen Sie folgenden Befehl aus: CPY OBJ(‚/QIBM/include/sqlcli.h‘) TODIR(‚/home/yourid‘) TOCCSID(*STDASCII) DTAFMT(*TEXT)
  • Senden Sie mit FTP die Datei /home/yourid/sqlcli.h auf die Übersetzungs-Maschine, z.B. in /home/meinname.
  • Senden Sie mit FTP die Dateien libdb400.exp und as400_libc.exp aus dem iSeries-Verzeichnis /QOpenSys/QIBM/ProdData/OS400/PASE/lib auf die Übersetzungs-Maschine, z.B. in /home/meinname.

Bereiten Sie die Umgebung zum Kompilieren von PHP vor: Führen Sie folgende Schritte durch, um die Umgebung mit folgenden Dateien und Verzeichnissen vorzubereiten, um PHP auf der Übersetzungs-Maschine erfolgreich zu kompilieren. Diese Schritte setzen die ksh voraus.

<img src="http://cdn.sandsmedia.com/ps/onlineartikel/pspic/picture_file//85/import3eae690654295.tif<
Abb. 2: Test: WRKACTJOB in PASE

Achtung: Das Makefile wird generiert mit Zeilen mit mehr als 2048 Zeichen. Einige Editoren wie vi können mit dieser Zeilenlänge nicht umgehen, deshalb müssen Sie einen anderen Editor benutzen. Senden Sie das Makefile mit FTP auf eine andere Maschine und zurück, falls notwendig. Wenn Sie Text-Dateien auf einer Windows-Maschine editieren, entfernen Sie bitte mittels folgendem Befehl das LineFeed-Zeichen am Ende jeder Zeile: tr -d r Makefile.new Danach noch ein mv Makefile.new-Makefile, und der Compiler beschwert sich nicht mehr mit unerklärlichen Fehlermeldungen.

Übersetzen (make)

Sie haben zwei Möglichkeiten, die davon abhängen, ob Sie auf einer AIX-Maschine oder einer iSeries kompilieren. Wenn Sie in PASE auf einer iSeries übersetzen, führen Sie folgende Schritte durch:

  • make
  • make install
  • mkdir /QOpenSys/php/etc
  • cp php.ini-dist /QOpenSys/php/etc/php.ini

Dies übersetzt und sichert alle Dateien in das richtige Verzeichnis. Sie müssen Schreibberechtigung auf das /QopenSys-Verzeichnis haben.

An diesem Punkt können Sie weitergehen zum Abschnitt PHP testen. Wenn Sie in AIX auf einer pSeries übersetzen, führen Sie folgende Schritte durch:

ScriptAlias /php-bin/ /QOpenSys/php/bin AddType application/x-httpd-php .php Action application/x-httpd-php /php-bin/php
ServerUserID einProfil  	Options +ExecCGI 	order allow, deny 	allow from all 

Hier können wir die Erzeugung einer Beispiel-Datenbank, wie mit dem System geliefert, durchführen. Ab V5R1 wird eine Beispiel-Datenbank mit dem System ausgeliefert. Dies wird unter der URL www.ibm.com/servers/eserver/iseries/db2/sqldata.htm erklärt. Zum Auspacken und Erzeugen der Beispiel-Datenbank rufen Sie folgende Prozedur in irgend einem SQL-Interface auf: CALL QSYS.CREATE_SQL_SAMPLE(‚SAMPLE‘). Hier ist SAMPLE der Name des Schemas, das Sie erstellen möchten.

Jedoch benötigen die PHP-Beispiele einige Korrekturen: Beispielsweise läuft PASE PHP als CGI-BIN und kann die Werte $_SERVER[‚PHP_AUTH_USER‘] und $_SERVER[`PHP_AUTH_PW‘] nicht benutzen. Auch wenn Sie eine Verbindung zu einer Datenbank aufbauen wollen, benutzen Sie normalerweise etwa dieses:

$db = odbc_connect($isdb_system, , );
odbc_setoption($db, 1, SQL_ATTR_DBC_DEFAULT_LIB, $isdb_database);

Es macht keinen Unterschied, welche Benutzer-ID und welches Password verwendet wird, wenn die Verbindung zur ODBC-Datenbank aufgebaut wird. Es wird der Sicherheitskontext des Benutzer-Profils benutzt, unter dem der HTTP-Server-Prozess läuft. Benutzen Sie die Direktive ServerUserID in der Apache-Konfigurationsdatei, um diesen Sicherheitskontext zu ändern. Eigentlich ist es eine Sicherheitslücke, wenn Sie einem Benutzer erlauben, Web-Seiten zu erstellen und nicht dafür sorgen, dass der Apache HTTP-Server unter dem Sicherheitskontext eines anderen Benutzer-Profils ausgeführt wird.

<img src="http://cdn.sandsmedia.com/ps/onlineartikel/pspic/picture_file//85/import3eae6906590b5.tif<
Abb. 3 : PHP DB Query Tester

Da PHP als CGI-Applikation läuft und nicht als Apache-Modul, werden einige Dinge in der jetzigen Implementation auf der iSeries nicht wie gewohnt funktionieren:

  • HTTP-Authentifizierung wird nicht funktionieren. Jedes Skript, das versucht, die Variablen $_SERVER[`PHP_AUTH_USER`] und $_SERVER[`PHP_AUTH_PWD`] zu benutzen, wird nicht laufen. Sie müssen stattdessen Benutzer-Konten anlegen und eine Seite benutzen, die den Benutzernamen und das Passwort als Eingabe verlangt und dementsprechend ein Cookie setzt.
  • PHP_SELF wird nicht funktionieren, außer Sie installieren einen Patch von folgender URL: bugs.php.net/bug.php?id=21261

Die größte Änderung von Version 4.2.2. zu Version 4.3.0 war der Konfigurationsprozess. Um diesen Artikel zum Übersetzen für PHP Version 4.2.2 zu benutzen, müssen sie folgende Änderungen berücksichtigen:

  • Entpacken Sie die Quellen mit dem tar-Befehl.
  • Wechseln Sie in das soeben erstellte Verzeichnis.
  • Geben Sie ./configure ein.
  • Geben Sie make ein.
  • Geben Sie make install ein.

Die einzige Änderung bei der oben beschriebenen Vorgangsweise ist die, dass Sie beim Schritt Patchen Sie die Quell-Dateien die letzte Anweisung mit der php430pase.patch-Datei folgendermaßen ausführen: cd php4.3.1 patch -p1

Links

  • Entpacken Sie die Quellen mit dem tar-Befehl.
  • Wechseln Sie in das soeben erstellte Verzeichnis.
  • Geben Sie ./configure ein.
  • Geben Sie make ein.
  • Geben Sie make install ein.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -