アプリ版:「スタンプのみでお礼する」機能のリリースについて

AS400(System i)で動作している基幹システムを管理している者です。

WindowsServer上のphpで動作するWebアプリを使って、AS400のデータを照会し、PCにDownloadする処理を作ろうと思っているのですが、AS400へのアクセスができずに困っています。

具体的には
Fatal error: Call to undefined function db2_connect() in C:\Inetpub\wwwroot\........php on line 3
というようなエラーです。

JDBCドライバはjt400.jarを同じWindowsServer上に置き、環境変数に
set CLASSPATH=%CLASSPATH%;(jt400.jarの置いてあるフォルダ)
と設定してあります。

あるいはWindowsServerのphpではdb2関数は何等かの方法で追加インストールする必要があるのでしょうか?
IBMに問い合わせても、JDBCドライバに関しては自社製品でないせいもあり、全く教えてくれませんので、経験者の方のお知恵を拝借したくお願い致します。

A 回答 (2件)

phpからJDBCドライバーは使えんぞなもし(ひょっとしたらそういうエクステンションがあるのかも知れないけど)。



phpではデータベースに対する接続はDBMSごとにエクステンションというもので管理している。
エクステンションというのは、phpのスクリプトから呼び出せる関数を増やしてくれる仕組みだ。
現在DB2エクステンションが登録されていないためにdb2_connectという関数が未定義になっている訳だ。

で、エクステンションの設定はphp.iniで行う。
参考URLを二つほど紹介しておきましょう。
http://www.php.net/manual/ja/book.ibm-db2.php
http://pecl.php.net/package/ibm_db2

いっそのことIBM DB2 ODBCドライバーを入手してWindows上でODBCによる接続設定を行い、phpからはODBCブリッジを利用して接続するという方が楽かも。もちろんODBCの制限に引っ張られるけど。

この回答への補足

補足します。

JDBCではなく、ODBCドライバを使ったら、難なく接続できました。
ただし、phpのdb2関数ではなく、odbc関数を使う形になります。
拡張モジュールをインストールしなくても標準で使えました。
db2関数を使った場合とのレスポンス比較は判りませんが、取りあえず繋がるには繋がりましたのでこれで作り込んでみたいと思います。
両方ためされた方がおられましたら、情報頂けるとありがたいです。

補足日時:2014/07/09 10:05
    • good
    • 0
この回答へのお礼

anmochi コメント有難うございました。

JDBCは使えないんですか...
IBMのアンサーラインではJDBCドライバか、IBM DB2 Connectを使えということを言っていました。前者はIBM製品ではないので後者のほうを薦めていました。
通信の問題もエクステンションが解決してくれるのでしょうか?

でもこれはプロトコルでいうと下層の話だと思いますので、このエラーは関数がphpに実装されていないというエラーのようなので、教えて頂いた拡張モジュールをインストールする必要はあるんですね。
コンパイルされたDLLが無いようなので、コンパイルするのが私にはハードルが高そうですが調べてみます。

どうも有り難うございました。

お礼日時:2014/07/09 09:15

> IBMのアンサーラインではJDBCドライバか、IBM DB2 Connectを使えということを言っていました。


> 前者はIBM製品ではないので後者のほうを薦めていました。
> 通信の問題もエクステンションが解決してくれるのでしょうか?
ノー、通信に責任を持つのはIBM DB2 Connectの仕事。
IBM DB2エクステンションはPHPとIBM DB2 Connectの橋渡しをするだけ。
しかしながら、IBM DB2 Connectって管理ツールじゃないですか?
IBM Data Server Clientというのがあればいいんじゃなかろうか。
いや、私も開発はJDBCでしかやったこと無いので正確なツール名は分からないのだが、

とにもかくにも、まずIBM DB2サーバーとIBM DB2クライアントがあって、例のエクステンションは
IBM DB2クライアントの機能をPHPから直接呼び出せるようにするためのいわばラッパーなのです。

なので、まずそのWindowsサーバーにJDBCじゃないIBM DB2クライアントを入れるのが先決。
ODBCで接続できているという事は既に入っているはず(DB2 ODBCドライバーもODBCに対してDB2クライアントの機能を提供するもの)なので、誰かにエクステンションをコンパイルしてもらうだけでdb2_connect系が使えるようになるはずですよ。
    • good
    • 0
この回答へのお礼

コメント有難うございました。

お恥ずかしいですが、コンパイルの仕方もよく判っていないので安直なODBCのほうを選びました。勉強になりました。どうも有難うございます。

お礼日時:2014/07/23 09:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!