header image

Categories

FEED

  • goo RSSリーダーへ追加
  • Livedoorリーダーへ追加
  • はてなRSSへ追加
  • Googleへ追加
  • myyahooへ追加
  • feedpathへ追加
  • NewsGator Onlineへ追加
  • Bloglinesへ追加

携帯対応

QRコード

RING

人気ブログランキング



phpBB2のメモ。

  • phpBBで添付ファイルを投稿につけるには、File Attachment MODというモジュールを使えば可能である。但し、投稿したファイルは、ファイルシステム上に保存されてしまうため、複数のWebサーバで分散してサービスしている場合は、何らかの同期の仕掛けを作らないと利用不可。
    一応、DBにファイルを登録するものも探したが、とりあえずなさそうな感じ。自分で作るしかない。
  • phpBBでは自分の投稿にレスがついた場合などに通知する機能があるが、これはメールで行われる。
    メールを飛ばしたくなかったら、Integrated Toplistなどを使って最新の投稿があったトピックなどをトップページ側に表示することになる。
2007/05/25 06:46:24 PHP none Comments
add Hatena Bookmark Tags: ,

いまさらmojaviなわけですが(^^;

mojavijはデフォルトでは、Session情報をファイル保存するのだが、設定によって、PostgreSQLSessionStorageやMySQLSessionStorageといったクラスを使うことでデータベースにsessionを保存することが出来る。

しかし、PostgreSQLとMySQLには対応しているのだが、Microsoft SQLServerに対応したSessionStorageクラスが存在しない・・・。
仕方ないので以下のように対応した。

  1. MySQLDatabase.class.phpというファイルはSQLDatabaseというクラスを継承した、MySQLに接続するためのクラスであるが、こいつをコピーして、MSSQLDatabase.class.phpを作成。mysql_connect、mysql_pconnect、mysql_close、mysql_select_dbといった関数を全てmssql_*に置き換える。
  2. MySQLSessionStorageクラスをコピーしてMSSQLSessionStorageクラスを作る。中でsqlを発行しまくっているので、mysql_*をmssql_*に直す。さらにmysql_escape_stringはstr_replace関数に置き換える。またセッションデータを単純にSQLServerのカラムには入れられなさそうなので、前にやったようにbase64_encodeしてテキストデータとしてsessionデータを保存する。当然ながら復号の箇所も対応する。

結果、以下のような設定状態になる。

webapp/config/factories.ini

[storage]
        class = "MSSQLSessionStorage"
        param.db_table = "session"
        param.db_id_col = "id"
        param.db_data_col = "data"
        param.db_time_col = "time"
        param.session_name = "SID"

webapp/config/databases.ini

[databases]
        default = "Default"
    [Default]
        class = "MSSQLDatabase"
        param.user     = "sa"
        param.password = "****"
        param.database = "testdb"
        param.host     = "localhost"
        param.port     = "1433"

webapp/config/settings.ini

[.settings]
        USE_DATABASE = "On"

2007/05/24 00:06:55 PHP none Comments
add Hatena Bookmark Tags:

Microsoft SQL Server(筆者の環境はMSDEだけど)に対してPHPからテキスト型の書き込みをすると、何故か4096バイト目で切れる。
SQL Serverのテキスト型は2Gまでデータ保存可能なので、色々調べた。

結果、PHPの設定で

mssql.textlimit
mssql.textsize

の値を大きくすれば良い。 個人的にはphp.iniでの設定は環境依存の原因になるので、アプリ内でini_setするほうがすき。

ソースはこちら。

2007/05/23 08:54:29 日記 none Comments
add Hatena Bookmark

いままさに電車に乗っているわけだが、ストレスを溜めないように、以下に書き捨てておく。

横浜で席があいたので座ろうとしたら、ボックスシートの向かいの人がいきなり荷物を空席に投げ込み、遠くにいる連れを読んで座らせた。
これが老人なら別に良いが、座ったのは普通の中年女性。座ったあと本読んだりしている。

はぁ??朝のラッシュ時間に、それは反則だろ??
朝からえらいムカついた。。

と、書き捨てて少しすっきり。

2007/05/20 09:49:42 PHP none Comments
add Hatena Bookmark Tags: , ,

これはもうすごく簡単。

windowsの場合、まずPHPのモジュールで、extension=php_ldap.dllが有効になっているかどうか確認する。
(Linuxの場合はphp_ldap.so)

次にこんなスクリプトを動かす。

//ApacheDSに接続。標準は10389ポートなのでポート指定が必要
$ld = ldap_connect("127.0.0.1:10389");
ldap_set_option($ld, LDAP_OPT_PROTOCOL_VERSION, 3);

//ルートノードに管理者権限で接続
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";
    }
}

これを実行すると、以下のように戻ってくる(はず)

1 results
DN:cn=ryuzee,ou=develop,ou=groups,ou=system
e-mail:hogehoge@example.com

かなり簡単。

顧客環境では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である。
接続用の設定は下記の通りだ。
CORAL

あとは適当に自分の名前を加えるなり、なんなりすればよい。全てcnの追加でOK。
LDAPの基本はこちらを見れば分かりやすい。

2007/05/17 07:04:04 PHP none Comments
add Hatena Bookmark Tags: ,

どうにも分からんので、小手先技で。

・SQLServerのimageフィールドをtext型の変更する。
・バイナリデータを読み込み、内容をbase64_encodeする
・エンコードしたデータをテキストとしてSQLServerに登録する
・データを取り出した場合はbase64_decodeする

多分メールの添付ファイルとかを考えてもこれで間違いなさそう。

2007/05/16 06:40:23 PHP none Comments
add Hatena Bookmark Tags:

PHPを使ってSQLServerのimage型フィールドに値を保存しようとしているのだが、うまくいかない。

.NETの場合は@ITの記事にあるとおり、いったんバイト配列に変換して、後は普通に文字列同様に扱えば良い、ということだが、PHPの場合はどうなんだ?

バイナリ文字列ってどうバイト配列化するんだ???PHPの場合だけ分からん(w

C#なら

byte[] byteArray = Encoding.Unicode.GetBytes(str);

JAVAなら

byte[] byteArray = str.getBytes();

2007/05/13 21:14:48 PHP none Comments
add Hatena Bookmark Tags: , ,

いま仕事でMicrosoft SQL Server2000とPHPを利用したシステムを開発しているのだが、osqlおよびODBC経由ではデータベースに接続できるのにもかかわらず、Pear::DBやDB_DataObjectではデータベースに接続できず嵌っていた。

バージョンはPHP5.1.6である。

結論からすると、FAQで以下の通り設定する必要がある。

・php.iniにおいて、信頼関係接続を無効にしておく。(デフォルトではそうなっているはず)

mssql.secure_connection = Off

・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とかに日本語使っていないことを切に願うが・・・。
 ※似たようなこと考えて試している方発見
 

« 前の記事 


ads

Ryuzeeのお気に入り