ノーバグノーライフ

細々と記事書いていきます!!

laravelでoracleと接続する方法

概要

laravelとoracleで開発を行うことになったので
環境を作った時のメモを残しておきます。

目次

前提

OS バージョン
CentOS 7.2
ミドルウェア バージョン
Apahce 2.4
php 7.2.10
oracle 11.2.0

オラクルクライアントを利用できる状態にする

オラクルのダウンロードから環境変数の追加、設定ファイルの変更を行います。

オラクルクライアントのダウンロード

オラクルの公式から以下の2つをダウンロードしてくる。
https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

  • instantclient-basic-linux.x64-11.2.0.4.0.zip
  • instantclient-sdk-linux.x64-11.2.0.4.0.zip

※注意点
bit数はPHPに合わせてダウンロードしてください。 これでバージョン確認できます。

$ php -r 'echo PHP_INT_SIZE;'
出力 bit数
4 32bit
8 64bit

今回ダウンロードしたファイルは以下のディレクトリに配置します。

/usr/local/src/

オラクルクライアントを解凍して使える状態にします。

$ cd /usr/local/src/
$ sudo unzip instantclient-basic-linux.x64-11.2.0.4.0.zip 
$ sudo unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip
$ sudo mv instantclient_11_2 /usr/local/lib/
$ cd /usr/local/lib/instantclient_11_2/
$ sudo ln -s libclntsh.so.11.1 libclntsh.so

環境変数を各種モジュールに追加

$ sudo vi /etc/profile
# 以下の4行を追加してください。
  export ORACLE_HOME=/usr/local/lib/instantclient_11_2
  export NLS_LANG=Japanese_Japan.AL32UTF8
  export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
  export PATH=$ORACLE_HOME:$PATH

apacheにも環境変数を追加します。

$ sudo vi /etc/sysconfig/httpd
# 以下の2行を追加
  export ORACLE_HOME=/usr/local/lib/instantclient_11_2
  export LD_LIBRARY_PATH=$ORACLE_HOME

ソースからコンパイルしてインストールした人は以下のファイルに書けばよいかなと思います。

/apacheをインストールしたディレクトリ/httpd/bin/envvars

oci8をインストール

# peclでインストールするので、pearをインストールします。
$ sudo yum install --enablerepo=remi,remi-php72 php-pear
$ sudo vi /etc/profile
# 以下の1行を追加
  export PHP_DTRACE=yes 

$ source /etc/profile
$ sudo -i pecl install oci8

ここでプロンプトが出たら以下を入力してください。

shared,instantclient,/usr/local/lib/instantclient_11_2,11.2

設定ファイルに追加

$ sudo vi /etc/php.ini
# 以下の1行を追加
  extension=oci8.so

変更したapacheの設定とphp.iniの設定を読むためにapache再起動

$ sudo systemctl start httpd

laravelでoracleに接続できるようにする

ここではlaravelのライブラリのインストール、設定の変更を行います。

接続のためのライブラリをインストール

接続するには以下のライブラリを利用します。
github.com

composerを利用してインストールする。
※注意点
laravelのバージョンに合わせてライブラリのバージョンを指定してください。

$ composer require yajra/laravel-oci8:"5.7.*"

config/app.phpのproviders内に記載する。

'providers' => [
    // ...
    Yajra\Oci8\Oci8ServiceProvider::class,
],

コマンドを実行

$ php artisan vendor:publish --tag=oracle

データベースの設定を追加 config/database.phpのconnections内に追加する。
よしなに設定を変えてください。
envから呼び出すのが正しいと思います。

    'connections' => [
        'oracle' => [
            'driver' => 'oracle',
            'host' => '192.168.33.11',
            'port' => '1521',
            'database' => 'db1',
            'username' => 'yoneshu_pro',
            'password' => 'password',
            'unix_socket' => '',
            'charset' => 'AL32UTF8',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],
    ],

動作確認

適当にルーティング内で呼び出してみました。
アクセスしてデータが取得できていたら完成です。

Route::get('/', function () {
    $rows = \DB::connection('oracle')->select('SELECT * FROM test');
    dd($rows);
    return view('welcome');
});

参考ページ

Installation - Laravel Oci8 YajraBox

【Laravel】Oracleへの接続設定の方法(Windows版) - canvas