月別アーカイブ: 6月 2011

postfixを利用する

 sendmailであるとかqmailとかと言ったSMTPDがあるけど、最近利用しているのはpostfixだ。
 開発環境で、全ての送信メール内容を確認したいという場面があるけど、postfixだとこれが簡単にできる。

yum install postfix
yum install cyrus-sasl

 ついでなのでSMTP Authも導入するため、Cyrus-saslも導入しておく。
>>/etc/postfix/main.cf

myhostname = wp.xn--ockc3f5a.com #ホスト名を設定
mydomain = xn--ockc3f5a.com #ドメインを設定
mydestination = wp.xn--ockc3f5a.com, xn--ockc3f5a.com, $myhostname, localhost.$mydomain, localhost #このホストが目的地であるドメインを設定
mynetworks = 127.0.0.0/8, 210.170.x.y #信頼するネットワークを設定(このアドレスから送信されたメールはリレー許可される)
home_mailbox = Maildir/ #メールをデフォルトのDovecotの位置に保管する
always_bcc = catch_all@wp.xn--ockc3f5a.com #これで全てのメールのBCCが送信される
smtpd_sasl_auth_enable = yes #SMTP Authを使用する
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,permit_auth_destination,reject_unauth_destination #メールの許可設定;信頼されるネットワーク、SMTP Authで認証されたユーザ、認証された宛先を許可し、認証されない宛先を拒否する
broken_sasl_auth_clients = yes #非標準のSMTP Authサポート通知を有効にする
smtpd_sasl_security_options = noanonymous #匿名ユーザからのメールを拒否する

 あとは、開発サーバで外にメールを送りたくない場合、

default_transport = local

 この設定をすると、a@yahoo.co.jp宛でもb@microsoft.com宛でも、a@localhostやb@localhostに配送しようとする(つまり、外へのメール送信が出来なくなる) そこで、

luser_relay =catch_all

でキャッチオールしてしまえばほとんどのメールを収集できる(存在するユーザ名宛のメールはそのユーザに配信される)
しかし、Postfixは不明なユーザ宛メールを拒否しようとするので

local_recipient_maps =

の設定でその拒否を解除する。

あとはサービス設定と起動

/sbin/chkconfig sendmail off
/sbin/chkconfig –add postfix
/etc/init.d/sendmail stop
/etc/init.d/postfix start

 こんな感じで、簡単な設定で色々使える。

(595)


カテゴリー: サーバ設定 | コメントをどうぞ

PHP – staticで機能をまとめる

 ある程度の規模のシステムでファンクション名を決めていると、ファンクション名が被ることがある。
 そう言うとき、機能クラスを作って、そのstaticメソッドとして定義することで、クラス名::メソッド名でコールすることが出来るのでちょっと便利。

 staticは、クラスをインスタンス化していなくても呼び出せる物で、変数とメソッドについて定義できる。

class ORDER{
public static $PAYMENT_METHODS = array(‘CARD’, ‘PAYPAL’, ‘CHECK’);
public static makeList($list){

}
}

class INVOICE{
public static makeList($list){

}
}

みたいな定義をしておくと、同じmakeList命令をORDERのmakeListとINVOICEのmakeListに明示して使い分けることが出来る。
非staticだと、

$order = new ORDER();
$order->makeList($order->PAYMENT_METHODS);
$invoice = new INVOICE();
$invoice->makeList($list);

のように、newを使ってインスタンスを作らなければならないけど、static宣言している場合は

ORDER::makeList(ORDER::$PAYMENT_METHODS);
INVOICE::makeList($list);

みたいに呼び出せるので、コードが楽になる。

(79)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP], PHP | コメントをどうぞ

AJAX関連でJSON – PHPとJAVAと

 AJAXで扱うデータを交換するのにJSONってのがある。
 簡単に言えばJavaScript形式の変数をどばっと流してしまうもので、なかなか便利。
 うちの会社ではPHPが主力言語なので、PHPでJSON変換処理をしているんだけど、DBの大きなデータをJSON通信しようとすると結構重い。 具体的には、4MB位ある配列を丸ごとJSON化したら3.5秒かかった。
 JSON化モジュールはとても簡潔に書かれていて、これ以上軽量化は出来そうにない。
 個人的には、OO主義者でJavaも結構いけるクチなので、JSONICを組み込んでTOMCAT5からJSPで組んでみたら、JSON化処理時間は400ミリ秒に短縮できた。
 Javaでは出力ストリームにGZipやDeflateフィルタを設定することで、データの転送自体も圧縮することが出来るのでこの用途にはJavaが適しているだろう。
 JSON化する前の変数を作り出す処理などを含めた全体で比較すると、PHPでは8秒台だったがJavaでは750ミリ秒と1/10以下まで短縮することが出来た。
 問題点としては、私以外の社内リソースにJavaが出来る人が居ないと言うところと、本番サーバに新たにJava環境を構築しなきゃならんのだけど、これだけの性能的アドバンテージがある状況では、Javaの採用が適しているのじゃないだろうか。

(449)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ