LoginSignup
1
0

More than 3 years have passed since last update.

PHPでUnable to load dynamic library 'oci8_12c'となった時の対応方法

Posted at
  • 環境
    • Windows10 Pro 64bit
    • PHP 7.3.14(32bit)

事象 : PHPコマンドでDLLがないと怒られた

Oracleデータベース(12c)を使うのでphp.iniでコメントアウトを外したら、怒られた。

oci8_12cとpdo_ociのコメントアウトを外した
;省略
extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
extension=pdo_oci
;省略
怒られた
$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'oci8_12c' (tried: C:\apps\php-7.3.14-Win32-VC15-x86\ext\oci8_12c (指定されたモジュールが見つかりません。), C:\apps\php-7.3.14-Win32-VC15-x86\ext\php_oci8_12c.dll (%1 は有効な Win32 アプリケーションではありません。)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'oci8_12c' (tried: C:\apps\php-7.3.14-Win32-VC15-x86\ext\oci8_12c (指定されたモジュールが見つかりません。), C:\apps\php-7.3.14-Win32-VC15-x86\ext\php_oci8_12c.dll (%1 は有効な Win32 アプリケーションではありません。)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'php_pdo_oci.dll' (tried: C:\apps\php-7.3.14-Win32-VC15-x86\ext\php_pdo_oci.dll (%1 は有効な Win32 アプリケーションではありません。), C:\apps\php-7.3.14-Win32-VC15-x86\ext\php_php_pdo_oci.dll.dll (指定されたモジュールが見つかりません。)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'php_pdo_oci.dll' (tried: C:\apps\php-7.3.14-Win32-VC15-x86\ext\php_pdo_oci.dll (%1 は有効な Win32 アプリケーションではありません。), C:\apps\php-7.3.14-Win32-VC15-x86\ext\php_php_pdo_oci.dll.dll (指定されたモジュールが見つかりません。)) in Unknown on line 0
PHP 7.3.14 (cli) (built: Jan 21 2020 13:17:19) ( ZTS MSVC15 (Visual C++ 2017) x86 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.9.1, Copyright (c) 2002-2020, by Derick Rethans

# dllは所定のフォルダに格納されています。
$ ls -la /c/apps/php-7.3.14-Win32-VC15-x86/ext | grep oci
-rwxr-xr-x 1 pon 197609  132096 1月  21 14:20 php_oci8_12c.dll*
-rwxr-xr-x 1 pon 197609   26624 1月  21 14:20 php_pdo_oci.dll*

原因 : Oracle Database 12c Instant Clientがないから

ちゃんとphp.iniに書いてある・・・・そういえば以前のPCではSQL*PLUSをインストールしていた。

php.ini
extension=oci8_12c  ; Use with Oracle Database 12c Instant Client

対応 : Instant Clientを配置する

失敗した対応 : PHPと違うbitのInstant Clientを配置した

  1. OInstant Client Downloads for Microsoft Windows (x64) 64-bitから「Version 12.2.0.1.0」のzipをダウンロードして使った。
  2. 事象は全く解決しなかった...

成功した対応 : PHPと同じbitのInstant Clientを配置した

  1. PHPのbitを確認する
  2. 「x86(32bit)」なのでInstant Client Downloads for Microsoft Windows 32-bitから「Version 12.2.0.1.0」のinstantclient-basiclite-nt-12.2.0.1.0.zipをダウンロードして使った。
  3. ダウンロードしたzipを任意の場所に解凍する
  4. 解凍したフォルダへPATHを通す
# PHPのバージョンを確認する
$ php -r 'echo PHP_INT_SIZE;'$ php -r 'echo PHP_INT_SIZE;'
4

# ダウンロードしたzipを任意の場所に解凍する
$ unzip ~/Downloads/instantclient-basiclite-nt-12.2.0.1.0.zip -d /c/apps/oracle
Archive:  /c/Users/pon/Downloads/instantclient-basiclite-nt-12.2.0.1.0.zip
   creating: /c/apps/oracle/instantclient_12_2/
  inflating: /c/apps/oracle/instantclient_12_2/oraocci12.sym
  inflating: /c/apps/oracle/instantclient_12_2/oraociicus12.dll
  inflating: /c/apps/oracle/instantclient_12_2/uidrvci.sym
  inflating: /c/apps/oracle/instantclient_12_2/ocijdbc12.dll
  inflating: /c/apps/oracle/instantclient_12_2/xstreams.jar
  inflating: /c/apps/oracle/instantclient_12_2/orasql12.sym
  inflating: /c/apps/oracle/instantclient_12_2/oraocci12d.dll
  inflating: /c/apps/oracle/instantclient_12_2/genezi.exe
  inflating: /c/apps/oracle/instantclient_12_2/ojdbc8.jar
  inflating: /c/apps/oracle/instantclient_12_2/adrci.exe
  inflating: /c/apps/oracle/instantclient_12_2/BASIC_LITE_README
  inflating: /c/apps/oracle/instantclient_12_2/oraocci12d.sym
  inflating: /c/apps/oracle/instantclient_12_2/orasql12.dll
  inflating: /c/apps/oracle/instantclient_12_2/oraociicus12.sym
  inflating: /c/apps/oracle/instantclient_12_2/oraocci12.dll
  inflating: /c/apps/oracle/instantclient_12_2/ocijdbc12.sym
  inflating: /c/apps/oracle/instantclient_12_2/orannzsbb12.dll
  inflating: /c/apps/oracle/instantclient_12_2/ociw32.sym
  inflating: /c/apps/oracle/instantclient_12_2/adrci.sym
   creating: /c/apps/oracle/instantclient_12_2/vc14/
  inflating: /c/apps/oracle/instantclient_12_2/vc14/oraocci12d.sym
  inflating: /c/apps/oracle/instantclient_12_2/vc14/oraocci12d.dll
  inflating: /c/apps/oracle/instantclient_12_2/vc14/oraocci12.dll
  inflating: /c/apps/oracle/instantclient_12_2/vc14/oraocci12.sym
  inflating: /c/apps/oracle/instantclient_12_2/oci.dll
  inflating: /c/apps/oracle/instantclient_12_2/oraons.dll
  inflating: /c/apps/oracle/instantclient_12_2/genezi.sym
  inflating: /c/apps/oracle/instantclient_12_2/ociw32.dll
  inflating: /c/apps/oracle/instantclient_12_2/oci.sym
  inflating: /c/apps/oracle/instantclient_12_2/uidrvci.exe
  inflating: /c/apps/oracle/instantclient_12_2/orannzsbb12.sym

# 解凍したフォルダへPATHを通す
$ printenv PATH | sed -e 's/:/:\n/g' | grep ora
/c/apps/oracle/instantclient_12_2_x32:

# 対応結果
$ php -v
PHP 7.3.14 (cli) (built: Jan 21 2020 13:17:19) ( ZTS MSVC15 (Visual C++ 2017) x86 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.9.1, Copyright (c) 2002-2020, by Derick Rethans
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0