LinuxCachéODBCクライアント

数年前、連邦政府の重要な大規模な医療センターである顧客は、情報キオスクに対応するソフトウェアの開発を指示しました。 外見的には、キオスクは支払い端末に似ており(請求書受理者なしでのみ)、その主な機能は、その名前が示すように、医師の予約のスケジュール、サービス、費用などのさまざまな情報を患者に提供することです。

明らかな理由から、キオスクは単純化されたユーザーインターフェイスを開発する必要があり、それをWebアプリケーションとして実装することにしました。 PHPに自信のある経験豊富なWebプログラマーのスタッフがいるので、医療システムのデータベースとの接続を整理して、PHPの作成を(スピードのために)委託することにしました。 インタラクションの3つのオプションを検討しました。

Webプログラマーは彼らの観点から最も簡単なオプションとしてODBCを好み、キオスクのアルファ版はすぐに日の目を見ました。 しかし、すぐに明らかになりました(サプライズ!)PHPコードは、開発者と同じようにWindowsでは動作しませんが、Linuxでは、その年にWindows 2008プラットフォームで顧客が医療システムを操作していました。トライアド(Linux-CachéODBCドライバー-php5)のすべてのメンバーがいくらか努力をしました。 この記事では、一連のアクションをスケッチの形で記録しました。



ODBCドライバーをインストールする



これは、いくつかの方法、つまり次の方法で実行できます。

最後のオプションは、.tar.gzディストリビューションとその完全なDVDバージョン、および個別のファイルとして配布されるCachéODBCドライバディストリビューションの両方から実行できるため、最も実用的な方法として以下で説明します。 ODBCドライバーCaché2008.1および2009.1。を使用して、Ubuntu 9.10およびFedora 8でテスト済み。

UNIX用のCachéディストリビューションでDVDをマウントし、ODBCディストリビューションのあるディレクトリに移動します。

sudo mount /dev/dvd /media
      
      





ディストリビューションがDVDではなく、.tar.gzファイル(cache-2009.1.2.602-lnxrhx64.tar.gzなど)の形式である場合は、どこかで解凍します。 さらに、配布バリアントに依存しません。 ドライバーをインストールするためのフォルダーを作成します(快適な場所)。 $フォルダーで表します。

 mkdir $folder
      
      





配布キットでプラットフォームのドライバーを見つけます。

 cd /media/dist/ODBC
      
      





x86_x64がある場合は、ODBC-lnxrhx64.tar.gzを選択し、x86_x32の場合はODBC-lnxrhx86.tar.gzを選択します。 アーカイブを選択した$フォルダーにコピーして解凍し、インストーラーを実行します。 インストールは同じフォルダで行われ、質問はありません。

 cd $folder tar -xvf ODBC-lnxrhx86.tar.gz ./ODBCinstall
      
      





データソースの構成



次に、mgrに移動します

 cd $folder/mgr
      
      





データソースの説明セクションでドライバー、ホスト、ポート(および場合によってはパスワード)の定義を変更して、cacheodbc.iniファイルを編集します。

 [Samples] Driver = $folder/bin/libcacheodbc.so Description = Cache ODBC driver Host = IP-  DNS-  Caché Namespace = SAMPLES UID = _SYSTEM Password = SYS ( Caché    ,   ,   ) Port = TCP-  Caché ( 1972)
      
      





ドライバーとサンプルデータソースを確認するには、次を実行します。

 cd $folder/dev/odbc/samples/select ./select.sh #  select   Samples.Person
      
      





ここで小さなコメントが適切です。 インストール後、CachéODBC for Linuxドライバーは、libcacheodbc.so(8ビット)とlibcacheodbciw.so(Unicode)の2つの形で表示されます。 条件では、データソース(Cachéインストール)とクライアント(phpアプリケーション)の両方が8ビット(CP1251エンコード)であったため、以下では8ビットバージョンのドライバーについてのみ説明します。



apache2 / php5からのCachéODBCデータソース(DSN)の操作



ローカライズCP1251の設定


ドライバーの8ビットバージョンを使用する場合、CachéODBCによって返される結果セットには、常にCP1251のコーディングがあります(Cachéインストールタイプに関係なく、8ビット(RUW8ローカリゼーション)またはUnicode(RUSW)です)。 アプリケーションデータに多言語が出現することは予想されていなかったため、これは非常に適していました。 Linuxに適切なローカライズをインストールすることだけが必要でした。 たとえば、Ubuntu 9.10では、これは次のように行われます。

 sudo locale-gen ru_RU.CP1251 locale -a | grep 1251
      
      





ローカライズのリストに表示されます:

 ru_RU.cp1251
      
      





RedHatのようなディストリビューション(Fedora Core 8、CentOS 5.xでテスト済み)では、ローカライズは次のように設定されます。

 sudo localedef --no-archive -c -f CP1251 -i ru_RU ru_RU.CP1251
      
      





ru_RU.cp1251の確認も同様に行われます。

 locale -a | grep 1251
      
      





さらに、PHPからDSNにアクセスできるように、ODBCマネージャーに登録する必要があります。 最もよく知られているのは、iodbcとunixodbcの2つです。 前者は、8ビットとUnicodeの両方のバージョンのCachéODBCドライバーを使用できるため、より汎用性があります。 2つ目はより広く、インストールが簡単ですが、(Cachéの場合)8ビットのみがサポートされています。 これは私たちにとって追加の制限ではなかったので、unixodbcが基礎として採用されました。 以下は、Ubuntu 9.10でのインストールの説明です。



ODBC Unixodbc Managerのインストール(Ubuntu 9.10上)


この手法はru.php.net/manual/en/function.odbc-connect.phpから借用しています 。 つまり、インストール:

 sudo apt-get install <->
      
      





以下のパッケージ:

 apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-php5 odbcinst1debian1 php5 php5-cli php5-common php5-odbc unixodbc
      
      





次に、Apacheを再起動します。

 sudo /etc/init.d/apache2 restart
      
      





unixodbcにドライバーとDSNCachéODBCを登録する


CachéODBCが$フォルダにインストールされたことを思い出して、以下を実行します。

 cd $folder/dev/odbc/redist/unixodbc
      
      





odbcinst_template.iniをodbcinst.iniにコピーし、このファイルにドライバーパス($ folder / bin / libcacheodbc.so)を2回書き込みます。 odbc.iniのodbc_template.iniをコピーし、このファイルにデータソースに対応するIP、ポート、ネームスペース、UID、およびパスワードを書き込みます。 複数ある場合は、DSNごとに繰り返します。 テストでは、「データソースの構成」セクションと同じパラメーターを使用してサンプルソースを作成するのが理にかなっています(その調達はodbc_template.iniにあります)。 また、[samples]セクションをコピーしてodbc.iniに新しいセクションを追加することにより、アプリケーション領域(QMSと呼びます)をターゲットとするDSNを作成します。 リージョンが呼び出されたときにセクションに名前を付け、変更します-サンプルに関して-ただ1つのパラメーター:

 [QMS] ... Namespace = QMS
      
      





すべてのDSNは、単一のodbc.iniファイルに記述できます。

Host、Namespace、Port、UID、およびPasswordの使用値は現実に対応している必要があります。つまり、これらの詳細からテーブルおよび/またはストアドプロシージャを含むCachéエリアにアクセスできる必要があります。 検証方法は、もちろん、保存されているデータの種類によって異なります。 %Service_Bindingsサービスが、Cachéで認証なしのログインを許可する場合、UIDおよびパスワードの詳細を空のままにすることができます(これらのフィールドは両方とも必須です)。 Cacheの一部のバージョンでは、odbc_template.iniの例でスーパーユーザー_systemに誤ったパスワード値を設定します。これは、Cachéで最低限のセキュリティを選択するときのデフォルト値とは異なります(ヒント:パスワードでは大文字と小文字が区別されます)。 さらに、Caché管理者はパスワードを変更できます。 最後に、DSNにユーザー名/パスワードを保存することは安全ではないため、テスト中にのみ保存することをお勧めします。 操作中は、ODBC経由で接続を確立するときに、それらをphpアプリケーションに「縫い付け」てサーバーに転送することをお勧めします。

次に、ドライバーと使用可能なすべてのDSNを登録します。

 sudo odbcinst -i -d -f odbcinst.ini sudo odbcinst -i -s -l -f odbc.ini
      
      





登録後、対応するエントリが/etc/odbc.iniおよび/etc/odbcinst.iniファイルに表示されます。



PHPでのテスト


すべてを正しく行い、SAMPLESデータソースを記述した場合、CachéODBCドライバーと共にインストールされた$ folder / dev / odbc / samples / php / sample.phpの例は機能します。 ロシア語の何かを試したい(そして最終的に開発のテストを開始したい)場合は、現在のローカリゼーションCP1251をphpコードの先頭近くに挿入することを忘れないでください。

 echo setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
      
      







おわりに



最後に、ソリューションの一般的なアーキテクチャに関するいくつかの言葉(キオスクのブラウザ-phpアプリケーション-Cachéデータベース)。 私たちの場合、Web開発者とCachéアプリケーションプログラマの間の作業分担を簡素化し、Web開発者にとって最も使いやすく快適な環境を維持しながら、Web開発者の作業を楽にしました。 同時に、もちろん、直接的な対話(クライアント上のブラウザ-Cachéのアプリケーションコード)は、パフォーマンスと構成の容易さの両方の面でより効果的であることを理解しました。 この理解は長年にわたって強化されただけであり、当社の医療システムで完全に機能するウェブインターフェースの作成に反映されました。

それでも、CachéへのODBCアクセスは、特定の「生態学的ニッチ」を依然として占有しています。




All Articles