haiju's 開発メモ

開発に必要な情報を自分用にメモ

ec2のLaravel6.xとRDS(Oracle)の疎通確認をするサンプルプログラムを作った

Laravel6.x内からPHP7.4でRDS for Oracleに接続して疎通確認をするサンプルプロ

グラムを書いたので、忘れないようにやり方をメモしておく(Φω|

新規ではなく既存のOracleで構築されたdatabaseを利用するということで、

MySQL版の記事同様、DB Facadeを使い処理を行っている。

では、行ってみよう!

[手順]

0. oracle instantclientインストール。

 ※バージョンはサーバーの古いバージョンに合わせなくていい。

 ※PHP7.4でクライアントのバージョンが古すぎるとPHPコマンドで

  バージョンを確認した時に下記Warningが出たので、PHPのバージョン

  に合わせるべき。

php --version
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8' (tried: /opt/remi/php74/root/usr/lib64/php/modules/oci8 (/opt/remi/php74/root/usr/lib64/php/modules/oci8: cannot open shared object file: No such file or directory), /opt/remi/php74/root/usr/lib64/php/modules/oci8.so (libclntsh.so.19.1: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_oci' (tried: /opt/remi/php74/root/usr/lib64/php/modules/pdo_oci (/opt/remi/php74/root/usr/lib64/php/modules/pdo_oci: cannot open shared object file: No such file or directory), /opt/remi/php74/root/usr/lib64/php/modules/pdo_oci.so (libclntsh.so.19.1: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

※libclntsh.so.19.1は19.xのoracle-instantclient19.9をインストールすれば自動設定

 される。

0-1. 公式から19.xのinstantclientをダウンロード。

ダウンロードしたのは下記。

oracle-instantclient19.9-basic-19.9.0.0.0-1.x86_64.rpm
oracle-instantclient19.9-devel-19.9.0.0.0-1.x86_64.rpm
oracle-instantclient19.9-sqlplus-19.9.0.0.0-1.x86_64.rpm

0-2.インストール前に古いバージョンをrpmコマンドでアンインストール。

$ rpm -evh oracle-instantclient12.2-basic-12.2.0.1.x86_64

$ rpm -evh oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64

0-3. ec2のLaravel6がいる環境に1をMobaXtermで転送し、rpmコマンドで

  インストール。

$ rpm -ivh oracle-instantclient19.9-basic-19.9.0.0.0-1.x86_64 oracle-instantclient19.9-devel-19.9.0.0.0-1.x86_64 oracle-instantclient19.9-sqlplus-19.9.0.0.0-1.x86_64 install

※分割インストールでも可。

0-4. .bashrcに下記のパスを追加。

# User specific aliases and functions 12.2で追加されていたものを19.9

に変更し反映。
export LD_LIBRARY_PATH=/usr/lib/oracle/19.9/client64/lib
export TNS_ADMIN=~/oracle/network/admin
export NLS_LANG=Japanese_Japan.AL32UTF8

$ source ~/.bashrc

※ターミナルからsqlplus64で疎通確認し、接続できればOK。

1. yumでoci8とpdo_ociをインストール。

$ sudo su -

# yum install -y php74-php-oci8

 ※こちらをインストールせずにcomposerでlaravel-oci8をインストール

  しようとして大分、ハマったので注意。

 ※php74-php-oci8のインストールでoci8とpdo_ociの両方が入る。

1-1. oci8やpdo_ociのインストール状況は下記コマンドで確認。

$ php -m

[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mysql
mysqli
mysqlnd
oci8
openssl
pcntl
pcre
PDO
pdo_dblib
PDO_Firebird
pdo_mysql
PDO_OCI
pdo_sqlite
Phar
readline
Reflection
session
SimpleXML
sockets
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
xsl
zip
zlib

2. composerでlaravel-oci8をインストール。

$ composer require yajra/laravel-oci8:^6

※もちろんswapを1GBほど作成してから実行するのを忘れずに。

3. Laravelプロジェクトのルートで下記コマンドを実行。

php artisan vendor:publish --tag=oracle

Copied File [/vendor/yajra/laravel-oci8/src/config/oracle.php] To [/config/oracle.php]
Publishing complete.

4. 3で生成された設定ファイル(config/oracle.php)を自分の環境に合わせて編集。

(ex)生成されたconfig/oracle.php

'oracle' => [
     'driver' => 'oracle',
     'host' => 'oracle.host',
     'port' => '1521',
     'database' => 'xe',
     'service_name' => 'sid_alias',
     'username' => 'hr',
    'password' => 'hr',
    'charset' => '',
    'prefix' => '',
]

※prefix以外を自分の環境に合わせて修正し、今回は.envの設定を

 利用しない。

※charsetはほぼ'AL32UTF8'で固定。

5. routes/web.php を編集。

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/user', 'UserController@index');
Route::get('/orauser', 'OraUserController@index'); // 今回追加

6. app/Http/Controller/OraUserController.php 作成。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class OraUserController extends Controller
{
  public function index()
  {
    $users = DB::connection('oracle')->select("select * from users");
    $data = ['msg' => 'ユーザ一覧', 'users' => $users];
    return view('orauser.index', $data);
  }
}

7. resources/views/orauser/index.blade.php 作成。

<h1>{{ $msg }}</h1>

 <ul>
  @foreach ($users as $user)
   <li>{{ $user->usr_name }}</li>
  @endforeach
 </ul>

8. 一応、cacheクリア。

$ php artisan cache:clear
$ php artisan config:clear
$ php artisan route:clear
$ php artisan view:clear

php artisanコマンドはLaravelプロジェクトのルートで実行。

9. apache再起動。

$ sudo su -

# systemctl restart httpd(.service) --- ()は省略可能

10. Webブラウザでhostsに設定しているservernameでアクセスし、

 sqlplus64で同じクエリーを実行した場合と結果が同じであればOK。

[参考サイト]

github.com

yajrabox.com

yajrabox.com

laracasts.com

stackoverflow.com

stackoverrun.com

qiita.com

saba.omnioo.com

saba.omnioo.com

qiita.com

buildasite.info

blog.nobug-nolife.com

www.oracle.com

blog.serverworks.co.jp

stackoverflow.com

forum.remirepo.net

askubuntu.com

www.php.plus-server.net

stackoverflow.com

tutorialmore.com

mseeeen.msen.jp

 

laravel.com

reffect.co.jp

github.com

webbibouroku.com

tutorialmore.com

qiita.com

qiita.com

Installing OCI8 &amp; PHP 7.2 on RHEL or CentOS&nbsp;6alvinbunk.wordpress.com

www.s-style.co.jp