Apache/OCI8-Erweiterungsmodule für PHP bauen
aus openSUSE, der freien Wissensdatenbank
Inhaltsverzeichnis |
Einführung
Dies ist eine Anleitung (mini-howto) wie man die OCI8 Extension für PHP baut. Diese wird benötigt um Verbindung mit einem Oracle Server aufzunehmen
Danksagungen und Vorraussetzungen sind den einzelnen Abschnitten zu entnehmen.
Danksagungen
- Benutzen von Pear um OCI8 zu bauen
- Ursprünglicher Autor : Michael Galloway (mgx_at_ornl.gov)
- Ursprünglicher Link : http://lists.suse.com/archives/suse-oracle/2007-Apr/0005.html
- Die Anleitung wurde mit openSuSE-10.2 auf den Architekturen x86_32 und x86_64 geprüft
Vorrausetzungen
- Nutzung von Pear um OCI8 zu bauen :: Benötigte Software
- Liste der benötigten Software:
- (Alle Software kann auf den openSuSE-10.2 Installationsmedian bzw. Repositories gefunden werden)
- autoconf
- php5-5.2.0-12
- apache2-mod_php5-5.2.0-12
- php5-pdo-5.2.0-10
- php5-devel-5.2.0-12
- php5-pear-5.2.0-12
Anleitung im Detail
Nutzung von Pear zum Bauen von OCI8
Die OCI8 Extension kann via PEAR und PECL heruntergeladen und gebaut werden. Diese Anleitung wurde mit openSuse 10.2 (x86_64) durchgeführt. Der Vorteil dieser Vorgehensweise ist die Verwendung von Standardpaketen.
Die folgenden Schritte benötigen Root-Rechte.
Installation der benötigten PHP und PEAR Pakete
Es wird angenommen das die Benötigte Software bereits installiert wurde. Eine Anleitung wie bei OpenSuSE Software installiert werden kann finden Sie hier: YaST_Software_Management
Installation des Oracle Instant Clients
Anmerkung:
Falls Sie Oracle auf dem selben Server wie Apache und PHP betreiben kann dieser Schritt übersprungen werden da die benötigten Bibliotheken bereits installiert sind.
- Laden Sie den "Instant Client for Oracle" hier herunter, achten Sie darauf die richtige Version für Ihr System zu wählen (x86-32, x86-64 etc.)
- Kopieren Sie die Zip Dateien nach /opt/oracle
- Packen Sie die folgenden Dateien wie unterstehend aus:
$ cd /opt/oracle $ unzip instantclient-basic-linux-*.zip $ unzip instantclient-sdk-linux-*.zip
- Nach dem Auspacken sieht das Verzeichnis wie folgt aus:
$ pwd /opt/oracle/instantclient_10_2 $ ls -l total 99900 -r--r--r-- 1 root root 1600090 2006-12-20 10:35 classes12.jar -rwxr-xr-x 1 root root 66545 2006-12-20 10:35 genezi lrwxrwxrwx 1 root root 17 2007-04-03 12:11 libclntsh.so -> libclntsh.so.10.1 -rwxr-xr-x 1 root root 20870419 2006-12-20 10:35 libclntsh.so.10.1 -rwxr-xr-x 1 root root 3808761 2006-12-20 10:35 libnnz10.so -rwxr-xr-x 1 root root 1664148 2006-12-20 10:35 libocci.so.10.1 -rwxr-xr-x 1 root root 72456247 2006-12-20 10:35 libociei.so -rwxr-xr-x 1 root root 137905 2006-12-20 10:35 libocijdbc10.so -r--r--r-- 1 root root 1545954 2006-12-20 10:35 ojdbc14.jar drwxr-xr-x 4 root root 4096 2006-12-20 10:35 sdk
- Erstellen Sie einen Symlink für libclntsh.so.10.1
$ cd /opt/oracle/instantclient_10_2 $ ln -s libclntsh.so.10.1 libclntsh.so
Konfiguration der Oracle Umgebung
Anmerkung: Wenn Sie planen oci8 auf einer anderen Maschine als Ihrem Oracle Server zu installieren kann dieser Schritt übersprungen werden.
Wenn Sie oci8 auf dem Oracle Server installieren möchten, also für die Datenbank und Apache den selben Server verwenden, gehen Sie folgendermassen vor:
- Stellen Sie fest ob die Umgebungsvariable ORACLE_HOME gesetzt ist
$ echo $ORACLE_HOME
- Falls die Ausgabe ein Pfad enthält kann der nächste Schritt entfallen
- Wenn der letze Schritt keine Ausgabe erbrachte, muss die Variable ORACLE_HOME entsprechend Ihrer Oracle Installation angepasst werden. Mit der Bash als Shell kann dies wie folgt bewerkstelligt werden:
$ ORACLE_HOME=/path/to/oracle/database/server $ export ORACLE_HOME
Bauen, Installieren und aktivieren der OCI8 Extension
- OCI8 können Sie hierherunterladen
- Kopieren Sie die Datei nach /opt/oracle.
- Rufen Sie folgende Befehle auf:
$ cd /opt/oracle $ pear5 install oci8-1.2.3.tgz
- Die Ausgabe sieht folgendermassen aus:
... 10 source files, building running: phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 Please provide the path to ORACLE_HOME dir. Use 'instantclient,/path/to/instant/client/lib' if you're compiling against Oracle Instant Client [autodetect] :
- Die oci8 Installation-Dialog fragt nach dem Pfad in dem der "instant clien"t installiert wurde, z.B.
instantclient,/opt/oracle/instantclient_11_1
- Falls Sie den Oracle Server verwenden und die Umgebungsvariable ORACLE_HOME gesetzt haben, reicht es ENTER zu drücken.
- Und weiter gehts ...
building in /var/tmp/pear-build-root/oci8-1.2.3
running: /tmp/pear/cache/oci8-1.2.3/configure --with-oci8=instantclient,/opt/instantclient_10_2
checking for grep that handles long lines and -e... /usr/bin/grep
.......
/bin/sh /var/tmp/pear-build-root/oci8-1.2.3/libtool --mode=install cp ./oci8.la
/var/tmp/pear-build-root/oci8-1.2.3/modules
cp ./.libs/oci8.so /var/tmp/pear-build-root/oci8-1.2.3/modules/oci8.so
cp ./.libs/oci8.lai /var/tmp/pear-build-root/oci8-1.2.3/modules/oci8.la
PATH="$PATH:/sbin" ldconfig -n /var/tmp/pear-build-root/oci8-1.2.3/modules
----------------------------------------------------------------------
Libraries have been installed in:
/var/tmp/pear-build-root/oci8-1.2.3/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
running: make INSTALL_ROOT="/var/tmp/pear-build-root/install-oci8-1.2.3" install
Installing shared extensions:
/var/tmp/pear-build-root/install-oci8-1.2.3/usr/lib64/php5/extensions/running:
find "/var/tmp/pear-build-root/install-oci8-1.2.3" -ls
901127 4 drwxr-xr-x 3 root root 4096 Apr 3 13:59 /var/tmp/pear-build-root/install-oci8-1.2.3
901156 4 drwxr-xr-x 3 root root 4096 Apr 3 13:59 /var/tmp/pear-build-root/install-oci8-1.2.3/usr
901157 4 drwxr-xr-x 3 root root 4096 Apr 3 13:59
/var/tmp/pear-build-root/install-oci8-1.2.3/usr/lib64
901158 4 drwxr-xr-x 3 root root 4096 Apr 3 13:59
/var/tmp/pear-build-root/install-oci8-1.2.3/usr/lib64/php5
901159 4 drwxr-xr-x 2 root root 4096 Apr 3 13:59
/var/tmp/pear-build-root/install-oci8-1.2.3/usr/lib64/php5/extensionsld process completed
successfully
Installing '/var/tmp/pear-build-root/install-oci8-1.2.3//usr/lib64/php5/extensions/oci8.so'
install ok: channel://pecl.php.net/oci8-1.2.3
You should add "extension=oci8.so" to php.ini
- Öffnen Sie die php.ini mit einem Texteditor und fügen Sie die Zeile "extension=oci8.so" ein
$ cd /etc/php5/apache2/ $ emacs php.ini
- Dasselbe für die php.ini im CLI Verzeichnis
$ cd /etc/php5/cli/ $ emacs php.ini
- Setzen der Umgebungsvariable LD_LIBRARY_PATH zum Oracle instant client Verzeichnis
$ LD_LIBRARY_PATH=/opt/oracle/instantclient_10_2
- Falls Sie den Oracle Server verwenden, schaut die Variable etwa so aus:
$ LD_LIBRARY_PATH=$ORACLE_HOME/lib
- Apache2 neu starten
$ rcapache2 restart
Überprüfung der oci8 Installation
- Überprüfen Sie ob die Installation korrekt verlief und die Extension aktiviert wurde. Sie können dies mit einem Aufruf der Funktion phpinfo() durchführen:
$ php /usr/share/doc/packages/php5/test.php5 | grep oci8
oci8 oci8.default_prefetch => 10 => 10 oci8.max_persistent => -1 => -1 oci8.old_oci_close_semantics => 0 => 0 oci8.persistent_timeout => -1 => -1 oci8.ping_interval => 60 => 60 oci8.privileged_connect => Off => Off oci8.statement_cache_size => 20 => 20
- Falls Sie eine Fehlermeldung im Stil von "libnnz11.so: cannot open shared object file: No such file or directory in Unknown on line 0" erhalten stimmen die Umgebungsvariabeln nicht und müssen gesetzt oder angepasst werden.
export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_1:$LD_LIBRARY_PATH
Das Ganze muss natürlich global gesetzt werden:
/etc/profile
Fügen Sie die folgende Zeilen hinzu:
LD_LIBRARY_PATH=/opt/oracle/instantclient_11_1:$LD_LIBRARY_PATH export LD_LIBRARY_PATH
- Die Überprüfung der Verbindung zu einem entfernten Oracle 10G Server können Sie mit dem unten stehenden Script durchführen. Setzen Sie die "OCILogon" und "$query" Parameter entsprechend Ihrer Datenbank Konfiguration.
<?php
$conn = OCILogon("dbuser", "dbpasswd", "//dbserver.host.net/DB");
$query = 'select table_name from user_tables';
$stid = OCIParse($conn, $query);
OCIExecute($stid, OCI_DEFAULT);
while ($succ = OCIFetchInto($stid, $row)) {
foreach ($row as $item) {
echo $item." ";
}
echo "<br>\n";
}
OCILogoff($conn);
?>
- Führen Sie das Script aus:
$ php phpdb2.php
Zusammenfassung
Für die Ungeduldigen und Erfahrenen:
$ unzip instantclient-basic-linux-x86-64-10.2.0.3-20070103.zip $ unzip instantclient-sdk-linux-x86-64-10.2.0.3-20070103.zip $ pear5 install http://pecl.php.net/get/oci8 $ LD_LIBRARY_PATH=/path/to/instantclient/or/oracle/server/lib $ export LD_LIBRARY_PATH $ echo "extension=oci8.so" >> /etc/php5/apache2/php.ini $ echo "extension=oci8.so" >> /etc/php5/cli/php.ini $ rcapache2 restart
Zum Weiterlesen
- Für mehr Anleitungen und Informationen über OCI8: http://id.php.net/oci8
- PHP und Oracle XE Express Edition on openSUSE 10.2 : http://www.gareth.fiford.com/index.php?entry=entry070319-171232 (in Englisch)

