======Vorbereitungen======
Eine Vorraussetzung ist, dass Debian Linux installiert und aktualisiert wurde - es ist wichtig, dass alle verfügbaren Updates installiert wurden.
Ebenso wichtig ist, dass Oracle Database Express Edition installiert wurde - oder, dass der Host über Konnektivität zu einer solchen Datenbank verfügt. Hierfür müssen ggf. Firewall-Regeln angepasst werden. Die Installation von Oracle Database Express Edition auf Debian Linux [[oracle_10g_express_edition_auf_debian_linux|wird in einem anderen Artikel erläutert]].
Benötigt werden noch einige Pakete, wie beispielsweise PHP und Bibliotheken zur Übersetzung eigener PHP-Module. Unter Debian/GNU basierenden Systemen sollten das sein:
# apt-get install apache2 php5 php-pear php5-adodb php5-dev libapache2-mod-php5 make
Unter RPM-basierenden Systemen (SuSE, CentOS, RHEL) ist das meist:
=====Oracle=====
Damit Benutzerkonten, wie beispielsweise auch der Apache-Webserver, mittels SQLPlus Verbindungen herstellen können, empfiehlt es sich das Oracle-Umgebungsskript in das globale Bash-Profil zu laden:
echo 'source /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh' >> /etc/bash.bashrc
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/nls_lang.sh: 114: [[: not found
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/nls_lang.sh: 114: [[: not found
Betroffen sind die Zeilen 108 und 110 im besagtem Skript - sie müssen wie folgt abgeändert werden, um den Fehler zu beheben:
if [ -n "$LC_ALL" ]; then
...
elif [ -n "$LANG" ]; then
# echo "/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib" > /etc/ld.so.conf.d/oracle-xe.conf
# ldconfig
======Übersetzung von OCI======
Für PHP gibt es ein Modul namens OCI. Dieses Modul wird mit den Oracle-Bibliotheken, die dem Database Server oder den Instant-Client (bei getrennten Systemen) beiliegen, übersetzt. Dieses Modul wird von PHP verwendet, um mit der Datenbank zu kommunizieren.
Der Sourcecode des Moduls wird heruntergeladen und mithilfe von Pear übersetzt:
# cd /usr/src
# w3m http://pecl.php.net/get/oci8
# pear install oci8-1.2.3.tgz
...
10 source files, building
running: phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :
...
# echo 'extension=oci8.so' > /etc/php5/conf.d/oci.ini
Das Modul benötigt die folgenden Umgebungsvariablen:
* **ORACLE_HOME**
* **NLS_LANG**
* **LD_LIBRARY_PATH**
Apache ist in der Regel auf Debian aus Sicherheitsgründen so konfiguriert, dass diese Variablen händisch dem Dienst übergeben werden müssen. Hierfür muss die Datei **/etc/apache2/envvars** um entsprechende Zeilen, die die eben erwähnten Variablen inklusive Werte erweitert werden. Die Werte der Variablen lassen sich ganz einfach mit **env** herausfinden. In meinem Beispiel mussten folgende Zeilen eingefügt werden:
export ORACLE_SID="XE"
export ORACLE_HOME="/usr/lib/oracle/xe/app/oracle/product/10.2.0/server"
export NLS_LANG="GERMAN_GERMANY.AL32UTF8"
export LD_LIBRARY_PATH="/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib:"
Nach einem Neustart des Webservers sollte alles funktionieren:
# service apache2 restart
======Funktionstest======
Um die Funktion der Bibliothek zu testen, kann das folgende Skript verwendet werden:
";
$ora_pw="
";
echo "ORACLE_HOME=".getenv("ORACLE_HOME")."
\n";
echo "NLS_LANG=".getenv("NLS_LANG")."
\n";
echo "LD_LIBRARY_PATH=".getenv("LD_LIBRARY_PATH")."
\n";
//Versuche, eine Verbindung herzustellen
$db_conn = ocilogon($ora_user, $ora_pw, $ora_string );
if (!$db_conn){
echo "Verbindungsfehler!