======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 Kommt es bei der Ausführung dieses Skriptes zum folgenden Fehler, muss das erwähnte Skript angepasst werden: /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 Damit das Modul später übersetzt werden kann, muss noch der Bibliotheken-Cache aktualisiert werden. Somit wird sichergestellt, dass die Oracle-Bibliotheken gefunden werden: # 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] : ... Der ORACLE_HOME-Pfad sollte bei bezogenem Oracle-Profil automatisch gefunden werden. Ein Druck auf Enter reicht aus. Nach der Übersetzung wird für das übersetzte Modul eine Konfigurationsdatei erstellt: # 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=""; //Ausgeben der Umgebungsvariablen echo "Environment:
"; 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!

"; } else { echo "Verbindung hergestellt!

"; } //Alle Tabellen des Benutzers auflisten $query = 'select table_name from user_tables'; $stid = OCIParse($db_conn, $query); OCIExecute($stid, OCI_DEFAULT); echo "Tabellen:
"; while ($succ = OCIFetchInto($stid, $row)) { foreach ($row as $item) { echo "".$item."
"; } echo "\n"; } //Verbindung zur Datenbank trennen OCILogoff($conn); ?>
Nach Anpassung der folgenden Variablen sollte das Ganze sofort funktionieren: * **ora_host**: Hostname, auf dem sich die Datenbank/der Listener befindet * **ora_instance**: Name der Datenbank-Instanz * **ora_user**: Benutzername des zu verwendenden Datenbankbenutzers * **ora_pw**: Passwort des zu verwendenden Datenbankbenutzers