PHP に オラクルクライアントをインストールするには?

ショコラ
ショコラ

PHP に オラクルクライアントをインストールするには?

手順を書き出してみました。キメマス、キメマス。

もっさん先輩
もっさん先輩
  1. PHPコンテナを起動します。

ドッカーコンテナに入っちゃいます。

docker run --name php -it php:8.1.7-apache bash
  1. apt-get アップデートします。

ここからは PHPコンテナ内の話です。

apt-get update
  1. alien と libaio1 パッケージをインストールします。
apt-get install -y --no-install-recommends alien libaio1
  1. オラクルクライアントのパッケージをコンテナにコピーします。

ここは ホスト から ファイル を コピー する話。
rpm は https://www.oracle.com/jp/database/technologies/instant-client/linux-x86-64-downloads.html からダウンロードします。

docker cp oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm php:/var/www/html
docker cp oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm php:/var/www/html
docker cp oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm php:/var/www/html
  1. オラクルクライアントをインストールします。
alien -i oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
alien -i oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm
alien -i oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
  1. 環境変数を設定します。
export ORACLE_HOME=/usr/lib/oracle/11.2/client64

ORACLE_HOME を設定しないとエラーになります。

configure: WARNING: OCI8 extension: ORACLE_HOME is not set, looking for default Oracle Instant Client instead
checking Oracle Instant Client directory... configure: error: Oracle Instant Client directory /usr/lib/oracle/.../client64/lib libraries not found. Try --with-oci8=instantclient,DIR
  1. おまじない1。
echo "$ORACLE_HOME/lib" > /etc/ld.so.conf.d/oracle-lib.conf
ldconfig

ldconfig をしないで sqlplus を使おうとするとエラーになります。(無くてもゴールまではたどり着けました)

# sqlplus64 mossan/123456@xe
sqlplus64: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
  1. おまじない2。
ln -s /usr/include/oracle/11.2/client64/* /usr/local/include

include をリンクしないとエラーになります。

In file included from /usr/src/php/ext/oci8/oci8.c:50:
/usr/src/php/ext/oci8/php_oci8_int.h:56:10: fatal error: oci.h: No such file or directory
   56 | #include <oci.h>
      |          ^~~~~~~
compilation terminated.
make: *** [Makefile:210: oci8.lo] Error 1
  1. ゴール
docker-php-ext-install oci8 pdo_oci

tnsnames.ora の定義はこうします。

mkdir -p $ORACLE_HOME/network/admin
cat <<EOF > $ORACLE_HOME/network/admin/tnsnames.ora
ORAXE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.13)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = XE)
    )
  )
EOF
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export NLS_LANG=Japanese_Japan.AL32UTF8
sqlplus64 xeuser/oracle@oraxe

環境変数の設定

ENV ORACLE_HOME=/usr/lib/oracle/11.2/client64
ENV PATH=$PATH:$ORACLE_HOME/bin
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
ENV NLS_LANG=Japanese_Japan.AL32UTF8
Scroll to Top