6.1 リリース

2006-05-08 にリリースアナウンスが出ていました。
安定性から 5.x はあんまり使おうという気になれなかったのですが、5.x から使えるようになった機能( gbde(4) など)も気になりますし、インストールしてみようかなぁと思案中です。
 
参考:
FreeBSD.org 本家
The FreeBSD Project(Japan)
FreeBSD 6.1-RELEASE登場(/.j)
 
ディスクパーティションの暗号化(FreeBSD.org)
gbde について。

Webサービス脆弱性検査ツール

Acunetix Web Vulnerability Scanner という有償製品が比較的高機能で使いやすそうです。
Hotscriptsから、フォーム入力なしでトライアル版がダウンロードできます。
 
トライアルは検査対象サイトが、Acunetix のテスト用サイトに限定されてしまうため、性能については試せませんが、使い勝手等は体感できます。

SERVER_NAME vs HTTP_HOST

$_SERVER[‘SERVER_NAME’] と $_SERVER[‘HTTP_HOST’] どっちを使うべきか。
 
SERVER_NAME Versus HTTP_HOST
 
結論から
– HTTP_HOST
単純に HTTP リクエストヘッダの host: そのままが格納される。省略されると空文字列になる。
– SERVER_NAME
HTTP リクエストヘッダで host: が指定されていれば、

htmlentities($_SERVER[‘HTTP_HOST’])

と等価になる。
host ヘッダが省略された場合はサーバデフォルト(Apache なら httpd.conf の ServerName)と等価になる。
 
とのことです。いずれにせよ、信頼できる値ではありませんね。
 
参考:
Chris Shiflett: SERVER_NAME Versus HTTP_HOST(blog.xole.net)

PHP で SHA-256 を使う

sha256,sha256_file関数を簡易実装している方がいました。
 
mhash()を利用すれば、さまざまなダイジェストが生成できるようです(ただし利用するには Mhash ライブラリを有効にする必要があります)。

$str = “あいうえお”;
$raw_hash = mhash(MHASH_SHA256, $str);
echo bin2hex($raw_hash);

 
もう一つの方法としてハッシュ拡張モジュールを利用する事もできます。

メールをパースするクラス

メールをハンドリングする上で、メールソースを解析するという処理を実装しようとしてクラスがないか探していて
Google で mail, email, parse, php, rfc822 とか検索していたのですがライセンス制限のないものが全然見付かりませんでした。
で、ふと PEAR を追ってみるとバッチリありました。
Mail_Mime でメールのエンコード、Mail_mimeDecode でメールのデコードが可能です。
 
Mail パッケージの Mail_mimeDecode を使うと次のようになります。

require_once(‘Mail/mimeDecode.php’);
$mail = ”;
// …
// ($mail にメールのソースを格納する処理)
// …
 
$params = array();
$params[‘include_bodies’] = true;
$params[‘decode_bodies’] = true;
$params[‘decode_headers’] = true;

$decoder = new Mail_mimeDecode($mail);
$structure = $decoder->decode($params);
var_dump($structure);

結果(一部省略. 文字コードは JIS):

object(stdClass)(5) {
  [“headers”]=>
  array(14) {
    [“from [email protected] tue may 9 20”]=>
    string(10) “21:03 2006”
    [“return-path”]=>
    string(23) “<[email protected]>”
    [“x-original-to”]=>
    string(14) “[email protected]
    [“delivered-to”]=>
    string(14) “[email protected]
    [“received”]=>
    array(3) { /* ..snip.. */ }
    [“date”]=>
    string(31) “Tue, 09 May 2006 20:20:59 +0900”
    [“from”]=>
    string(35) “”John” <[email protected]>”
    [“to”]=>
    string(14) “[email protected]
    [“message-id”]=>
    string(45) “<[email protected]>”
    [“subject”]=>
    string(19) “テスト”
    [“x-mailer”]=>
    string(17) “Cybozu Office 6.5”
    [“mime-version”]=>
    string(3) “1.0”
    [“content-type”]=>
    string(31) “text/plain; charset=iso-2022-jp”
    [“content-transfer-encoding”]=>
    string(4) “7bit”
  }
  [“ctype_primary”]=>
  string(4) “text”
  [“ctype_secondary”]=>
  string(5) “plain”
  [“ctype_parameters”]=>
  array(1) {
    [“charset”]=>
    string(11) “iso-2022-jp”
  }
  [“body”]=>
  string(495) “Hello, world!!

}

 
文字コードについては一切感知していないのか mb_internal_encoding の値にかかわらず, charset で指定されている通り JIS (iso-2022-jp) でした。
 
From: や To: の解析には Mail_RFC822::parseAddressList() という便利なメソッドも存在します。

require_once ‘Mail/RFC822.php’;
// $structure は Mail_mimeDecode::decode() の結果
$from = Mail_RFC822::parseAddressList($structure->headers[‘from’]);
echo $from[0]->mailbox.’@’.$from[0]->host;
// 結果: [email protected]

 
参考:
– Mail_mimeDecode – メールデコードの例(pear.php.net)

Windows XP でのタイマー処理あれこれ

ちょっと変わった利用方法ですが..工夫次第でできることの例です。
ここでは sleep というコマンドを利用しますが、標準では sleep というコマンドが存在しないため、Cygwin をインストールしてパスを通すか、ここ(Nifty フォーラム)にあるように次のコードを sleep.bat として c:\windows あたりに保存してください。

@echo off
REM Sleep.bat [秒数]
set /a wtime=(%1+0)*1000
echo WScript.Sleep %wtime% > tmp.vbs
cscript //NoLogo tmp.vbs
del tmp.vbs
set wtime=

 
– スリープタイマーをかけて Windows を自動終了させる
→ 一定時間後に Windows を自動シャットダウンする(以下は2時間後の例/2時間=7200秒)
※管理者である必要があります

sleep 7200 && shutdown -s

 
– 朝になったら目覚しがわりの音楽を再生する
→ 一定時間後に音楽 morning.mp3 を再生する(以下は8時間20分後の例)
※ .mp3 が再生ソフトに関連づけされていて、カレントディレクトリに morning.mp3 があることが前提。

sleep 30000 && morning.mp3

 
追記:
(2006-05-10) sleep について加筆修正しました。