ショコラ
PHP に オラクルクライアントをインストールするには?
手順を書き出してみました。キメマス、キメマス。
もっさん先輩
- PHPコンテナを起動します。
ドッカーコンテナに入っちゃいます。
docker run --name php -it php:8.1.7-apache bash
- apt-get アップデートします。
ここからは PHPコンテナ内の話です。
apt-get update
- alien と libaio1 パッケージをインストールします。
apt-get install -y --no-install-recommends alien libaio1
- オラクルクライアントのパッケージをコンテナにコピーします。
ここは ホスト から ファイル を コピー する話。
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
- オラクルクライアントをインストールします。
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
- 環境変数を設定します。
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。
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
- おまじない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
- ゴール
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