新規参画案件で、XAMPPを用いて開発環境を構築していました。
phpで作られたアプリケーションからOracle DBへの接続でOCI8を利用しているのですが、Fatal error: Uncaught Error: Call to undefined function oci_connect()
と表示されうまくいきませんでした。
その際に行った操作を残しておきます。
エラーの理解
まずは、表示されたエラーの理解からです。
Fatal error: Uncaught Error: Call to undefined function oci_connect()
これはoci_connect()
関数が定義されていない。つまり見つからないよ~と教えてくれていますね。
OCI8が見つからなければ当然その中で定義されている関数も使えません。
XAMPPダッシュボードの右側にある「Shell」をクリックし以下を実行し、有効なモジュールを確認。
php -m
openssl
とpcre
の間に当然見当たりません。
Apacheをダッシュボードから起動し、http://localhost/dashboard/phpinfo.php
にアクセスしてみます。
こちらでも当然見つかりません。
では、有効化していきましょう。
OCI8拡張機能を有効化
XAMPPインストール先配下にある/php/php.ini
ファイルを覗いてみます。
940行目のextension=oci8_19
のコメントアウトを解除して、OCI8機能を有効化します。
有効化とあわせて、ddl
があるか確認しておきましょう。
./php/ext/php_oci8_19.dll
これがあれば問題なし。
Oracle Instant Clientをインストール
システムの環境変数の設定を開く。
環境変数>システム環境変数>Path
にてOracle Instant Client
へのPathが通っていなければ設定する必要があります。
適宜、適当なPathに解凍する。
解凍されたフォルダの中に"instantclient_23_6"
(適宜バージョンは読み替えてください)があるので、ここにPathを通します。
上記のように追加してあげます。
多くの記事でここまでの手順でApacheを再起動すれば、解決されると書かれていますが、私の環境では解決しませんでした。
追加でやったこと
XAMPPダッシュボードの右下Quit
からちゃんと閉じて、接続中のブラウザも全て落とします。
再度、XAMPPを起動したところ、
と、望んだとおりに有効化されました。
おわりに
現場で試さないことには完全解決とは言えませんが、私用PCではこれで解決。
よくわかんねぇ。なにがダメだったんだ。0.5MD返して。