ubuntuusers.de

php5 - oracle(PDO) Datenbankverbindung aufbauen

Status: Ungelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

VolkerRaschek

Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Hallo zusammen, ich habe folgendes Problem.

Ich möchte gerne ein Projekt realisieren was während der Entwicklung auf eine Oracle Datenbank liegt. Es kann sein das in naher Zukunft die Oracle Datenbank verschwindet und ich mir daher ein anderes Daten-Backend suchen muss. Daher möchte ich zur Not auf MySQL zurückgreifen können.

Nun bietet PHP die Möglichkeit mit PDO Objekten zu arbeiten. Unter mySQL funktioniert die Datenverbindung Testweise auch. Bei Oracle fehlt mir leider eine Erweiterung bzw. der Datensocket um auf den Externen Server zuzugreifen.

Wie kann ich auf meinem Apache Server die Oracle-Erweiterung nachinstallieren, sodass der Apache Server mit PHP die Daten von der Oracle-Datenbank die nicht auf dem gleichen Server liegt abrufen kann? Leider finde ich kein passendes php5 Packet zur Installation wie beispielsweise für mySQL "php5-mysql".

Viele Grüße Volker

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Ist anscheinend nicht so einfach. Im Ubuntu-Wiki zu PHP und Oracle wird beschrieben, wie die Bibliothek kompiliert werden kann, allerdings ist die Information auch schon 2 Jahre alt.

Deshalb verweise ich eher auf

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Die erste Anleitung hört sich nicht schlecht an. Allerdings habe ich direkt ein Problem mit der environment Datei.

Die Datei sieht wie folgt aus.

1
2
3
4
5
6
7
# ORACLE - Einstellungen
ORACLE_HOME="/opt/oracle/instantclient"
ORACLE_BASE="${ORACLE_HOME}"
PATH="${ORACLE_HOME}:${PATH}"
LD_LIBRARY_PATH="${ORACLE_HOME}:${LD_LIBRARY_PATH}"
NLS_LANG=GERMAN_GERMANY.UTF8
TNS_ADMIN="${ORACLE_HOME}/network/admin"

Es sind weitere Variablen gesetzt, damit ich SQL-Plus und den SQL Developer von Oracle nutzen kann.

Nachdem ich die Datei unter /etc/environment angepasst habe, bekomme ich nun beim Einloggen in meinen Benutzer folgende Mitteilung.

Ihre Sitzung dauerte lediglich weniger als 10 Sekunden. Falls sie sich nicht selbst abgemeldet haben, deutet dies darauf hin, dass ein Installationsproblem vorliegt oder kein Plattenplatz mehr verfügbar ist. Versuchen Sie, sich mit einer abgesicherten Sitzung anzumelden, um zu versuchen, das Problem zu beheben.

Plattenplatz noch mehr als 1,8TB vorhanden und Installiert habe ich nichts außer die Datei angepasst. Ich habe vorher die Variablen nicht in der environment Datei hinterlegt sondern in der .bashrc. Dort funktioniert alles Wunderbar. Nur jetzt so ich versucht habe dies in die environment Datei zu speichern meckert er.

Jemand eine Idee?

Gruß Volker

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Ich weiß nicht warum, anscheinend funktioniert nicht das Anhängen von Strings in der enviroment Datei.

Ich musste alles manuell setzen.

1
2
3
4
5
6
7
8
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/oracle/instantclient"

# Oracle Einstellungen
ORACLE_HOME="/opt/oracle/instantclient"
ORACLE_BASE="/opt/oracle/instantclient"
LD_LIBRARY_PATH="/opt/oracle/instantclient"
NLS_LANG=GERMAN_GERMANY.UTF8
TNS_ADMIN="/opt/oracle/instantclient/network/admin"

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Erster Erfolg! Die Erweiterung oci8 wird geladen und mir durch die phpinfo() auch angezeigt.

oci8
OCI8 Support 	enabled
OCI8 DTrace Support 	disabled
OCI8 Version 	2.1.1
Revision 	$Id: 86f22a208f89dcd5b305e82929a7429683968b11 $
Oracle Run-time Client Library Version 	12.1.0.2.0
Oracle Compile-time Instant Client Version 	12.1 

Allerdings wird nur der Treiber oci8 geladen und nicht noch PDO_OCI, wodurch ich mit PDO Objekten auf Oracle zugreifen kann. Bei MySQL (php-mysql) ist sowohl der mySQLi-Treiber als auch der für PDO Verbindungen auf MySQL Basis enthalten.

1
2
3
PDO
PDO support	enabled
PDO drivers 	mysql 

Nun steht unter der oben verlinkten Seite (http://nl1.php.net/manual/de/ref.pdo-oci.php) folgendes

// Using $ORACLE_HOME
$ ./configure --with-pdo-oci

Jedoch weiß ich nicht in welchem Verzeichnis ich das ausführen soll um PDO_OCi zu aktivieren.

Gruß Volker

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

VolkerRaschek schrieb:

Nun steht unter der oben verlinkten Seite (http://nl1.php.net/manual/de/ref.pdo-oci.php) folgendes

// Using $ORACLE_HOME
$ ./configure --with-pdo-oci

Jedoch weiß ich nicht in welchem Verzeichnis ich das ausführen soll um PDO_OCi zu aktivieren.

Beim kompilieren der Erweiterung hast du ja ein ./configure ausgefuehrt. Die startest einfach wieder in der Anleitung bei diesem Schritt und machst sie wieder bis zum Schluss durch. (Ausser das Hinzufuegen der erweiterung zur php-config natuerlich)

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Naja, ich muss dazu wohl sagen, dass ich versucht habe unter PHP5 den OCI Treiber mit PDO zu installieren, das ging wohl leider nicht. Bei dem Aufruf von

1
sudo pecl install oci8

kam immer die Meldung, dass eine PHP Version größer oder gleich 7.0 installiert sein soll.

Daher habe ich mit PHP7 die Erweiterung installiert nach dieser Anleitung (https://help.ubuntu.com/community/PHPOracle). Bei dem Vorgehen habe ich nie ein ./configure benutzt.

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

So, ich habe nun dieses Package heruntergeladen um an den es selber zu kompilieren und den

1
./configure --with-pdo-oci

Befehl ab zu setzen.

Package: https://pecl.php.net/get/oci8-2.1.1.tgz

Im entpackten Verzeichnis mit phpize das Paket zusammen gesetzt und anschließend Versucht mit

1
./configure -with-oci8=instantclient,/opt/oracle/instantclient --with-pdo-oci=instantclient,/opt/oracle/instantclient

alles zu konfigurieren. Jetzt bekomme ich als Fehlermeldung, dass er diesen Befehl nicht kennt. Auch --with-pdo-oci8 scheint nicht zu funktionieren.

configure: WARNING: unrecognized options: --with-pdo-oci
configure: WARNING: unrecognized options: --with-pdo-oci8

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

VolkerRaschek schrieb:

So, ich habe nun dieses Package heruntergeladen um an den es selber zu kompilieren und den

1
./configure --with-pdo-oci

Befehl ab zu setzen.

Package: https://pecl.php.net/get/oci8-2.1.1.tgz

Die Option bezieht sich auf die Installation des Oracle-Treibers und ich vermute du hast ihn bei OCI8 verwendet?

VolkerRaschek

(Themenstarter)
Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Oracle-Treiber? Ich habe den Oracle Instantclient heruntergeladen und die Variablen in der /etc/environment gesetzt. Ich habe die Environment Variablen noch dem Apache bekannt gemacht, damit dieser diese auch benutzen kann.

Anschließend das oci8 Package heruntergeladen und über pecl installiert. Während der Installation fragt er nach dem Verzeichnis des Oracle Instantclients und das war es. Schon funktioniert das normale OCI8. Allerdings wird der PDO Treiber für die Oracle Schnittstelle nicht installiert.

Gruß Volker

Antworten |