Oracle OCI8 extension für PHP unter Solaris

Author: | Posted in Allgemein No comments

Ich musste kürzlich einen Webserver für eine in PHP geschriebene Applikation installieren, welche in PHP geschrieben ist und eine Oracle Datenbank als Backend hat. PHP unterstützt Oracle, allerdings muss man die OCI8 Extension selber compilieren und bei PHP selber zu compilieren ist meines errachtens kein Spass.

Ich habe daher nach einem anderen Weg gesucht und es ist möglich, nur die OCI8 Extension zu compilieren, während man für den Rest Pakete nehmen kann. In diesem konkreten Fall habe ich als Compiler Studio 11 von Sun genommen und PHP sowie Apache 2.2 von Blastwave. Da der Hersteller PHP 4.x empfiehlt, installierte ich PHP 4.4.4.


Nur die OCI8 Extension zu compilieren ist denkbar einfach. Dieses Beispiel zeigt wie es unter PHP 4.4.x geht, ich habe aber die genaue gleiche Prozedur ebenfalls uner PHP 5.2.1 getestet und es funktionert absolut problemlos.

Bevor man beginnt, muss man die Variable ORACLE_HOME setzen. Sie zeigt auf das Verzeichnis, in welches Oracle installiert wurde:

$ export ORACLE_HOME=/opt/oracle/product/10.2.0

Danach muss man die Variable LD_OPTIONS setzen, damit später die Libraries auch am korrekten Ort gesucht werden:

$ export LD_OPTIONS="-R/opt/csw/lib -L/opt/csw/lib -R/opt/oracle/product/10.2.0/lib32 -L/opt/oracle/product/10.2.0/lib32"

Nachdem die beiden Variablen gesetzt wurden, kann man loslegen. Als erstes muss man in das Verzeichnis der OCI8 Extension wechseln. In diesem Verzeichnis lässt man dann phpize laufen, um die Extension zum compilieren vorzubereiten. Sobald phpize durchgeloffen ist, kann man configure und gmake laufen lassen:

$ cd ext/oci8$ phpize

Configuring for:

PHP Api Version:         20020918

Zend Module Api No:      20020429

Zend Extension Api No:   20050606

$ ./configure --with-oci8

$ gmake

Die Extension findet man dann im Verzeichnis modules, welches man nur noch ins entsprechende Verzeichnis kopiert werden muss und dan in der php.ini aktiviert werden muss:

$ cd modules
$ ls -l

total 450

-rw-r--r--   1 compile  other        748 Mar 19 16:14 oci8.la

-rwxr-xr-x   1 compile  other     220656 Mar 19 16:14 oci8.so

$ ldd oci8.so

libclntsh.so.10.1 =>     /opt/oracle/product/10.2.0/lib32/libclntsh.so.10.1

libc.so.1 =>     /lib/libc.so.1

libnnz10.so =>   /opt/oracle/product/10.2.0/lib32/libnnz10.so

libkstat.so.1 =>         /lib/libkstat.so.1

libnsl.so.1 =>   /lib/libnsl.so.1

libsocket.so.1 =>        /lib/libsocket.so.1

libgen.so.1 =>   /lib/libgen.so.1

libdl.so.1 =>    /lib/libdl.so.1

libsched.so.1 =>         /usr/lib/libsched.so.1

libaio.so.1 =>   /lib/libaio.so.1

librt.so.1 =>    /lib/librt.so.1

libm.so.2 =>     /lib/libm.so.2

libmp.so.2 =>    /lib/libmp.so.2

libmd5.so.1 =>   /lib/libmd5.so.1

libscf.so.1 =>   /lib/libscf.so.1

libdoor.so.1 =>  /lib/libdoor.so.1

libuutil.so.1 =>         /lib/libuutil.so.1

# cp oci8.so /opt/csw/lib/php/extensions/no-debug-non-zts-20020429

# echo "extension=oci8.so" >> /opt/csw/lib/php.ini

Cory, hatte mich auf phpize aufmerksam gemacht. Wir klären im Moment ab, wie es Lizenrechtlich aussieht. Sofern es die Lizenz erlaubt, würde Cory ein OCI8 Paket für Blastwave erstellen.

Add Your Comment

Your email address will not be published. Required fields are marked *