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

- 環境
    - Windows10 Pro 64bit
    - PHP 7.3.14(32bit)

# 事象 : PHPコマンドでDLLがないと怒られた
Oracleデータベース(12c)を使うので`php.ini`でコメントアウトを外したら、怒られた。

```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
;省略
```

```bash:怒られた
$ 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`をインストールしていた。](http://ponsuke-tarou.hatenablog.com/entry/2018/09/05/010413)

```ini: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](https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html)から「Version 12.2.0.1.0」のzipをダウンロードして使った。
1. 事象は全く解決しなかった...

### 成功した対応 : PHPと同じbitのInstant Clientを配置した
1. PHPのbitを確認する
    - [phpが32bitか64bitか確認する方法 - それマグで！](https://takuya-1st.hatenablog.jp/entry/20110807/1312731737)
1. 「x86(32bit)」なので[Instant Client Downloads for Microsoft Windows 32-bit](https://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads.html)から「Version 12.2.0.1.0」の`instantclient-basiclite-nt-12.2.0.1.0.zip`をダウンロードして使った。
1. ダウンロードしたzipを任意の場所に解凍する
1. 解凍したフォルダへPATHを通す

```bash
# 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
```