Webコンサルタントの愚痴とアジャイル,生産性向上,Trac,オープンソースなどの与太話
phpBB2のメモ。
いまさらmojaviなわけですが(^^;
mojavijはデフォルトでは、Session情報をファイル保存するのだが、設定によって、PostgreSQLSessionStorageやMySQLSessionStorageといったクラスを使うことでデータベースにsessionを保存することが出来る。
しかし、PostgreSQLとMySQLには対応しているのだが、Microsoft SQLServerに対応したSessionStorageクラスが存在しない・・・。
仕方ないので以下のように対応した。
結果、以下のような設定状態になる。
webapp/config/factories.ini
webapp/config/databases.ini
webapp/config/settings.ini
Microsoft SQL Server(筆者の環境はMSDEだけど)に対してPHPからテキスト型の書き込みをすると、何故か4096バイト目で切れる。
SQL Serverのテキスト型は2Gまでデータ保存可能なので、色々調べた。
結果、PHPの設定で
の値を大きくすれば良い。 個人的にはphp.iniでの設定は環境依存の原因になるので、アプリ内でini_setするほうがすき。
いままさに電車に乗っているわけだが、ストレスを溜めないように、以下に書き捨てておく。
横浜で席があいたので座ろうとしたら、ボックスシートの向かいの人がいきなり荷物を空席に投げ込み、遠くにいる連れを読んで座らせた。
これが老人なら別に良いが、座ったのは普通の中年女性。座ったあと本読んだりしている。
はぁ??朝のラッシュ時間に、それは反則だろ??
朝からえらいムカついた。。
と、書き捨てて少しすっきり。
これはもうすごく簡単。
windowsの場合、まずPHPのモジュールで、extension=php_ldap.dllが有効になっているかどうか確認する。
(Linuxの場合はphp_ldap.so)
次にこんなスクリプトを動かす。
//ルートノードに管理者権限で接続
ldap_bind($ld, "uid=admin,ou=system", "secret");
//指定した内容で検索
$sres = ldap_search($ld, "ou=develop,ou=groups,ou=system", "cn=ryuzee");
$count = ldap_count_entries($ld, $sres);
if($count == 0) {
echo "No result";
} else {
echo $count . " results \n\n";
//エントリ内容をみんな出力
for($info = ldap_first_entry($ld, $sres); $info; $info = ldap_next_entry($ld, $info)) {
$dn = ldap_get_dn($ld, $info);
$attrs = ldap_get_attributes($ld, $info);
echo "DN:" . $dn ." \n\n";
echo "e-mail:" . $attrs["mail"][0] . " \n\n";
}
}
これを実行すると、以下のように戻ってくる(はず)
かなり簡単。
顧客環境ではActiveDirectoryがあることだし、どうせならLDAP対応しているアプリを探して色々検証しちまえ、ということでLDAP環境の構築をした。
とりあえず対象はローカルのWindowsXP端末。
Windows上で動くLDAPのプロダクトは2つ。
両方ともインストールしてみたが、どうもOpenLDAPの方は、ソケット周りのエラーメッセージが出ていて使えない。
そこでThe Apache Directory ProjectのApacheDSを使用してみた。
インストールは簡単でインストーラをダウンロードして実行するだけである。但し、JREのバージョンは1.5以上でないといけない。おいらの場合は1.4が入っていたのだが、インストール自体は何も問題なく進み、JREのバージョンについてもなんら警告されることが無かった。うまく動作しない場合はこれが犯人ということで・・・。
インストール後はWindowsのサービスとして起動させることになる。ポートは10389ポートでListenする。クライアントFW等を使っている場合は、このポートを通過させる必要がある。
後は接続試験だが、CoralDirectoryを使って接続すれば良い。
ApacheDSのデフォルトのBASE DNはou=systemで管理者アカウントはadmin、パスワードはsecretである。
接続用の設定は下記の通りだ。

あとは適当に自分の名前を加えるなり、なんなりすればよい。全てcnの追加でOK。
LDAPの基本はこちらを見れば分かりやすい。
どうにも分からんので、小手先技で。
・SQLServerのimageフィールドをtext型の変更する。
・バイナリデータを読み込み、内容をbase64_encodeする
・エンコードしたデータをテキストとしてSQLServerに登録する
・データを取り出した場合はbase64_decodeする
多分メールの添付ファイルとかを考えてもこれで間違いなさそう。
PHPを使ってSQLServerのimage型フィールドに値を保存しようとしているのだが、うまくいかない。
.NETの場合は@ITの記事にあるとおり、いったんバイト配列に変換して、後は普通に文字列同様に扱えば良い、ということだが、PHPの場合はどうなんだ?
バイナリ文字列ってどうバイト配列化するんだ???PHPの場合だけ分からん(w
C#なら
JAVAなら
いま仕事でMicrosoft SQL Server2000とPHPを利用したシステムを開発しているのだが、osqlおよびODBC経由ではデータベースに接続できるのにもかかわらず、Pear::DBやDB_DataObjectではデータベースに接続できず嵌っていた。
バージョンはPHP5.1.6である。
結論からすると、FAQで以下の通り設定する必要がある。
・php.iniにおいて、信頼関係接続を無効にしておく。(デフォルトではそうなっているはず)
・ntwdblib.dllのバージョンに注意。
2000.2.8.0だったのだが、このバージョンには問題がある。
http://webzila.com/から新しいバージョンのものをダウンロードする必要がある。
必要なバージョンは2000.80.194.0
ダウンロードしたファイルをXAMPP環境の三箇所に上書きすれば良い。
なお、本件はPHPの本家サイトで、マニュアルにも公開されている。
http://jp.php.net/manual/ja/function.mssql-connect.php#69118
を参照すること。
一連の解決までの流れがここに詳しい。
仕事でphpBBを使いそうな予感。一番メジャーだし。
以下来週に向けてのメモ。。
言語
・PHP4でもPHP5でも動作する
DB
・MySQL (3.22 以上)
・PostgreSQL 7.0.3 以上 (推奨は 7.1.x か 7.2.x)
・MS SQL Server (7 か 2000) #ODBC経由でも直接接続でも可
・MS Access (2000 か XP) #ODBC経由
認証
・MODを使うことでLDAP対応が可能
※ADのOUとかに日本語使っていないことを切に願うが・・・。
※似たようなこと考えて試している方発見
日記 PHP オープンソース Linux Trac Perl wordpress フリーソフト Agile 自宅サーバ phpMyFaq Plugin 書評 Delphi apache プラグイン Subversion アジャイル mojavi セキュリティ Ruby Firefox Ajax/Web2.0 eclipse サーバ Zope フレームワーク CakePHP 文字化け scuttle OpenVZ 自宅 phpBB CMS 翻訳・日本語化 Excel ApacheDS 生産性向上 仮想化 hacks CodeIgniter XAMPP LDAP SBM taskfreak Ajax 修正 言語ファイル mod_security ダウンロード HTML::FillInForm 情報共有 格安 メンテナンス 移転 アンケート レンタル PhpScheduleIt 翻訳 API