ホームページ  >  記事  >  バックエンド開発  >  Linux システム上の PHP は、php_oci8 拡張機能を介して Oracle データベース ノートに接続します

Linux システム上の PHP は、php_oci8 拡張機能を介して Oracle データベース ノートに接続します

WBOY
WBOYオリジナル
2016-06-23 13:12:561065ブラウズ

php を oracle に接続するのは、mysql に接続するほど簡単ではありませんが、ほとんどの場合、これは使用されませんが、oracle データベースにアクセスするために php を使用する必要がある状況に遭遇した場合、非常に困難になります。

一般的な手順は次のとおりです:

私の環境は Linux システム (centos 6.7 64 ビット) です。php のバージョンは 5.3 です。以下はインターネット上にある解決策です。途中の落とし穴については後で説明します: sunfei の部分に注意してください

InstantClient は、Oracle がデータベースに接続するための単純なクライアントです。 500Moracle クライアントをインストールせずに Oracle データベースを使用するには Windows バージョンと Linux バージョンがあります。ここからダウンロードする必要なバージョンを選択します。必要なのは、Basic および Devel rpm パッケージのみです。

最初の落とし穴: ここでダウンロードする場合は、公式の Oracle アカウントを登録することをお勧めします。ダウンロードするときに、ログインを求められます。私は何度も直接ダウンロードしているため、ログイン後にダウンロードできます。以前は、ダウンロードが実際には Web ページであり、実際の rpm パッケージではなかったため、インストールが失敗しました。 (by:sunfei)

安装# rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm# rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm软链接# ln -s /usr/include/oracle/11.2/client64 /usr/include/oracle/11.2/client# ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client

64 ビット システムでは 32 ビットのソフト リンクを作成する必要があります。これは古いバグである可能性があります。そうしないと、その後のコンパイルで問題が発生します。

次に、システムが Oracle クライアント ライブラリ ファイルを見つけて LD_LIBRARY_PATH を変更できるようにする必要があります。

# vi /etc/profile.d/oracle.shexport ORACLE_HOME=/usr/lib/oracle/11.2/client64export LD_LIBRARY_PATH=$ORACLE_HOME/lib

source /etc/profile.d/oracle.sh を実行して、環境変数を有効にします。

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

ここではこの拡張機能をインストールしませんでした。oci8 のみをインストールしました。直接 3 番目のステップに進みます (by:sunfei)

インターネットに接続している場合、PHP 拡張機能をオンラインでインストールするのは非常に簡単ですpecl を通じて、ubuntu マシンに oracle instantclient と pdo_oci をインストールする方法を参照してください。

https://pecl.php.net/package/PDO_OCI から PDO_OCI-1.0.tgz ソース ファイルをダウンロードします。

# wget https://pecl.php.net/get/PDO_OCI-1.0.tgz# tar -xvf PDO_OCI-1.0.tgz# cd PDO_OCI-1.0

PDO_OCI は長期間更新されていないため、ODI_OCI-1.0 フォルダ内の config.m4 ファイルを編集して 11g をサポートするようにする必要があります:

# 在第10行左右找到与下面类似的代码,添加这两行:elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then  PDO_OCI_VERSION=11.2# 在第101行左右添加这几行:11.2)  PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)  ;;

pdo_oci 拡張機能をコンパイルしてインストールします: (インストール後完了したら、/usr/lib64/php /modules/pdo_oci.so にあります。このモジュールを見つけてください)

$ phpize$ ./configure --with-pdo-oci=instantclient,/usr,11.2$ make$ sudo make install

この拡張機能を有効にするには、/etc/php.d/ の下に新しい pdo_oci.ini ファイルを作成します。内容:

extension=pdo_oci.so

インストールが成功したことを確認します:

# php -i|grep oci看到类似下面的内容则安装成功:/etc/php.d/pdo_oci.ini,PDO drivers => oci, sqlite或# php -m

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

https://pecl.php.net/package/oci8 から oci8-2.0.8.tgz ソース ファイルをダウンロードします。

2 番目の落とし穴: ここでは、まず wdcp パネルの php 拡張機能ディレクトリ /www/wdlinux/php/include/php/ext に入り、次に (by:sunfei) をダウンロードして解凍します

# wget https://pecl.php.net/get/oci8-2.0.8.tgz# tar -xvf oci8-2.0.8.tgz# cd oci8-2.0.8

oci8 拡張機能をコンパイルしてインストールする必要があります:

3 番目の落とし穴: 次の phpize は、wdcp パネルの直下に入力すると見つからないため、フルパスを使用する必要があります

/www/wdlinux/php/bin/phpize

同じ理由で、php-configどちらも見つからないため、次のコードを設定行に追加する必要があります。.../client64/lib の後にスペースを入れる必要があることに注意してください。 –with-php-config=/www/wdlinux/php/まず bin/php-config を実行します。

# phpize# ./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib# make# make install

この拡張機能を有効にするには、/etc/php.d/ に新しい oci8.ini ファイルを作成します。内容は次のとおりです。

4 番目のピット: 前の手順の make install が完了したら、画面にパスが表示されます。このパスは oci8.so ファイルの場所です。ファイルはそこにあり、php.ini に設定を追加する必要があります。wdcp パネルの php.ini のパスは /www/ です。 wdlinux/etc/php.ini 構成ファイルの末尾に移動し、extension=/www/wdlinux/apache_php-5.3.29/lib/php/extensions/no-debug-non-zts-20090626/ という行を追加します。 oci8.so を zend 関連の設定の前に追加しました。最後に追加すると機能しないという人もいるので、自分で試してみてください。次に、Apache を再起動します。この時点で、基本的には成功です。 (by: sunfei)

extension=oci8.so

インストールが成功したことを確認します:

# php -i|grep oci8/etc/php.d/oci8.ini,oci8oci8.connection_class => no value => no valueoci8.default_prefetch => 100 => 100oci8.events => Off => Offoci8.max_persistent => -1 => -1oci8.old_oci_close_semantics => Off => Offoci8.persistent_timeout => -1 => -1oci8.ping_interval => 60 => 60oci8.privileged_connect => Off => Offoci8.statement_cache_size => 20 => 20OLDPWD => /usr/local/src/oci8-2.0.8_SERVER["OLDPWD"] => /usr/local/src/oci8-2.0.8

最後に、Apache などのリバース Web サーバーを忘れずに再起動してください。拡張機能が正常にインストールされたかどうかを確認するには、phpinfo() を使用します。

4. 接続のテスト

Apache などの Web サーバーの php ディレクトリに testoci.php を作成します。

5 番目のピット: 次のコードでは、$item 部分がなぜ必要なのかわかりません。 htmlentities関数を使用して対処しましょう。最初は見つかりませんでしたが、後でオンラインで確認したところ、この関数を削除して$itemを直接表示しました。さらに、エンコードパラメータ ZHS16GBK を oci_connect パラメータに追加しました (うまくいかなかった場合は、エンコードを変更してください。Baidu、これについては書きません)。 (by:sunfei)

<?php$conn = oci_connect('username', 'password', '172.29.88.178/DBTEST');$stid = oci_parse($conn, 'select table_name from user_tables');oci_execute($stid);echo "<table>\n";while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { echo "<tr>\n"; foreach ($row as $item) { echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : " ")."</td>\n"; } echo "</tr>\n";}echo "</table>\n";?>

このページにアクセスすると結果が得られるはずです。

究極の落とし穴: 上記のページを実行しても何も表示されない場合があります。具体的には、oci_error() を使用して、ora-24408 が固有のサーバーを生成できなかったことを確認します。グループ名はこのエラーであり、Baidu は長い間取り組んできた解決策を見つけました。HOSTNAME = ホスト名は /etc/sysconfig/network で構成する必要があるため、それを追加する必要があります。 /etc/hosts に後で (127.0 .0.1 localhost 以降はスペースを追加してから追加します)、ネットワーク サービスを再起動してから、上記のテスト ファイルを実行すると、OK になります。 (by:sunfei)

問題は最終的に解決されました。実際のプロセスで他の問題が発生する可能性がありますが、それでも失敗することがあります。時間をかけて解決してください。新しい人のために解決した経験を忘れずに投稿してください。 )手で学びます(ニャオ)。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。