header image

携帯対応

QRコード

RING

人気ブログランキング

新着記事

phpBB2のメモ。

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

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

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

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

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

2007/05/20 09:49:42 PHP none Comments 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 Tags: ,

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

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

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

2007/05/16 06:40:23 PHP none Comments 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 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とかに日本語使っていないことを切に願うが・・・。
 ※似たようなこと考えて試している方発見
 

 

日記 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 情報共有


ads

読まなきゃモグリ