php を oracle に接続するのは、mysql に接続するほど簡単ではありませんが、ほとんどの場合、これは使用されませんが、oracle データベースにアクセスするために php を使用する必要がある状況に遭遇した場合、非常に困難になります。
一般的な手順は次のとおりです:
私の環境は Linux システム (centos 6.7 64 ビット) です。php のバージョンは 5.3 です。以下はインターネット上にある解決策です。途中の落とし穴については後で説明します: sunfei の部分に注意してください
最初の落とし穴: ここでダウンロードする場合は、公式の 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)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
# 在第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) ;;
$ phpize$ ./configure --with-pdo-oci=instantclient,/usr,11.2$ make$ sudo make install
extension=pdo_oci.so
# php -i|grep oci看到类似下面的内容则安装成功:/etc/php.d/pdo_oci.ini,PDO drivers => oci, sqlite或# php -m
https://pecl.php.net/package/oci8 から oci8-2.0.8.tgz ソース ファイルをダウンロードします。
# 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 を作成します。
<?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)
問題は最終的に解決されました。実際のプロセスで他の問題が発生する可能性がありますが、それでも失敗することがあります。時間をかけて解決してください。新しい人のために解決した経験を忘れずに投稿してください。 )手で学びます(ニャオ)。