PHPセッションの階層分け
ユーザー数が増えてくると、セッションが多く貯まることになります。
Linuxのext3で1つのディレクトリにファイル数が100万件超えてくると、反応が遅くなってき、サイトの反応が悪くなります。
セッションの保存するディレクトリを階層的にわけることによって、反応を早くします。
展開したソースディレクトリのext/session/にmod_files.shというスクリプトがあります。
これが、階層を作るスクリプトです。
使い方
sh mod_files.sh [path/to/session] [階層数] [PHPヴァージョン]
具体的には
3階層でPHP5の場合
sh mod_files.sh /var/lib/php/session 3 5
という風に実行します。
あとは、php.ini等を変更します。
session.save_path = "3;/var/lib/php/session"
という風に、パスの前に階層をつけます。
個人的には3階層くらいで十分かなと思ってますが、
それはサイトによって違うので、セッションが多い
WEBサーバーは、階層を深くしたほうがいいですね。
ちなみに、階層分けをすると自動的にセッションが削除されません。
なので、自分でcron等で古いセッションを消す必要があります。
最終更新日が3日以上のセッションを削除するcron
# Delete old session
0 5 * * 0 find /var/lib/php/session -type f -mtime +2 -name 'sess_*' | xargs rm
階層分けが終わったら
session.gc_probability は0に設定しとくといいでしょう。
ガベージコレクションを動かす必要はないので。
タイ語の分かち書き
趣味でタイ語を習っているのですが、タイ語の特徴として文字の区切りがないことが1つある。
学習するに当たって、区切りがないため辞書を引くにも単語がどこからどこまでなのかよくわからないことが多々あるわけで。
タイ語の分かち書きソフトでも作ろうかな〜〜〜なんてずっと思ってたんですが、作業量が重いので妄想で終わらせてたわけで。
まぁそんなとき、たまたま分かち書きのことを調べてたら、タイ語の分かち書きソフトを見つけた。
swath = Smart Word Analysis for THai
ftp://linux.thai.net/pub/thailinux/software/swath
やっぱ分かち書きはコンピュータで言語扱いには必要ですね。
先人がやってくれています。車輪の再発明になるところでした。
ってことで、CentOS5にインストール
# wget ftp://linux.thai.net/pub/thailinux/software/swath/swath-0.3.4.tar.gz
# tar xvfz swath-0.3.4.tar.gz
# cd swath
# ./configure
# make
# make install
特に問題なくインストールできた。
タイ語の例文がないのでネットで適当に拾ってきて、入力してみる。
AISのサイトから引っ張ってきた。
$ swath < test.th
แล้วการใช้งานมือถือในทุกๆ| |วันของลูกค้าเอไอเอส| |จะอุ่นยิ่งขึ้นกว่าเดิม|
แทน| |คำขอบคุณที่อยู่เคียงข้างกัน| |เอไอเอส| |ให้คุณสะสมแต้มจากการใช้งานโทรศัพท์มือถือ*| |เมื่อสมัครเข้าร่วมโครงการ| |โดยุทุก| |25| |บาท| |รับ| |1| |แต้ม| |สะสมเพื่อ| |“แลก”| |ของรางวัลมากมาย| |และ| |“ลุ้น”| |ของรางวัลใหญ่ตลอดปีี|
แต้มพิเศษ| |ขอบคุณลูกค้าเอไอเอสที่รักกันมานาน|
สมัครภายใน| |31| |มี|.|ค|.| |52| |รับโบนัสเพิ่มพิเศษสูงสุด| |100| |คะแนน|
あら?分かち書きされてない・・・??
スペースのところで区切れているだけ・・・。
たぶん文字コード。swathがUTF8に対応してなさげ。
iconvでデータをtis620にエンコードして、swathにつっこみ、再度UTF8に戻してみる。
$ iconv -f utf8 -t tis-620 test.th | swath | iconv -f tis-620 -t utf8
iconv: 位置 602 で不正な入力シーケンスがありました
แล้ว|การ|ใช้|งาน|มือ|ถือ|ใน|ทุกๆ| |วัน|ของ|ลูกค้า|เอ|ไอ|เอส| |จะ|อุ่น|ยิ่ง|ขึ้น|กว่า|เดิม|
แทน| |คำ|ขอบคุณ|ที่อยู่|เคียงข้าง|กัน| |เอ|ไอ|เอส| |ให้|คุณ|สะสม|แต้ม|จาก|การ|ใช้|งาน|โทรศัพท์|มือ|ถือ|*| |เมื่อ|สมัคร|เข้า|ร่วม|โครงการ| |โดยุ|ทุก| |25| |บาท| |รับ| |1| |แต้ม| |สะสม|เพื่อ| |
iconvで一部失敗してるぽいけど、分かち書きされたみたい。
この分かち書き結果から、単語を引っ張ったらある程度の翻訳ツールみたいのができそう・・・。
でもタイ語って品詞分けが難しんですよね・・・。次は構造解析か?
つづく・・・かも。
*CentOS5でPostfixAdminをインストールした話
構成
- CentOS5.2 (x84_64)
- Postfix (CentosPlusのパッケージを使用)
- MySQL
- PostfixAdmin
- Courier-IMAP(tar.bzよりrpm作成)
※特に注釈がないかぎりCentOSのパッケージを使用
基本
基本は下記サイトを参考に構築。
http://cherry.usacho.jp/20070718.html
PostfixはMySQL対応バージョンがCentOSPlusにあるので、
yumでplusを有効にしてインストール。
Courier-IMAPも本サイトからtar.bzをもってきてRPMコンパイル
root# rpm -ta courier-authlib-0.62.2.tar.bz2
こんな感じで、courier-imapもコンパイル。
コンパイルのやり方などは他のサイト参考に。
はまった部分だけ
PostfixAdminのメールディレクトリ
PostfixAdminのメールディレクトリを
/var/virtual/[ドメイン名]/[ユーザ名]
という風になるように設定した。
(例)/var/virtual/example.com/sample@example.com/
このとき、Courier-IMAPからのメール取得する際に少しはまる。
authmysqlrcの設定で、SQLコマンドをほぼそのまま発行するようなので下記のようにした。
/etc/authlib/authmysqlrc
MYSQL_HOME_FIELD '/var/virtual'
MYSQL_MAILDIR_FIELD CONCAT(domain,'/',maildir)
こうすると、メールディレクトリの決定の際にdomain名とmaildirを合体してパスを作れる。
SASLAuthの設定
他のサイトなどを見ていると
/usr/lib/sasl2/smtpd.confのファイルを変更しろと書いている。
このファイルを編集して、テスト送信してもauthdaemon経由にならない・・・。
ここで2時間くらい悩む・・・。
で、海外のサイトで発見したのだが、64bitOSの場合はディレクトリが違うらしい・・・。
x86_64の場合は /usr/lib64/sasl2/smtpd.confとのこと。
/usr/lib64/sasl2
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/spool/authdaemon/socket
■
DreamweaverでHTMLを編集中、あるページだけどうしてもCSSが読み込まれないというか、
適用されていないというか、(スタイルが定義されていません)とCSSスタイルパネルに
表示されるわけです。
なんでだろー。ブラウザで確認するとちゃんとCSS適用されて表示されるから、
パスの間違いではないはずだし、他のページは同じCSSでちゃんと表示されてるし・・・
ってな感じでごにょごにょいじってたわけです。
わかりました。原因が。
このサイトはSmartyとDreamweaverを組み合わせてます。
で、Javascriptをページ内に書く場合、そのまま書くとSmartyの文法エラーになるんで、
{literal} 〜 {/literal}
で挟みます。
{literal}〜ってのは、その間の文字列はそのまま出力するというSmartyの命令です。
サンプルを書くとしたのような感じでした。
<html> <head> {literal} <script language="JavaScript"><!-- function check() { alert("テストです"); } // --> </script> {/literal} </head> <body> <a href="#" onclick="check();"> </body> </html>
この{literal}が悪さをしてたようで、ページ内(特にhead内?)にあると、
DreamweaverはCSSを読み込んでくれないようです。
ってことで、
- javascriptは別ファイルにする
- {literal}を無視させる
って対応策があると思われます。
{literal}を無視させるために、HTMLコメントにしてやります。
<!-- {literal} --> <script language="JavaScript"><!-- function check() { alert("テストです"); } // --> </script> <!-- {/literal} -->
でHTMLコメントにすると、Dreamweaverは無視してくれるし、
Smartyでも{literal}文として扱ってくれました。
ちゃんちゃん。
NokiaN95に機種変してみた。
User-Agentは下記の通り
Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95/20.0.273 Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413 Nokia/X02NK
とりあえず、Softbankっていう文字列がないので携帯サイトにことごとくアクセスできない・・・。
一応シリアルもはけるんやけど・・・。
Mozilla/5.0/SN352****2065**** (SymbianOS/9.2; U; Series60/3.1 NokiaN95/20.0.273 Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413 Nokia/X02NK
で、来週発売されるiPhoneのUser-Agentも調べてみた。
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
iPhoneって文字列で判定か。