アジャイル,Trac,オープンソースなどの話。認定スクラムマスター。Twitterは@ryuzee
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 オープンソース インストールマニアックス IIS Trac MySQL Perl Linux Agile・生産性向上 wordpress フリーソフト 自宅サーバ 書評 ブックマーク phpMyFaq TraM Plugin 早起き Delphi apache CakePHP Firefox Ruby eclipse セキュリティ プラグイン アジャイル mojavi Subversion Ajax/Web2.0 SQLServer Zope サーバ フレームワーク phpBB 仮想化 PostgreSQL OpenVZ scuttle CMS 文字化け 自宅 翻訳・日本語化 ApacheDS LDAP Excel 生産性向上 CodeIgniter XAMPP hacks taskfreak 修正 言語ファイル Ajax SBM ダウンロード HTML::FillInForm mod_security 情報共有