2007年4月17日火曜日

PEAR::HTML_QuickFormについて色々

■リンク
addElementの第一引数で「link」というのが指定できる。下記のような感じ。
$form->addElement('link', "link_name", "link_label", 'http://www.yahoo.co.jp/', 'link_text', array("target"=>"_blank"));

これといって使い道は思い浮かばないですけど、一応メモしときます。
■unfreeze
よく使うfreezeのほかに、unfreezeもあるのを発見しました。
フォーム全体を凍結して、特定のフィールドだけ凍結解除、なんてことをやる場合は便利です。
なお、フォーム全体を凍結した後にhierselectフィールドをunfreezeすると、JavaScriptのonChangeが抜けてしまった状態でフォームが表示されるという問題もあるようです。こちらは解決法見つけられず。。
■複数選択セレクトメニュー(multiple select)

$DeptArray = array("1" => "営業部", "2" => "経理部", "3" => "人事部");
$form->addElement("select","user_dept","所属部署",$DeptArray);
$deptObj =& $form->getElement("user_dept");
$deptObj->setMultiple(true);

こんな感じで複数選択可能なセレクトメニューが使えます。
デフォルト値セットで値が複数ある場合は、カンマ区切りで値を渡せばいいみたいです。
■php4の場合は「&=」を使う
$deptObj =& $form->getElement("user_dept");

みたいな感じで、php4の場合「=&」を使わないダメです。(「参照渡し」って名前だったかな?)
いつもphp5で「=」だけで書いてるので、コピペとかするときによく間違えます。要注意

China Unicomからの大量アクセスを拒否

サーバー負荷が高くなっていたので、ログを調べてみたら
220.194.55.47

から大量のアクセスがあることがわかりました。ユーザーエージェントは
KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0

auの携帯?と思ったんですが、上記IPを調べてみると

inetnum: 220.192.0.0 - 220.207.255.255
netname: UNICOM
descr: China United Telecommunications Corporation
descr: No.133,Taiyun Building,Xidan North Street
descr: Xicheng District,Beijing,China
country: CN   → (中国)

となっています。
中国 China Unicom」でググってみると、KDDIとの技術協力うんぬんというページが見つかります。
なので一瞬「KDDIがUNICOMと共同で検索エンジンロボットのテストでもしているのかな?」と思ったんですが、だったらユーザーエージェントに何かメッセージが入ってると思うので、やっぱり偽装だろうという結論に至りました。
というわけでさっそくアクセス拒否。すぐに効果があらわれて、サーバー負荷も落ち着きました。

2007年4月12日木曜日

mod_rewriteでリダイレクト。ただし画像は対象から外す

以前、「mod_rewriteを使って特定のIPやホストからの接続の場合のみ、コンテンツを表示する」というのをやりました。
今回その条件に加えて「ただし画像(gif,jpg,png)は処理の対象から外す」というのを付け足しました。
こんな感じです。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg)$ [NC]
RewriteCond %{REMOTE_ADDR} !^192.168.1.$
RewriteCond %{REMOTE_ADDR} !^172.0.0.1$
RewriteRule .* ___maintenance.html

この設定の場合、飛ばし先が「___maintenance.html」になります。この「___maintenance.html」にて同一サーバー上の画像の呼び出しをしており、画像をリダイレクト対象から外す必要があったので、このような設定になりました。

2007年3月30日金曜日

mysqlでbigintを使う

現在担当している案件で、11桁の整数をデータベースに入力するという機能があります。
で、int型のフィールドに「12345678901」という数値をinsertすると、登録される値は「2147483647」になってしまう。
調べてみたら「2147483647」はint型の限界なので、bigint型を使う必要があることが分かりました。
以下のページに一覧表があって分かりやすいです。
http://www.javadrive.jp/mysql/datatype/index1.html

2007年3月17日土曜日

21-domainのBハウジングサービス(激安専用サーバー)

21-domainという、激安ドメインレジストラがあります。
http://21-domain.com/
ここはバリュードメインに乗り換える以前に利用していたことがありました。久しぶりにこのサイトを訪れたんですが、Bハウジングサービスというの専用サーバーサービスをやってることを知りました。
http://21-domain.com/html/m2011.html
実は家庭の事情で今年の12月に引越しする予定で、引越し後は現在使っている自宅サーバーが使えなくなってしまうのです。(※引越先のマンションは全戸強制的にJCOMプロバイダーを利用させられることになってます。JCOMは自宅サーバー禁止)
そんなわけで、12月までに安い専用サーバーを契約して移行を済ませておかなくてはいけません。
今のところ第一候補はさくらインターネットの専用サーバーサービス。
お値段は「初期¥29,800、月額¥6,800」です。
他にも安いところはないか探してはいるんですが、専用サーバーはどこも高い。
安くても¥9,800くらいなので検討の余地もほとんどないという状態。なので、さくらでほぼ決まりかな、、、と思っていました。
そこで偶然見つけたこのBハウジングサービス。
お値段は「初期¥5,980、月額¥5,980」。さくらを上回る安さだ!!
OSがWindowsかFreeBSDしか選べないという制限はあるものの、約¥1,000の差は大きい!これは一躍最有力候補になるか?!
・・・と思ったんですが、よくよく見てみると、、、
UPS経由による電源供給は月額1,000円プラスとなります。尚、本体無料貸出サーバではUPS経由により月額は6,980円となります。

とのこと。
結局のところ、さくらとあまり変わらない。初期費用は高いけれど実績を考えてるとさくらのほうがいいかな、、、と思っています。
省電力サーバーを持ち込めれば¥1,000のプラスはなくなるみたいですが、持ち込みだといろいろ面倒そう。まだ時間はあるので、じっくり調査&検討しようと思います。

LIKE検索より断然高速なお手軽日本語全文検索

http://www.tatamilab.jp/rnd/archives/000390.html
こんな手法があるそうです。
「全文検索=LIKEでやるもの」と当たり前のように思っていたので、このやり方は勉強になります。記事中に書かれているように「INSERT/UPDATE処理が遅くなる」という副作用があるのは注意が必要ですが。
ま、自分が作るアプリは小~中規模ばかりなので、LIKEで十分かも。
将来必要になるかもしれないので、念のためメモっておきます。

phpMyAdminの自動ログアウト時間を長くする

phpMyAdminをクッキー認証で使っていると、ログイン状態で何もしない状態がしばらく続くと自動でログアウトされる仕様になっています。この自動ログアウト時間、デフォルトでは1800秒、つまり30分に指定されています。
この30分という時間がなかなか微妙。コーディングをしている時などは30分くらいすぐ経過してしまうので、phpMyAdminでデータを操作する際にはいちいちログインしなおさないといけません。
なので、config.inc.phpに以下の行を追加して自動ログアウトになる時間を延ばしました。
$cfg['LoginCookieValidity'] = '18000';

上記の設定だと18000秒=300分=5時間で自動ログアウトとなります。
お好みで秒数を変えて使えるので、個々の環境にあわせて設定することができます。