人気コンテンツ今日: |
Solaris10 + Apache2 + PHP5.2 + Oracle10gSubmitted by sasaki on 月曜, 2007-01-22 17:52.
Solari10とApache2とPHP5.2.8とOracle10g 10.2.0.3.0 を組み合わせて使いたい。 Oracle10gが既にインストールされているSolaris10にPHP 5.2.8をインストールした作業の記録。
■インストール方法、参考情報Oracle Database、PHP、ApacheのLinuxへのインストール PHPでOracle Databaseを使う(Oracle Instant Clientの場合) Oracle Database 10g Express Editionを使ったPDO_OCI/OCI8サポート手順
■インストール前の準備configure時に様々なファイルにアクセスできるよう、ルートユーザになっておく。(大事) $ su -
念のため、環境変数を設定しておいた。 (Oracle用の環境変数)
■PHP5.2.8のインストール
./configure を実行する。--with-oci8で設定するパスは、echo $ORACLE_HOME で調べる。 # ./configure \ --with-oci8でsharedを指定すると、静的リンクではなく、拡張モジュールoci8.soが作成される。 MySQLも使いたいので、./configure 時に以下も追加した。 --with-mysql=/usr/local/mysql5 \
make install を実行する。 # make
make install を実行すると、メッセージの途中でlibtoolを実行せよとの warning が表示された。 libtool: install: warning: remember to run `libtool --finish /usr/local/src/php-5.2.8/libs'
実行してみた。 # libtool --finish /usr/local/src/php-5.2.8/libs
あと、make install の最後に表示されたPEAR情報をメモしておいた。 Installing PEAR environment: /usr/local/lib/php/
■設定ファイル php.iniを用意する。php.ini-dist 一般的なPHP設定。 php.ini-recomended 推奨されるPHP設定。 中身を見て使い勝手の良い方をphp.iniとしてコピーする。コピー先は、PHPのconfigure時に--with-config-file-pathオプションを指定していなければ、初期設定で/usr/local/libになる。 # cp php.ini-dist /usr/local/lib/php.ini
コピーした/usr/local/lib/php.iniを編集する。 /usr/local/lib/php/extensions/no-debug-non-zts-20060613/oci8.soが入っているディレクトリとmbstring.soを指定する。Windows用に書かれたphp_*.dllを*.soの形に直してコメントアウトする。 (変更前) php_ を削除するのを忘れずに。
■Apache2のhttpd.confの確認と再起動/etc/apache2/httpd.confの中を確認。下の2行が追加されているか確認して修正する。 LoadModule php5_module libexec/libphp5.so PHPIniDir "/usr/local/lib" は、PHPのconfigure時に--with-config-file-pathオプションを指定していないので必要ない。
Apache再起動の前に文法間違いが無いかを確認する。 # /usr/apache2/bin/httpd -t
Apacheを再起動する。必ず、終了させてから、起動する。 # svcadm disable apache2
以下のtest.phpを作ってブラウザからアクセスして、ライブラリパス等の設定情報を確認する。 <?php
■Apache2の起動時にOracle環境変数を設定するSolarisのapache2の場合、/usr/apache2/bin/envvars に環境変数を追加する。 /etc/init.d/から起動する場合は、apacheの起動スクリプトの最初でOracle環境変数を設定する。 1. Apache実行ユーザにOracle環境変数を与える。 2. Apache実行ユーザにOracleライブラリパスを与える。 この2つをenvvarsファイルに記述する。 /usr/apache2/bin/envvars ORACLE_BASE=/u01/app/oracle 「設定」と「export」 を1行にまとめず、2行に分けて書いている。(念のために) NLS_LANGは、/usr/local/lib/php.iniで指定しているmbstring.internal_encodingの文字コードと同じに設定する。
Oracle DatabaseがEUCでも、WebサイトをUTF-8で運用している場合は、UTF-8でそろえる。 /usr/local/lib/php.ini mbstring.internal_encoding = UTF-8 /usr/apache2/bin/envvars NLS_LANG=Japanese_Japan.UTF8
設定後は、Apache2を確実に停止してから、起動することを忘れずに行う。
■Apache2実行ユーザにOracle実行権を与える念のため、Apache2実行ユーザにOracle実行権を与えておいた。 Apache2の実行ユーザー webservd の情報を調べる。 # id -a webservd
Apache2の実行ユーザー webservd にOracle実行グループを追加した。 # usermod -G webservd,dba webservd
■テスト動作テスト用にinfo.phpを作成する。 <?php
Oracleへの接続テスト test.php を作成する。 <html> フィールドの指定は、first_nameではなく、FIRST_NAMEのように大文字で指定する。 たぶんフィールドを作ったときの指定なのかな...。
■ブラウザでアクセスするブラウザで、上記 test.php を実行したところ、 Warning: oci_connect() [function.oci-connect]: ORA-12154: TNS:could not resolve the connect identifier specified in /export/home/towns10/public_html/test.php というエラーが発生した。
oracleユーザーでコマンドラインでtest.phpを実行して原因を探る。 $ php /export/home/towns10/public_html/test.php
次に、Oracleのサイトの指示通り、実行してみる。 Oracle Database、PHP、ApacheのLinuxへのインストール より 注意: Oracle Database 10.2を使用している場合は、Oracleディレクトリに対するアクセス権を「nobody」に設定する必要があります。Oracle 10.2.0.2の場合は、これを設定するスクリプト$ORACLE_HOME/install/changePerm.shがあります。 $ $ORACLE_HOME/install/changePerm.sh
それでも ORA-12154 エラーが発生する...。 メーリングリスト「Miracle LinuxとOracle10gR2とPHPで環境構築」を参考に Apache の実行ユーザ webservd がアクセスできるように755へ変更する。 # chmod -R 755 /u01/app 相変わらず、エラーが表示される。
以下のページも参考に試してみた。
なんかメゲてきました。。。 Oracle Instant Client を使ってPHPをコンパイルを試そうかなぁ。。。 この記事読んだら、エラーは解消しない予感がする。
なんて、悩みながらイロイロ試しましたよ。 そして、ようやく解決!
■ORA-12154エラー対策リスナーで、名前を解決できないようなので、tnsnames.oraと同様の内容をPHP内に記述した。 <html>
Oracle PHP トラブルシューティング FAQ を地道に一個ずつチェックしてようやく解決しました。ありがとう〜!
■PHPのバージョンを隠す(オマケ作業)wgetされたときにPHPのバージョン情報を与えないようにする。 httpd.confのお尻に一行追加する。 ServerTokens ProductOnly
|
Solarisamazon広告英語お勧め教材! 英語の学校でも使っているのですが、1つのストーリーを3分で読めて、内容も面白く、もっと早く出会いたかった本です。 Apple好きで英語も勉強したいならこの一冊! ブログパーツ |