5 Stimmen

Wie installiere ich Oracle Instant Client und pdo_oci auf einer Ubuntu-Maschine?

Ich muss PDO_OCI auf einer Ubuntu-Maschine installieren, es gibt kein Standardpaket, das ich mit apt-get installieren könnte.

Es gibt viele Anleitungen, wie man es macht, aber wenn ich ihnen folge, habe ich Probleme im Zusammenhang mit der Kompilierung (configure, make, ...)

Hier ist, was ich gemacht habe:

  1. Ich habe dieses Tutorial befolgt, um den Instant Client zu installieren

  2. oci8 installieren

    pecl install oci8

    Ich erhalte den Fehler:

    Fehler: oci.h nicht gefunden

  3. PDO_OCI installieren

    mkdir -p /tmp/pear/download/
    cd /tmp/pear/download/
    pecl download pdo_oci
    phpize
    ./configure –with-pdo-oci=instantclient,/usr,11.2

    Fehler:

    pdo_driver.h nicht gefunden ...

Haben Sie bitte eine seriöse Anleitung, die perfekt auf UBUNTU 12.04 funktioniert?

8voto

Andrey Grachev Punkte 1060

Die Antwort ist eine Replikation dieses Artikels (in Russisch), der wiederum auf diesem Beitrag mit einigen Korrekturen basiert. Nach mehreren tagen erfolgloser Suche hat es reibungslos für mich funktioniert.

Voraussetzungen:

Sie sollten Administratorrechte haben

Sie sollten php5 installiert haben mit den folgenden Paketen:

sudo apt-get install php5 php5-dev php-pear php5-cli
sudo pecl install pdo

Sie sollten die Bibliothek libaio1 installiert haben:

sudo apt-get install libaio1

Installation des Oracle Instant Clients

Laden Sie den Oracle Instant Client für Ihre Prozessorarchitektur und Ihr Betriebssystem von der Oracle-Website herunter (oracle.com/technetwork/database/features/instant-client/index-097480.html).

Für Linux gibt es 2 Optionen des Instant Clients: RPM-Paket für Linux, CentOS, Fedora, Red Hat Enterprise Linux, Mandriva Linux, SUSE Linux, usw. ZIP-Archiv - für alle anderen, die RPM nicht unterstützen.

Es sind 2 Dateien herunterzuladen:

instantclient-basic - Der Oracle Instant Client selbst

instantclient-sdk - Set von Bibliotheken für die Anwendungsentwicklung

Erstellen Sie ein Verzeichnis für den Oracle Instant Client (das /opt-Verzeichnis ist gut für diesen Zweck reserviert):

sudo mkdir -p /opt/oracle/

Verschieben Sie die heruntergeladenen Dateien nach /opt/oracle und wechseln Sie in das Zielverzeichnis (unter der Annahme, dass Sie die "zip"-Archive in Ihrem Benutzer-"Downloads"-Verzeichnis heruntergeladen haben):

sudo mv ~/Downloads/instantclient-*.zip /opt/oracle/
cd /opt/oracle/

Extrahieren der heruntergeladenen Archive:

sudo unzip instantclient-basic-*-*.zip
sudo unzip instantclient-sdk-*-*.zip

Schließlich haben wir das Verzeichnis instantclient_11_2 in /opt/oracle für den Oracle Instant Client 11.2.0.2.0 erstellt. Benennen Sie dieses Verzeichnis in instantclient um (achten Sie auf die Versionsnummer) und wechseln Sie zu ihm:

sudo mv instantclient_11_2 instantclient
cd instantclient

Als nächstes müssen wir mehrere zusätzliche Verzeichnisse und Symboliklinks erstellen (achten Sie auf die Versionsnummer):

sudo ln -s /opt/oracle/instantclient/libclntsh.so.* /opt/oracle/instantclient/libclntsh.so
sudo ln -s /opt/oracle/instantclient/libocci.so.* /opt/oracle/instantclient/libocci.so
sudo ln -s /opt/oracle/instantclient/ /opt/oracle/instantclient/lib

sudo mkdir -p include/oracle/11.2/
cd include/oracle/11.2/
sudo ln -s ../../../sdk/include client
cd -

sudo mkdir -p lib/oracle/11.2/client
cd lib/oracle/11.2/client
sudo ln -s ../../../ lib
cd -

Erstellen Sie eine Konfigurationsdatei, die den Namen des Verzeichnisses enthält, in dem Oracle Instant Client-Bibliotheken gesucht werden sollen, und aktivieren Sie sie:

echo /opt/oracle/instantclient/ | sudo tee -a /etc/ld.so.conf.d/oracle.conf
sudo ldconfig

Da es kein Verzeichnis /usr/include/php in Ubuntu gibt, aber der Client danach sucht, werden wir einen Symbolischen Link zu seinem Äquivalent erstellen - php5:

sudo ln -s /usr/include/php5 /usr/include/php

Installation von OCI8

Nach den vorherigen Aktionen wird die oci8-Erweiterung mit dem Befehl pecl installiert:

sudo pecl install oci8

Sie werden nach dem Pfad zum Oracle Instant Client gefragt, antworten Sie mit:

instantclient,/opt/oracle/instantclient

Erstellung der Verbindungserweiterungsdatei:

echo "; Konfiguration für die PHP OCI8-Modul" | sudo tee /etc/php5/conf.d/oci8.ini
echo extension=oci8.so | sudo tee -a /etc/php5/conf.d/oci8.ini

Installation von PDO_OCI

Für die Installation von PDO_OCI laden Sie es aus dem Pear-Repository (pear.php.net) herunter.

Aktualisieren Sie die Pear-Paketliste:

sudo pecl channel-update pear.php.net

Laden Sie das Archiv herunter und legen Sie es im Temp-Verzeichnis ab:

sudo mkdir -p /tmp/pear/download/
cd /tmp/pear/download/
sudo pecl download pdo_oci

Extrahieren Sie den Inhalt des Archivs:

sudo tar xvf PDO_OCI*.tgz
cd PDO_OCI*

Hier müssen wir die Datei config.m4 anpassen, da sie keine Informationen über unsere Version des Oracle Instant Clients enthält. Öffnen Sie die Datei und fügen Sie die mit "+" markierten Änderungen hinzu (achten Sie auf die Versionsnummer):

sudo vim config.m4

Hier ist der diff der 2 Dateien:

*****************
*** 7,12 ****
--- 7,14 ----
if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then
PDO_OCI_VERSION=`grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3
+ elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
+ PDO_OCI_VERSION=11.2
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
PDO_OCI_VERSION=10.1 
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
***************
*** 119,124 ****
--- 121,129 ----
10.2)
PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
;;
+ 11.2)
+ PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
+ ;;
*)
AC_MSG_ERROR(Nicht unterstützte Oracle-Version! $PDO_OCI_VERSION)
;;
***************

Bereiten Sie die Umgebung für die PHP-Erweiterung mit dem Befehl phpize (php.net/manual/ru/install.pecl.phpize.php) vor:

sudo phpize

Konfigurieren Sie den Paketinstaller und installieren Sie das Paket (achten Sie auf die Versionsnummer):

sudo ./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient/,11.2
sudo make
sudo make install

Erstellen Sie eine Verbindungsdatei dafür:

echo "; Konfiguration für das PHP PDO_OCI-Modul" | sudo tee /etc/php5/conf.d/pdo_oci.ini
echo extension=pdo_oci.so | sudo tee -a /etc/php5/conf.d/pdo_oci.ini

Starten Sie Apache neu und prüfen Sie, ob Erweiterungen installiert wurden:

sudo /etc/init.d/apache2 restart
php -m

7voto

guntars Punkte 320

Dieser Leitfaden könnte bei der Kompilierung des pdo_oci-Moduls aus dem Quellcode helfen, da die PECL-Version jetzt veraltet ist. Ich habe den Originalbeitrag für CentOS 6.6, PHP v5.3.3 und Oracle Instant Client v.12.1 geschrieben, aber es sollte auch einfach sein, es auf Ihren Fall anzuwenden.

Installieren Sie das PHP-Entwicklungspaket

$ apt-get install php-devel 

Laden Sie den PHP-Quellcode herunter

$ cd /usr/local/src
$ mkdir php_source
$ cd php_source/
$ wget http://museum.php.net/php5/php-5.3.3.tar.gz
$ gunzip php-5.3.3.tar.gz
$ tar xvf php-5.3.3.tar

Bereiten Sie PDO_OCI für die Kompilierung vor

Vergewissern Sie sich, dass die Umgebungsvariable $ORACLE_HOME gesetzt ist. In meinem Fall zeigte sie auf /usr/lib/oracle/12.1/client64

Wechseln Sie in den Ordner, in dem die Quelldateien der Erweiterung liegen:

$ cd php-5.3.3/ext/pdo_oci

Da wir eine Oracle-Client-Version 12.1 verwenden, die von der Erweiterung nicht standardmäßig unterstützt wird, müssen wir einige Änderungen vornehmen. Unsere Instant-Client-Version muss der Datei config.m4 hinzugefügt werden, ansonsten wird configure mit folgender Fehlermeldung fehlschlagen

Oracle version... configure: error: Oracle required OCI8 libraries not found under /usr/lib/oracle/12.1/client64

Öffnen Sie die Datei config.m4 und suchen Sie nach SUPPORTED_LIB_VERS (ca. Zeile 5) und fügen Sie 12.1 zur Liste der Versionen hinzu. Suchen Sie auch nach der Zeile case $PDO_OCI_VERSION in (könnte Zeile 134 sein) und fügen Sie |12.1 zur Liste der Versionen darunter hinzu. Speichern Sie die Datei und das ist alles, was wir hier brauchen.

Vorbereiten, konfigurieren und erstellen Sie die Erweiterung

$ phpize
$ ./configure
$ make

Jetzt wird make höchstwahrscheinlich fehlschlagen und sich beschweren, dass es die Oracle-Headerdateien wie oci.h nicht finden kann. Das liegt daran, dass die Dateien, sofern Sie den Oracle-Server nicht installiert haben oder den Instant Client im Entwicklermodus, auf dem Server nicht existieren.

Gehen Sie zu oracle.com, auf der Seite "Instant Client Downloads for Linux" und holen Sie sich das Instant-Client-SDK-Paket für Ihre Version: Instant Client Downloads for Linux

In meinem Fall habe ich diese Datei heruntergeladen: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

Entpacken Sie die Datei an einem Ort Ihrer Wahl. Die benötigten Headerdateien befinden sich im Ordner sdk/include. Kopieren Sie alle diese Dateien in den include-Ordner der Erweiterung: /usr/local/src/php_source/php-5.3.3/ext/pdo_oci/include

Jetzt sollte das make durchlaufen:

$ make

Am Ende erhalten Sie ein kompiliertes pdo_oci.so-Modul im Unterordner /modules Ihres Erweiterungsverzeichnisses: /usr/local/src/php_source/php-5.3.3/ext/pdo_oci/modules/pdo_oci.so

Verschieben und aktivieren Sie das kompilierte Modul

Finden Sie heraus, wo PHP seine Erweiterungen auf dem Server speichert

$ php -i | grep extension_dir

Kopieren Sie die Erweiterung (pdo_oci.so) in dieses Verzeichnis.

Es gibt verschiedene Möglichkeiten, das Modul zu aktivieren. Eine Möglichkeit besteht darin, es in die Haupt-php.ini-Datei aufzunehmen, aber ich habe in meinem Fall eine separate .ini-Datei in einem Ordner erstellt, in dem sich andere .ini-Dateien anderer Module befinden und die von PHP beim Start eingeschlossen werden.

Also habe ich eine Datei /etc/php.d/pdo_oci.ini mit folgendem Inhalt erstellt:

; Aktivieren Sie das pdo_oci-Erweiterungsmodul
extension=pdo_oci.so

Alternativ kann dieselbe Zeile auch in Ihre php.ini-Datei hinzugefügt werden.

Apache neu starten und überprüfen

$ /etc/init.d/httpd restart

Falls Sie PHP CLI installiert haben, können Sie die Liste der geladenen Module überprüfen, ansonsten erstellen Sie eine PHP-Datei mit phpinfo() und überprüfen die Ausgaben. Wenn Sie PDO_OCI in der Ausgabe sehen - herzlichen Glückwunsch!

$ php -m

Credits

Danke an Mattias Geniar für den Originalbeitrag zur Kompilierung von PHP-Erweiterungen aus dem Quellcode: https://ma.ttias.be/how-to-compile-and-install-php-extensions-from-source/

4voto

thucnguyen Punkte 1620

Die PDO- und PDO_OCI-Erweiterungen von pecl install sind veraltet, da die neueste PHP-Version sie standardmäßig im Kern hat und die Installation dieser Erweiterungen auf diese Weise meist fehlschlägt.

Ich habe viel Zeit damit verbracht, dies zu versuchen, indem ich mehrere Ansätze verfolgt habe, aber ohne Erfolg, und letztendlich selbst einen sauberen Weg gefunden habe, dies zu tun: Kompilieren und Installieren der Erweiterungen aus dem PHP-Quellcode.

Während des Kompilierens gibt es auch einige Tricks, die ich im Detail in meinem Beitrag beschrieben habe: https://medium.com/@thucnc/how-to-install-php5-pdo-oci-oci8-and-other-extensions-for-ubuntu-f405eadfe784

Hier sind die Schritte aufgeführt:

  1. Oracle Instant Client herunterladen und installieren, dann die Umgebungsvariable ORACLE_HOME exportieren

  2. PDO_OCI (und gegebenenfalls OCI8) aus den PHP-Quellpaketen herunterladen und kompilieren, es gibt einige Tricks, die Sie hier anwenden müssen, einschließlich:

    sudo ln -s /usr/include/php5/ /usr/include/php

    und den Makefile bearbeiten:

    EXTRA_INCLUDES = -I/usr/include/oracle/11.2/client64

  3. Die Erweiterungen aktivieren und den Webserver neu starten

Dies wurde auch für Debian 7.6 getestet

Hoffentlich hilft das.

-1voto

Emptyhand Punkte 41

Die Installation mit PECL ist veraltet, verwenden Sie es nicht. Hier ist ein gutes Tutorial Schritt für Schritt, wie man PDO_OCI und den Oracle Instant Client auf einer Linux-Maschine installiert: http://shar.lt/linux-install-oracle-instant-client-php-pdo_oci-library/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X