PHPセッションの階層分け

ユーザー数が増えてくると、セッションが多く貯まることになります。

Linuxext3で1つのディレクトリにファイル数が100万件超えてくると、反応が遅くなってき、サイトの反応が悪くなります。

セッションの保存するディレクトリを階層的にわけることによって、反応を早くします。

  1. PHPソースコードをダウンロード
  2. ソースコードの展開

展開したソースディレクトリの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に設定しとくといいでしょう。
ガベージコレクションを動かす必要はないので。

RHEL 6 beta

RHEL6のベータ版が出たので試しにインストールしてみた。

サーバー・ネットワークエンジニアなのでその当たりを中心に。

  1. MTAが標準でsendmailからpostfixになってる。ちょっとびっくり。
  2. php-mbstringがない(汗)これじゃー移行できない。
  3. system-config-hogehogeコマンドがなくなった。直接さわるか代替えのコマンドを使えとのこと。
  4. ファイルシステムの標準がext4に。xfsも使用可能。

パッケージのバージョンメモ


php-mbstringがないことが一番気になる・・・。

タイ語の分かち書き

趣味でタイ語を習っているのですが、タイ語の特徴として文字の区切りがないことが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をインストールした話

構成

※特に注釈がないかぎりCentOSのパッケージを使用

基本

基本は下記サイトを参考に構築。
http://cherry.usacho.jp/20070718.html

PostfixMySQL対応バージョンが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でちゃんと表示されてるし・・・
ってな感じでごにょごにょいじってたわけです。


わかりました。原因が。


このサイトはSmartyDreamweaverを組み合わせてます。

で、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内?)にあると、
DreamweaverCSSを読み込んでくれないようです。

ってことで、

  • javascriptは別ファイルにする
  • {literal}を無視させる

って対応策があると思われます。

{literal}を無視させるために、HTMLコメントにしてやります。

<!-- {literal} -->
<script language="JavaScript"><!-- 
function check() { alert("テストです"); } // -->
</script> 
<!-- {/literal} -->

でHTMLコメントにすると、Dreamweaverは無視してくれるし、

Smartyでも{literal}文として扱ってくれました。



ちゃんちゃん。

ソフトバンクのメール送信規制くらった

先日、携帯をソフトバンクX02NK(N95)にMNPで変更したんですよ。

メールアドレスの変更通知を友達に送るじゃないですか。


13:02〜13:26の間に、35件送りました。


その後からメールが送信できない・・・。

「送信規制中です(0901)」

お客様センターに電話した所、「24時間後から送れるようになります」だって・・・。

ソフトバンクのHPによると

MMS SoftBank 3G
24時間以内に500件以上のあて先に送信した場合、その後24時間規制
2008年4月改訂


500件も送ってないから!!!



さすがにこれは使えない携帯だ・・・。

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って文字列で判定か。