PHP + MnogoSearch について

– FreeBSD の ports で入れられた mnogosearch が気になったので調べてみた。
– PHP4, PHP5.0.x では configure オプションで –with-mnogosearch=/usr/local みたくすれば利用可能だが、PHP5.1 からは PECL に移動していた。また Windows では PHP での MnogoSearch は非対応とのこと。
<http://jp2.php.net/manual/en/ref.mnogosearch.php>

    Note: This extension has been moved to the PECL repository and is no longer bundled with PHP as of PHP 5.1.0.
    
    Note: This extension is not available on Windows platforms.

PHP5.0.x までのバージョンについては、PHPマニュアルの User Contributed Notes を見ると例がある。
 
PEAR の Search_Mnogosearch を使うと便利そう。
 
PHP5.1 ではメンテナンスされてないようで、PECL のパッケージ一覧(pecl.php.net)で見当たらなかった。
 
代替ライブラリは Namazu かな..

メール添付ファイルのデコード

– base64 エンコードされて改行区切りになったデータを受けてデコードして出力する。

$ php -r ‘ $buf = “”; while(!feof(STDIN)) $buf.= fgets(STDI
N); $buf = str_replace(“\r”,””,str_replace(“\n”,””,$buf)); echo base64_decode($buf); ‘ < /tmp/input.txt > /tmp/output.rtf

PHP でランダム文字列を生成

JavaScriptでランダムなパスワードを生成する の PHP 版

  
<?php
/**
 * ランダムな文字列を生成する。
 * @param int $nLengthRequired 必要な文字列長。省略すると 10 文字
 * @return String ランダムな文字列
 */
function getRandomString($nLengthRequired = 10){
    $sCharList = “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_”;
    $sRes = “”;
    for($i = 0; $i < $nLengthRequired; $i++)
        $sRes .= $sCharList[mt_rand(0, strlen($sCharList) – 1)];
    return $sRes;
}
// 使ってみる
echo getRandomString() . “\n”;
?>

PHP でメールするときの注意等

– 過去に書いたドキュメントを整理するため、整形してコピペ。内容は多分 2004-06 くらいのもの。
– mail関数と、そのラッパーであるmb_send_mail関数があるが、後者はオプションのヘッダ指定に無関係に、自動的に

MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

という3つのヘッダを挿入する(Content-Typeを明示的に指定していてもなお)。
– mail関数のデフォルトのヘッダーは
mail(‘foo@yyy.zz’,’title’,’message’);
として送信した場合、

Return-Path: <anonymous@local.host>
Delivered-To: foo@yyy.zz
Received: (qmail xxxxx invoked from network); 2 Apr 2004 15:13:40 +0900
Received: from unknown (HELO local.host) (xxx.xxx.xxx.xxx)
  by pcxxx.xxx.xxx.xxx.in-addr.foo with SMTP; 2 Apr 2004 15:13:40 +0900
Received: (qmail xxxxx invoked by uid 80); 2 Apr 2004 15:13:40 +0900
Date: 2 Apr 2004 15:13:40 +0900
Message-ID: <20040402061340.11671.qmail@local.host>
From: anonymous@local.host
To: foo@yyy.zz
Subject: title
 
message
 

のようになる。(Received:はもちろんmail関数がつけたものではない)
– MIME-Versionフィールドを指定する場合、第四引数でヘッダ指定する場合に改行は\r\nや直接の改行(SJISの場合CRLFになる)ではなく\nでなければならない。(MIME-Version:1.0を宣言した行以降は\rも\nも1つの行として認識されるため。
– PHPでHTMLメールを送るごく簡単な例)

sAddHeader = “MIME-Version: 1.0\n”
.”Content-Type: multipart/alternative;\n”
.”boundary=\”—-=_NextPart_000_0024_01C418A2.AA46C5F0\”\n”;
$sMessage = “This is a multi-part message in MIME format.”
.”\n\n——=_NextPart_000_0024_01C418A2.AA46C5F0\n”
.”Content-Type: text/plain; charset=ISO-2022-JP\n”
.”Content-Transfer-Encoding: 7bit\n\n”
.”プレーンテキストメールです\n”
.”\n\n——=_NextPart_000_0024_01C418A2.AA46C5F0\n”
.”Content-Type: text/html; charset=ISO-2022-JP\n”
.”Content-Transfer-Encoding: 7bit\n\n”
.”<font color=’red’>HTMLメールです。あ</font>いう<b>えお</b>\n”
.”\n\n——=_NextPart_000_0024_01C418A2.AA46C5F0–\n”;
//送信先メールアドレス等。
$sMailAddress = ‘foo@xxx.zz’;
$sTitle = ‘タイトル’;
if(mail($sMailAddress,$sTitle,$sMessage,$sAddHeader))
echo “sent successfully!\n”;
else
echo “sent failure”;