ma-100140 @ ウィキ PHP関係
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Ver5.2.10での不思議

今まで5.1系を使っていたのですが、本番環境をやり直すときによせばいいけどバージョンアップ。 そうすると不思議なことに今まで動いていたところがうまくいかない。

 define('MY_PHPLM_DIR',$d_root2 . '/phplayersmenu');
 require_once MY_PHPLM_DIR.'/lib/PHPLIB.php';

エラー内容は、PHPLIB.phpが見つからないんだって??
そんなはずないよね。いままで5.1系では動いていたんだから...

 define('MY_PHPLM_DIR',$d_root2 . '/phplayersmenu');
 require_once '/' . MY_PHPLM_DIR.'/lib/PHPLIB.php';

仕方ないので、こうやったら動きました。 何で、ルートをわざわざ改めて指定してあげるのかな?不思議。

LinuxサーバーからAIXのDB2へ接続する

今回はLinuxサーバーのPHPからAIX上にあるDB2への接続にチャレンジします。

  • Turbolinux Server 11 (Musasabi)1回目 ダメでした
    Kernel Level:           2.6.23-2
    Kernel Build Date:      #1 SMP Sun Oct 28 14:52:33 JST 2007
    Machine Type:           i686
    GLIBC version:  2.6.1
    DB2 v8.x (x86 for 2.6 kernels): libstdc++-.so.5 does not exist on this system.
    
  • CentOS release 4.8 (Final)
    Kernel Level:           2.6.9-89.EL
    Kernel Build Date:      #1 Mon Jun 22 12:19:40 EDT 2009
    Machine Type:           i686 
    GLIBC version:  2.3.4
    DB2 v8.x (x86 for 2.6 kernels): libstdc++.so.5 exists and is a link to  libstdc++.so.5.0.7
    

残念ながらCentOSでは自分でコンパイルしたApacheへセキュリティーの設定でうまくいかなかったために今後の使用をあきらめました。たぶん2度と使うことはない。丸3日嵌ってしまいました。

  • プロセスの SELinux セキュリティコンテキスト を見る
    パッケージの分 
    $ ps auxZ | grep httpd
    root:system_r:httpd_t           root     23929  0.0  2.3 20776 8900 ?         Ss   17:55   0:00 /usr/sbin/httpd -k start
    root:system_r:httpd_t           apache   23930  0.0  1.2 20776 4848 ?        S    17:55   0:00 /usr/sbin/httpd -k start
    root:system_r:httpd_t           apache   23931  0.0  1.1 20776 4348 ?        S    17:55   0:00 /usr/sbin/httpd -k start
    root:system_r:httpd_t           apache   23932  0.0  1.2 20776 4848 ?        S    17:55   0:00 /usr/sbin/httpd -k start
    root:system_r:httpd_t           apache   23933  0.0  1.2 20776 4812 ?        S    17:55   0:00 /usr/sbin/httpd -k start
    root:system_r:httpd_t           apache   23934  0.0  1.4 20776 5668 ?        S    17:55   0:00 /usr/sbin/httpd -k start
    root:system_r:httpd_t           apache   23935  0.0  1.3 20776 5128 ?        S    17:55   0:00 /usr/sbin/httpd -k start
    root:system_r:httpd_t           apache   23936  0.0  1.1 20776 4252 ?        S    17:55   0:00 /usr/sbin/httpd -k start
    root:system_r:httpd_t           apache   23937  0.0  1.1 20776 4244 ?        S    17:55   0:00 /usr/sbin/httpd -k start
    
    自分でコンパイルした分
    user_u:system_r:unconfined_t    admin    24055  0.0  0.1  6116  748 pts/1    S+   20:32   0:00 grep httpd
    $  ps auxZ | grep httpd
    root:system_r:unconfined_t      root     24096  0.9  3.0 34652 11768 ?       Ss   20:36   0:00 /www/bin/httpd
    root:system_r:unconfined_t      nobody   24097  0.0  2.2 34628 8752 ?        S    20:36   0:00 /www/bin/httpd
    root:system_r:unconfined_t      nobody   24098  0.0  2.2 34628 8752 ?        S    20:36   0:00 /www/bin/httpd
    root:system_r:unconfined_t      nobody   24099  0.0  2.2 34628 8752 ?        S    20:36   0:00 /www/bin/httpd
    root:system_r:unconfined_t      nobody   24100  0.0  2.2 34628 8752 ?        S    20:36   0:00 /www/bin/httpd
    root:system_r:unconfined_t      nobody   24101  0.0  2.2 34628 8752 ?        S    20:36   0:00 /www/bin/httpd
    root:system_r:unconfined_t      root     24103  0.0  0.1  4816  748 pts/1    S+   20:36   0:00 grep httpd
    
    apacheのユーザにしたとき
    $ ps auxZ | grep httpd
    root:system_r:unconfined_t      root     24111  2.2  3.0 34540 11764 ?       Ss   20:38   0:00 /www/bin/httpd
    root:system_r:unconfined_t      apache   24112  0.0  2.2 34516 8748 ?        S    20:38   0:00 /www/bin/httpd
    root:system_r:unconfined_t      apache   24113  0.0  2.2 34516 8748 ?        S    20:38   0:00 /www/bin/httpd
    root:system_r:unconfined_t      apache   24114  0.0  2.2 34516 8748 ?        S    20:38   0:00 /www/bin/httpd
    root:system_r:unconfined_t      apache   24115  0.0  2.2 34516 8748 ?        S    20:38   0:00 /www/bin/httpd
    root:system_r:unconfined_t      apache   24116  0.0  2.2 34516 8748 ?        S    20:38   0:00 /www/bin/httpd
    root:system_r:unconfined_t      root     24118  0.0  0.1  5624  748 pts/1    S+   20:38   0:00 grep httpd
    

unconfined_tになっているのが問題であることは推測できたけど、どこで設定するのやら... 80ポートを空けたりと色々大変でした。結局SELinuxは大嫌いになりました。分かり難い。だからセキュリティーなんだろうけど...普通の人には使わせないというポリシーだろう。

db2のセットアップ時に文字化け発生。そういえば前回失敗したCent OSはUTF-8だったよな。

# LANG=ja_JP.eucJP ./db2setup 

このOS幸先悪い。このコマンドでも文字化け。仕方ない英語モードで実施しよう。マニュアルも当てにならない。先が思いやられます。

Kernel Level:           2.6.16-0vl76.27
Kernel Build Date:      #1 SMP Tue Dec 18 23:38:48 JST 2007
Machine Type:           i686
GLIBC version:  2.3.4
DB2 v8.x (x86 for 2.6 kernels): libstdc++.so.5 exists and is a link to libstdc++.so.5.0.7

どうもこのOSもCent OSと同じで腐れているな。ファイアウォールなしでインストールしたのに、Apacheにアクセスできない。アクセスログをみても0バイト。完全にCentOSのときと同じ症状。ためしにiptablesを見ようとおもったが、無い。そうだろう何せファイアウォールなしでインストールしたんだから。何でだろうね。psコマンドで見てもちゃんとhttpdはある。しかしvnc使っての作業だったけど、何度も落ちる。こんなのはCentOSでも無かったな。やはりこのOSも使う気しなくなってきた。3連続はずれだ。時間の無駄だ。そのそもDB2がきちんとGLIBC2.6で動けば、こんな腐ったosと遊ばなくてすんだのに。さて次は何にすべきか... カーネル2.4版にしようか。これもSELinuxの亡霊か

やっとAIX上のDB2へ接続できました。感激です。

  • まとめ
  1. GUI環境で行った方が楽です。
  2. どうしてもCUIが好きな場合(私みたいに)は応答ファイルを利用してインストール
  3. 文字コード関係でエラーになったら、$LANG設定を確認します。
  • phpの再コンパイル

コンパイルオプションに以下をプラスして実行します。あとは通常の手順です。

--with-pdo-odbc=ibm-db2,/opt/IBM/db2/V8.1/ --with-unixODBC
  • apachectlに以下を追加
    #DB2 
    . /home/db2inst1/sqllib/db2profile
    LANG=ja_JP.eucJP
    export LANG
    
  • おまけ①

私の環境ではAIXのDB2(SJISで格納)⇒PHP(SJISで表示)のために、上記部分に

db2set DB2CODEPAGE="943"

を追加して、PHP側で文字コードの変換をしなくてもいいようにしています。

  • おまけ②

php.iniに

[pdo]
pdo_odbc.db2_instance_name ="/home/db2inst1/"

を記入するとエラーになります。Ver5.2.10
そういえば、Vien Linux 4.2ではphp.iniが無いのにちゃんと機能しています。この設定はしないほうがいいような気がします。