ジャンクなページ
何かのメモ。
自己責任でどうぞ。
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にて動作確認済。
#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; } 以下略