PHP
PHP ist eine Scriptsprache und läuft auf dem gleichen Host wie der Apache Webserver ab. PHP ist eine Entwicklung der PHP Open Source Bewegung (http://php.net/). Sie wird vor allem im InterNet eingesetzt sobald statischer HTML-Inhalt nicht mehr ausreicht, und Ablauflogik benötigt wird. Dabei bittet der Apache das PHP Modul das entsprechende PHP Script (=Textdatei) mit den übertragenen Parametern auszuführen. Das Ergebnis des PHP Moduls wird an den Client rückübertragen.
PHP IDE
Zur Ansicht der PHP - Scripte (=Text Dateien) eignet sich DevPHP der Open Source Bewegung:
http://sourceforge.net/projects/devphp
devPHP wird sichlich in Kürze die PHP für Eclipse abgelöst werden (Stand 2006).
PHP auf einer OrgaMon Client-Installation
Der Geoarbeitsplatz verwendet php um die Webservices der Firma Map&Guide zur Geolokalisierung anzusprechen.
- Von php.net ein Windows Binary einer aktuellen Version herunterladen.
- nach C:\Programme\OrgaMon\ entpacken.
- WICHTIG: die gds32.dll in C:\Programme\OrgaMon wieder löschen, diese veraltete Version wird bei php mitgeliefert.
PHP auf dem OrgaMon Server
Der WebShop des OrgaMons läuft auf dem OrgaMon - Server. Er ist in PHP 5.x implementiert. Auch die Internet-Ablagen verwenden ein PHP Script, um die abgelegten ZIP-Dateien aufzulisten. Dazu muss auf dem Server Apache2 und PHP installiert sein.
Installierte php Version muss nicht deinstalliert werden!
1. php.ini sichern
: cd /etc : cp php.ini php.alt.ini
2. PHP downloaden
cd /usr/local/src/ wget http://de3.php.net/get/php-5.2.1.tar.gz/from/this/mirror
3. PHP auspacken
tar -xzf php-5.2.1.tar.gz cd php-5.2.1
4. Per Yast nachinstallieren (je nachdem, ob benötigt) oder von ftp://ftp.suse.com/pub/suse
flex (2.5.4.a installiert) openssl-devel (0.9.7d installiert) Apache2-devel (2.0.49 installiert) Bison (1.875 installiert) zlib-devel (1.2.1 installiert) libxml2-devel (2.4.23 2.6.7 installiert) libpng-devel (1.2.5 installiert) t1lib-devel (1.3.1 installiert) openldap2-devel (2.2.6 installiert) libmcrypt-devel (2.5.7 installiert) curl-devel (7.11.0 installiert) freetype2-devel (2.17 installiert) imap-devel (2002e installiert) postgresql-devel (7.4.7 installiert) ypbind (1.17.2 installiert) mysql-devel (4.0.18 installiert) Libjpeg (6b installiert)
Quellen:
ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/openssl-devel-0.9.7d-15.13.i586.rpm ftp://ftp.suse.com/pub/suse/i386/9.2/suse/i586/openssl-0.9.7d-25.1.i586.rpm ftp://ftp.suse.com/pub/suse/i386/9.2/suse/i586/openssl-devel-0.9.7d-25.1.i586.rpm ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/cyrus-sasl-2.1.18-29.i586.rpm ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/cyrus-sasl-devel-2.1.18-29.i586.rpm ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/openldap2-devel-2.2.6-34.i586.rpm ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/curl-devel-7.11.0-39.i586.rpm
Ab der Version 5.1.0 wird noch libxml2 und libxml2-devel ab Version 2.6.11 benötigt:
: wget ftp://xmlsoft.org/libxml2/libxml2-2.6.11-1.i386.rpm : yast -i libxml2-2.6.11-1.i386.rpm : wget ftp://xmlsoft.org/libxml2/libxml2-devel-2.6.11-1.i386.rpm : yast -i libxml2-devel-2.6.11-1.i386.rpm
5. Konfigurieren
./configure-Befehl von php_info() übernehmen oder unten kopieren.
: cd /usr/local/src/php-5.2.1/ : ./configure --prefix=/usr --datadir=/usr/share/php --mandir=/usr/share/man --bindir=/usr/bin --libdir=/usr/share --includedir=/usr/include --sysconfdir=/etc --with-_lib=lib --with-config-file-path=/etc --with-exec-dir=/usr/lib/php/bin --disable-debug --enable-inline-optimization --enable-memory-limit --enable-magic-quotes --enable-safe-mode --disable-sigchild --disable-ctype --enable-session --with-mysql --with-gd --with-jpeg-dir=/usr/lib --with-freetype-dir=/usr/lib --with-zlib --enable-ftp --disable-cli --without-pear --with-openssl --with-apxs2=/usr/sbin/apxs2-prefork i586-suse-linux
6. Apache stopppen
: rcapache2 stop
7. Kompilieren
: make clean // Nicht vergessen! Sonst gehts nicht ! : make
8. Installieren
: make install
9. php.ini-dist kopieren
: cd /usr/local/src/php-5.2.1/ : cp php.ini-dist /etc/php.ini
10. NUR BEI UPDATE PHP4 AUF PHP5: httpd.conf editieren
Die httpd.conf soll das PHP5-Modul laden, nicht mehr das PHP4-Modul. Diese Einstellung muss hier gemacht werden. Da stehen alle Module aufgelistet. Einfach in Zeile 133 aus PHP4 ein PHP5 machen.
: cd /etc/sysconfig : joe apache2
11. NUR BEI UPDATE PHP4 AUF PHP5: DirectoryIndex bearbeiten
In Zeile 163 "index.php index.php5" hinzufügen.
: cd /etc/apache2/ : joe httpd.conf
12. Apache wieder starten
: rcapache2 start
13. php Commandozeile (cli)
Sollte unter Apache alles laufen, aber in der Shell ergibt php --version
immer noch eine alte Version, so sollte die Kommandozeilen Version noch überschrieben werden: raib90:~/php-5.0.4/sapi/cli # cp php /usr/bin/php
14. Prüfen, welche Module da sind
- Im Apache: php_info ausführen und die Liste durchsehen
- In der Kommando-Zeile:
php -m
listet alle Module der cli VErsion von PHP auf. Es kann aber sein, dass Apache2 einen andere PHP benutzt.
PHP Extension "interbase" bereitstellen
- Ermittle die PHP Versionsnummer, damit du weist welchen Source-Tar-Ball du ziehen must
php -v
- Lade vom Museum die Source-Code Distribution des PHP, in diesem Beispiel hat die Versionsprüfung 5.1.0 ergeben
wget http://museum.php.net/php4/php-5.1.0.tar.gz gzip -d php-5.1.0.tar.gz tar -xf php-5.1.0.tar cd php-5.1.0
zypper install php5-devel
- Compiliere Dir selbst die Extension "interbase"
./configure --with-interbase=shared,/opt/firebird make # 32-bit: interbase.so m?jetzt in ./modules enststanden sein cp modules/interbase.so /usr/lib/php5/extensions # 64-bit: cp modules/interbase.so /usr/lib64/php5/extensions
- Nun interbase.so in das Extensions - Verzeichnis von PHP hochladen. Wo das ist steht in der /etc/php.ini
# SuSe 9.x joe /etc/php.ini # SuSE 10.2 joe /etc/php5/apache2/php.ini ->Zeile im extensions Bereich zu den ganzen anderen Extensions hinzufügen extension=interbase.so ->gaaanz unten folgendes hinzufügen [Interbase] ibase.timestampformat=%m-%d-%Y %H:%M:%S
# openSuSE 11.0 Hier reicht es im Verzeichnis/etc/php5/conf.d
die Dateiinterbase.ini
anzulegen: extension=interbase.so [Interbase] ibase.timestampformat=%m-%d-%Y %H:%M:%S
den Apache 2 neu starten
rcapache2 restart
Diagnose, ob jetzt das interbase Module geladen ist:
php -modules
auf Fehler in der folgenden Datei achten:
/var/log/apache2/error_log
PHP Extension "soap" bereitstellen
$ cd /usr/src/php-5.0.5/ext/soap $ phpize $ ./configure && make install
This executes without error and the extension is built and installed properly to my extensions directory[1]. I enable the module in an extensions.ini file found in the config-file-scan-dir:
Alternativ dazu (siehe weiter unten) ist das PHP mit dem Modul soap zu compilieren:
--enable-soap
PHP installieren
- PHP ist von der Seite "www.php.net" zu beziehen.
-> http://www.php.net/downloads.php -> Downloadadresse Stand: 18.02.06
- Am besten die neuste Version (in unserem Fall 5.1.2) als .zip Datei herunterladen (auch falls eine .exe Datei vorliegen sollte).
- Nach dem Download die Datei nach "C:\Programme\Php" entpacken.
Die Datei "C:\Programme\Php\php.ini-dist" oder besser "C:\Programme\Php\php.ini-recommended" wird ins "Windows"-Verzeichnis kopiert und in "php.ini" umbenannt. ->Wird ein Apache 2.0.x Server benutzt, müssen keine Dateien kopiert werden, sondern der Pfad zur ini-Datei kann dem Apache in dessen conf-Datei angegeben werden,-> siehe nächstes Kapitel
Fraglich, BITTE PRÜFEN: Ausserdem muss "register_argc_argv = On" gesetzt werden. Dies ist in der "php.ini-recommended" auf "Off" gesetzt, um die Performance zu verbessern.
!!Fertig!!
- Weitere Informationen zur Installation von PHP stehen in der Datei "C:\Programme\Php\install.txt".
PHP konfigurieren
Damit PHP auf Interbase/Firebird Datenbanken zugreifen kann, müssen die Routinen, die das ermöglichen, beim Start von PHP als Erweiterung geladen werden. Dies geschieht mit Hilfe zweier Einträge in der "php.ini". Erstens muss der Eintrag "extension_dir= " auf das Verzeichnis mit den Extension-Dlls gesetzt werden. Diese befinden sich standardmäßig im Verzeichnis "extensions". Falls PHP zum Beispiel in "C:\Programme\Php" installiert wurde, liegen die Erweiterungs-Dlls im Verzeichnis "C:\Programme\Php\extensions". Der Eintrag in der "php.ini" lautet dann:
Win32 extension_dir = "C:\Programme\Php\ext" Linux extension_dir = "/usr/lib/php/extension"
Zweitens gibt es in der "php.ini" einen Abschnitt, der sich "Dynamic Extensions" nennt. Dort sind alle Erweiterungen in der Form ";extension=php_....dll" aufgeführt. Da ein Semikolon am Anfang steht, beachtet PHP diese Zeile nicht als Eintrag sondern als Kommentar. In der Zeile ";extension=php_interbase.dll" muss dieses Semikolon nun entfernt werden.
Win32 extension=php_interbase.dll extension=php_gd2.dll Linux extension=interbase.so
Der WebShop erfordert, dass Timestamps im richtigen Format übernommen werden. Dies geschieht durch folgende zwei Zeilen, die am besten ans Ende der "php.ini" gestellt werden:
[Interbase] ibase.timestampformat=%m-%d-%Y %H:%M:%S
Jetzt sollten die PHP-Routinen für die Interbase-Anbindung zur Verfügung stehen. Falls dies nicht so ist, liegt es vielleicht daran, das die "php.ini" im falschen Verzeichnis liegt (siehe Ende vorletztes Kapitel) oder der Pfad im Eintrag "extension_dir=" falsch gesetzt ist.
Achtung: Nach einer Änderung muss der Apache-Webserver mit "Startmenü\Alle Programme\Apache HTTP Server\Control Apache Server\Restart" neu gestartet werden.
Session Verzeichnis
Verzeichnis namens "Sess" in C:\Programme\Apache Group\Apache\" oder im selben Verzeichnis wie "DocumentRoot" anlegen. In der Datei "php.ini" den Eintrag "session.save_path = " auf im ersten Falle
session.save_path = C:/Programme/Apache Group/Apache/Sess abändern.
PHP compilieren
mehr Info unter PHP
- PHP runterladen, compilieren, installieren
### ### PHP downloaden ### wget http://de3.php.net/get/php-5.2.1.tar.gz/from/this/mirror ### ### PHP auspacken ### tar -xzf php-5.1.2.tar.gz cd php-5.1.2 ### ### PHP konfigurieren ###
'./configure' '--prefix=/usr' '--datadir=/usr/share/php' '--mandir=/usr/share/man' '--bindir=/usr/bin' '--libdir=/usr/share' '--includedir=/usr/include' '--sysconfdir=/etc' '--with-_lib=lib' '--with-config-file-path=/etc' '--with-exec-dir=/usr/lib/php/bin' '--disable-debug' '--enable-inline-optimization' '--enable-memory-limit' '--enable-magic-quotes' '--enable-safe-mode' '--disable-sigchild' '--disable-ctype' '--enable-session' '--with-mysql' '--with-gd' '--with-jpeg-dir=/usr/lib' '--with-freetype-dir=/usr/lib' '--with-zlib' '--enable-ftp' '--without-pear' '--with-openssl' '--with-apxs2=/usr/sbin/apxs2-prefork' 'i586-suse-linux' '--with-interbase' '--with-mcrypt' '--enable-soap'
- Beispiel 2 (64 Bit)
'./configure' '--prefix=/usr' '--datadir=/usr/share/php5' '--mandir=/usr/share/man' '--bindir=/usr/bin' '--with-libdir=lib64' '--includedir=/usr/include' '--sysconfdir=/etc/php5/apache2' '--with-config-file-path=/etc/php5/apache2' '--with-config-file-scan-dir=/etc/php5/conf.d' '--with-exec-dir=/usr/lib64/php5/bin' '--enable-libxml' '--enable-filter' '--enable-session' '--with-mm' '--with-pcre-regex=/usr' '--enable-xml' '--enable-simplexml' '--enable-spl' '--disable-debug' '--enable-memory-limit' '--with-interbase' '--with-mcrypt' '--with-zlib' '--enable-inline-optimization' '--enable-zend-multibyte' '--disable-rpath' '--with-apxs2=/usr/sbin/apxs2' '--disable-all'
-> geht nicht, mal wieder wegen apxs2