私たちはこの人とほぼ同じ問題を抱えています:
php5を使用してapacheで実行した場合にOCI8関数が見つかりません
彼らの問題と私たちの問題の違いは、php.ini(/etc/php.ini)が1つしかないことです。CentOS5.5でApache2.2.3を使用してPHP5.3.5を実行しています。ご覧のとおり、彼らの質問には実際には答えられませんでしたが、皆さんが私たちの質問に役立つことを願っています。ありがとう!
問題の原因を見つけましたが、永続的に解決する方法がわかりません。どうやら、私たちのテストサーバーは「強制」に設定されたSELinuxを使用しています。「Permissive」に設定すると、Apache/PHPでoci8拡張機能を実行できるようになります。しかし、私の上司は、SELinuxを「強制」に戻したいと思っています。私は彼女を責めません。Oracle/oci8の例外の作成を検討します。
再。Apacheモジュールとして実行する場合のSELinuxおよびOCI8
http://old.nabble.com/php-with-oci8-td16460446.htmlから提案された解決策
audit2allowを使用して、このアクセスを許可するようにポリシーをカスタマイズできます
# grep http /var/log/audit/audit.log | audit2allow -M myhttp
# semodule -i myhttp.pp
これにより、これらのOracleアプリをSELinuxで強制モードで実行できるようになります。
オラクルフォーラムにもこれに関するスレッドがあります
Apache環境にORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATHがあることを確認してください。Apacheはデーモンとして実行されているため、コマンドラインからPHPスクリプトを実行する場合と同じ環境変数にアクセスできるとは限りません。
ORACLE_HOME=/u01/app/oracle/product/10.1
ORACLE_SID=orcl
export ORACLE_HOME ORACLE_SID
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}
データベースサーバーの場所と接続方法によっては、TWO_TASKまたはTNS_ADMINを設定することもできます。正しい文字セットが使用されていることを確認するために、NLS_LANGを設定することもできます。
編集
私は通常、ソースからPHPをビルドするので、完全に制御できます。
標準のOracleクライアントがサーバー上で実行されていると仮定すると、私の./configureには次のものが含まれます。
--with-pdo-oci=$ORACLE_HOME
Oracle Instant Client用にビルドする必要がある場合は、次のように使用しました。
--with-pdo-oci=instantclient,/usr,10.2.0.3
私の./configure行で
OCI8ではなくPDO_OCIを使用していますが、。/configureは類似している必要があることに注意してください
新しいサーバーにデプロイするときに行うもう1つの手順は、apacheユーザー/グループ(httpd.confのUserおよびGroupディレクティブで定義されている...私のapacheはユーザー "daemon"として実行されます)が読み取り、 ORACLE_HOMEの下のファイルに対する特権を実行します