ジャンクなページ

何かのメモ。
自己責任でどうぞ。

2.4.2へアップグレードした際に取得したRSSが文字化けすることがある。
RSS取得周りの各ファイルの文字コードと改行コードが原因ぽい。
lib/include/simplepie.inc lib/include/Snoopy.class.php lib/include/PNE/SimplePie.phpをUTF-8、LF(\n)に統一。
Snoopy.class.phpの722〜728行目は
chr(228),chr(246),chr(252),chr(196),chr(214),chr(220),chr(223),
に書換えて設置でOK。のはず。
上の文字コードを文字化すると ä ö ü Ä Ö Ü ß
なんとも中途半端な…Ëやÿとかは要らんのだろうか?

OpenPNEを設置したサーバーが、携帯メール投稿をする場合に必要な
"|/usr/local/bin/php OPENPNE_DIR/bin/mail.php"
の設定を出来ない場合、POP3で受信して"OPENPNE_DIR/bin/mail.php"へ渡す方法。clara.zip(764B)
OpenPNE2.2.8/2.2.9/2.4.2にて動作を確認。

必要な物
OpenPNEが設置/動作している環境
config.phpで'MAIL_SERVER_DOMAIN'に指定したドメイン宛のメールをCatchAll機能などを使って、1アドレスで受信できる事
下記コードのPOP3サーバーの設定は、そのアドレスの設定にする

コード

<?php

require_once "mail.php";

// 受信メールサーバーの設定
// POP3サーバー
$host = "localhost";
// ユーザーID
$user = "user";
// パスワード
$pass = "pass";


$sock = fsockopen($host,110,$err,$errno,10) or exit("can't connect pop server");
$buf = fgets($sock, 512);
if(substr($buf, 0, 3) != '+OK') exit($buf);
$buf = sendcommand("USER $user");
$buf = sendcommand("PASS $pass");
$data = sendcommand("STAT");    //件数とサイズ取得
sscanf($data, '+OK %d %d', $num, $size);
if ($num == "0") {    //新着無し
    $buf = sendcommand("QUIT");
    fclose($sock);
    echo "no messege\n";
    exit;
}

for($i=1;$i<=$num;$i++) {
    $line = sendcommand("RETR $i");    //メッセージ取得
    $raw_mail = '';
    while (!ereg("^\.\r\n",$line)) {
    $line = fgets($sock,512);
    $raw_mail .= $line;
    }
    $data = sendcommand("DELE $i");    //メッセージ削除
    m_process_mail($raw_mail);
    echo "done\n";
}

$buf = sendcommand("QUIT");    //受信完了
fclose($sock);


function sendcommand($cmd) {
    global $sock;
    fputs($sock, $cmd."\r\n");
    $buf = fgets($sock, 512);
    if(substr($buf, 0, 3) == '+OK') {
        return $buf;
    } else {
        exit($buf);
    }
    return false;
}

?>

適当なファイル名で保存し、"OPENPNE_DIR/bin"に設置。cronで実行させる。
投稿がOpenPNEに反映されるまでに、最大でcronの実行間隔分の時間がかかるので、ユーザーにはその旨告知した方がいい。
(携帯キャリアやメールサーバーの状況によってはそれ以上掛かる場合もあり得る)

シェルスクリプトの例

#!/bin/sh

/usr/local/bin/php /virtual/account/bin/clara.php

exit

XREAにて動作確認済。

KENT-WEBで配布されている掲示板スクリプトへのBBQ導入
広告/spam投稿の殆どを弾ける筈。巻き添えで弾かれる場合もある。
#BBQここから
sub BBQ{
    my $BBQ = 0;

    if(gethostbyname(join(".",reverse(split(/\./,$ENV{'REMOTE_ADDR'}))).".niku.2ch.net") eq "\x7f\x00\x00\x02"){
        $BBQ = 1;
    }    #BBQリストに載っていれば 1
    if($BBQ){
        &error("アクセスを許可されていません");
    }

}
#BBQここまで

上記コードをsub axscheckの直前あたりに記述。&BBQ;を&axscheck;直前で呼び出し。

Joyful Note 1.x の場合
    &decode;
    &BBQ;
    &axscheck;
    if ($mode eq "howto") { &howto; }
    以下略
Joyful Note 2.x の場合
    &parse_form;
    &BBQ;
    &axscheck;
    if ($mode eq "howto") { &howto; }
    以下略

YY-BOARD 5.x の場合
    &decode;
    &BBQ;
    &axsCheck;
    if ($mode eq "dele") { &dele; }
    以下略;
YY-BOARD 6.x の場合
    &decode;
    &BBQ;
    &axsCheck;
    if ($mode eq "howto") { &howto; }
    以下略
他のスクリプトも同様