web-dev-qa-db-ja.com

Oracleinstantclientとpdo_ociをubuntuマシンにインストールするにはどうすればいいですか?

UbuntuマシンにPDO_OCIをインストールする必要があります。apt-getでインストールできるデフォルトのパッケージはありません。

それを行う方法を示すチュートリアルはたくさんありますが、それらに従うと、コンパイルに関連する問題が発生します(configure、make、...)

ここで私がしたこと:

  1. 私は このチュートリアル に従ってインスタントクライアントをインストールしました

  2. Oci8をインストールします

    pecl install oci8
    

    エラーが発生します:

    エラー:oci.hが見つかりません

  3. PDO_OCIをインストールします

    mkdir -p /tmp/pear/download/
    cd /tmp/pear/download/
    pecl download pdo_oci
    phpize
    ./configure –with-pdo-oci=instantclient,/usr,11.2
    

    エラー:

    pdo_driver.hが見つかりません.。

UBUNTU 12.04で完璧に機能する本格的なチュートリアルはありますか?

5
skonsoft

pecl installのPDO、PDO_OCI拡張機能は廃止されました。これは、最新のPHPバージョンにはコアが組み込まれており、これらの拡張機能のインストールがほとんど失敗したためです。

私は運が悪かったいくつかのアプローチに従ってこれをやろうと多くの時間を費やしました、そして最終的にこれを行うためのクリーンな方法を自分で見つけました:から拡張機能をコンパイルしてインストールします= PHP source

コンパイル中に、いくつかのトリックもあります。私は自分の投稿でプロセスを詳細に説明しました: https://medium.com/@thucnc/how-to-install-php5-pdo-oci- oci8-and-other-extensions-for-ubuntu-f405eadfe784

短い手順は次のとおりです。

  1. Oracle Instant Clientをダウンロードしてインストールし、Oracle_HOME環境変数をエクスポートします
  2. PDO_OCI(および必要に応じてOCI8)フォームPHPソースパッケージをダウンロードしてコンパイルします。ここで適用する必要のあるトリックがいくつかあります。

    Sudo ln -s /usr/include/php5/ /usr/include/php

    makefileを編集します。

    EXTRA_INCLUDES = -I/usr/include/Oracle/11.2/client64

  3. 拡張機能を有効にして、Webサーバーを再起動します

これはDebian7.6でもテストされています

お役に立てれば。

3
thucnguyen

PECLバージョンは廃止されたため、このガイドはソースからpdo_ociモジュールをコンパイルするのに役立つ場合があります。 CentOS 6.6、PHP v5.3.3、およびOracle Instant client v.12.1用に 元の投稿 と書きましたが、あなたのケースにも簡単に適用できるはずです。

PHP開発パッケージをインストールします

$ apt-get install php-devel 

PHPソースコードをダウンロードする

$ cd /usr/local/src
$ mkdir php_source
$ cd php_source/
$ wget http://museum.php.net/php5/php-5.3.3.tar.gz
$ gunzip php-5.3.3.tar.gz
$ tar xvf php-5.3.3.tar

コンパイルのためにPDO_OCIを準備します

$ Oracle_HOME環境変数が設定されていることを確認してください。私の場合、それは/usr/lib/Oracle/12.1/client64を指していた

拡張ソースファイルが配置されているフォルダーを参照します。

$ cd php-5.3.3/ext/pdo_oci

拡張機能ですぐにサポートされていないOracleクライアントバージョン12.1を実行しているため、ハッキングを行う必要があります。 Instant Clientのバージョン番号をconfig.m4ファイルに追加する必要があります。そうしないと、configureが失敗し、次のエラーメッセージが表示されます。

 Oracleバージョン... configure:エラー:Oracleに必要なOCI8ライブラリが/usr/lib/Oracle/12.1/client64
の下に見つかりません。

config.m4ファイルを開き、SUPPORTED_LIB_VERS(5行目程度)を探し、バージョンのリストに12.1を追加します。また、case $PDO_OCI_VERSION in行(134行目)を見つけて、その下のバージョンのリストに|12.1を追加します。ファイルを保存すれば、ここで必要なのはそれだけです。

拡張機能を準備、構成、作成します

$ phpize
$ ./configure
$ make

さて、makeはおそらくOracleヘッダーファイルが見つからないと文句を言って失敗するでしょう。 oci.h.これは、OracleサーバーまたはInstantクライアントを開発者モードでインストールしない限り、ファイルがサーバー上に存在しないためです。

Oracle.comの「Linux用のインスタントクライアントダウンロード」ページにアクセスして、ご使用のバージョンのインスタントクライアントSDKパッケージを入手してください。 Linux用のインスタントクライアントダウンロード

私の場合、このファイルをダウンロードしました: http://www.Oracle.com/technetwork/topics/linuxx86-64soft-092277.html

任意の場所でファイルを解凍します。必要なヘッダーファイルはsdk/includeフォルダーにあります。これらすべてのファイルを拡張子のincludeフォルダーにコピーします。/ usr/local/src/php_source/php-5.3.3/ext/pdo_oci/include ==

これで、makeは合格するはずです。

$ make

最終結果として、コンパイルされたpdo_oci.soモジュールが拡張ディレクトリの/ modulesサブフォルダにあります。/ usr/local/src/php_source/php-5.3.3/ext/pdo_oci/modules/pdo_oci.so

コンパイルされたモジュールを移動して有効にします

PHPがサーバー上の拡張機能を格納する場所を確認します

$ php -i | grep extension_dir

拡張子(pdo_oci.so)をそのディレクトリにコピーします。

モジュールを有効にする方法はいくつかあります。 1つはメインのphp.iniファイルに含めることですが、私の場合は、他のモジュールの他の.iniファイルが存在し、PHPによって含まれるフォルダーに別の.iniファイルを作成しました。起動。

そこで、次の内容のファイル/etc/php.d/pdo_oci.iniを作成しました。

; Enable pdo_oci extension module
extension=pdo_oci.so

または、同じ行をphp.iniファイルに追加することもできます。

Apacheを再起動し、確認します

$ /etc/init.d/httpd restart

PHP CLIがインストールされている場合は、ロードされているモジュールのリストを確認できます。それ以外の場合は、phpinfo()を含むPHPファイルを作成し、出力を確認します。出力にPDO_OCIが表示されている場合は、おめでとうございます。

$ php -m

クレジット

ソースからPHP拡張機能をコンパイルする方法に関する元の投稿をしてくれたMattiasGeniarに感謝します: https://ma.ttias.be/how-to-compile-and-install-php-extensions -from-source /

7
guntars

答えは、これの複製です 記事 (ロシア語)これは、これに基づいています 投稿 いくつかの修正が加えられています。数日間の無駄な検索の後、それは私にとってスムーズに機能しました。

前提条件:

管理者権限が必要です

次のパッケージでphp5をインストールする必要があります。

Sudo apt-get install php5 php5-dev php-pear php5-cli
Sudo pecl install pdo

Libaio1ライブラリがインストールされている必要があります。

Sudo apt-get install libaio1

OracleInstantClientのインストール

OracleのWebサイト(Oracle.com/technetwork/database/features/instant-client/index-097480.html)から、プロセッサアーキテクチャとOS用のOracleインスタントクライアントをダウンロードします。

Linuxの場合、インスタントクライアントには2つのオプションがあります。Linux、CentOS、Fedora、Red Hat Enterprise Linux、Mandriva Linux、SUSE LinuxなどのRPMパッケージです。Zipアーカイブ—RPMをサポートしていない他のすべての場合。

ダウンロードするファイルは2つあります。

instantclient-basic —Oracleインスタントクライアント自体

instantclient-sdk —アプリケーション開発用のライブラリのセット

Oracle Instant Client用のディレクトリを作成します(ソフトウェア拡張用に予約されている/ optディレクトリはこの目的に適しています)。

Sudo mkdir -p /opt/Oracle/

ダウンロードしたファイルを/ opt/Oracleに移動し、宛先フォルダに切り替えます(「Zip」アーカイブをユーザーの「downloads」ディレクトリにダウンロードしたと仮定します)。

Sudo mv ~/downloads/instantclient-*.Zip /opt/Oracle/
cd /opt/Oracle/

ダウンロードしたアーカイブの抽出:

Sudo unzip instantclient-basic-*-*.Zip
Sudo unzip instantclient-sdk-*-*.Zip

最後に、Oracle Instant Client11.2.0.2.0用にinstantclient_11_2/opt/Oracleディレクトリが作成されています。このディレクトリの名前をinstantclient(バージョン番号に注意)に変更し、次のように切り替えます。

Sudo mv instantclient_11_2 instantclient
cd instantclient

次に、いくつかの追加のディレクトリとシンボリックリンクを作成する必要があります(バージョン番号に注意してください)。

Sudo ln -s /opt/Oracle/instantclient/libclntsh.so.* /opt/Oracle/instantclient/libclntsh.so
Sudo ln -s /opt/Oracle/instantclient/libocci.so.* /opt/Oracle/instantclient/libocci.so
Sudo ln -s /opt/Oracle/instantclient/ /opt/Oracle/instantclient/lib

Sudo mkdir -p include/Oracle/11.2/
cd include/Oracle/11.2/
Sudo ln -s ../../../sdk/include client
cd -

Sudo mkdir -p lib/Oracle/11.2/client
cd lib/Oracle/11.2/client
Sudo ln -s ../../../ lib
cd -

Oracle Instant Client Libraryを検索するディレクトリの名前を含む構成ファイルを作成し、それを有効にします。

echo /opt/Oracle/instantclient/ | Sudo tee -a /etc/ld.so.conf.d/Oracle.conf
Sudo ldconfig

Ubuntuにディレクトリ/usr/include/phpがないが、クライアントがそれを検索している限り、それに相当するものへのシンボリックリンクを作成します-php5:

Sudo ln -s /usr/include/php5 /usr/include/php

OCI8のインストール

前のアクションの後、oci8拡張機能がpeclコマンドでインストールされます。

Sudo pecl install oci8

oracle Instant Clientへのパスの入力を求められたら、次のように応答します。

instantclient,/opt/Oracle/instantclient

拡張接続ファイルの作成:

echo "; configuration for php oci8 module" | Sudo tee /etc/php5/conf.d/oci8.ini
echo extension=oci8.so | Sudo tee -a /etc/php5/conf.d/oci8.ini

PDO_OCIのインストール

PDO_OCIをインストールするには、pearリポジトリ(pear.php.net)からダウンロードします。

洋ナシのパッケージリストを更新します。

Sudo pecl channel-update pear.php.net

アーカイブをダウンロードして一時ディレクトリに配置します。

Sudo mkdir -p /tmp/pear/download/
cd /tmp/pear/download/
Sudo pecl download pdo_oci

アーカイブコンテンツの抽出:

Sudo tar xvf PDO_OCI*.tgz
cd PDO_OCI*

ここでは、Oracle Instant Clientのバージョンに関する情報が含まれていないため、config.m4ファイルを修正する必要があります。ファイルを開き、「+」でマークされた変更を追加します(バージョン番号に注意してください)。

Sudo vim config.m4

以下は、2つのファイルのdiffです。

***************
*** 7,12 ****
--- 7,14 ----
if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then
PDO_OCI_VERSION=`grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3
+ Elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
+ PDO_OCI_VERSION=11.2
Elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
PDO_OCI_VERSION=10.1 
Elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
***************
*** 119,124 ****
--- 121,129 ----
10.2)
PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
;;
+ 11.2)
+ PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
+ ;;
*)
AC_MSG_ERROR(Unsupported Oracle version! $PDO_OCI_VERSION)
;;
***************

phpize(php.net/manual/ru/install.pecl.phpize.php)コマンドを使用してphp拡張用の環境を準備します。

Sudo phpize

パッケージインストーラーを構成し、パッケージをインストールします(バージョン番号に注意してください)。

Sudo ./configure --with-pdo-oci=instantclient,/opt/Oracle/instantclient/,11.2
Sudo make
Sudo make install

そのための接続ファイルを作成します。

echo "; configuration for php PDO_OCI module" | Sudo tee /etc/php5/conf.d/pdo_oci.ini
echo extension=pdo_oci.so | Sudo tee -a /etc/php5/conf.d/pdo_oci.ini

Apacheを再起動し、拡張機能がインストールされているかどうかを確認します。

Sudo /etc/init.d/Apache2 restart
php -m
7
Andrey Grachev