ppBlog Warning: LINE 1117 of utils.php: preg_match(): The /e modifier is no longer supported, use preg_replace_callback instead

ppBlog official

更新PINGサーバーの一覧を更新

category-icon

 こんにちは。皆さん、ブログを書いた際に、その更新情報を更新pingサーバーに送っていると思いますが、たくさん存在していたpingサーバーも盛衰があるようです。ppBlogの初期設定のままでは、少々古いping情報もあるので、2008年末時点で安定していると思われる最新の更新pingサーバーをまとめてみました。
PingサーバーPing送信先アドレス
BlogPeople http://www.blogpeople.net/ping/
Google ブログ検索 http://blogsearch.google.co.jp/ping/RPC2
Yahoo! ブログ検索 http://api.my.yahoo.co.jp/RPC2
Technorati http://rpc.technorati.jp/rpc/ping
はてなRSS http://r.hatena.ne.jp/rpc
ドリコムRSS http://ping.rss.drecom.jp/
PING.BLOGGERS.JP http://ping.bloggers.jp/rpc/
fc2ブログ http://ping.fc2.com/
Ask.jpブログ検索 http://ping.ask.jp/xmlrpc.m
Weblogs.com http://rpc.weblogs.com/RPC2
livedoor Reader http://rpc.reader.livedoor.com/ping
gooブロッグ http://blog.goo.ne.jp/XMLRPC

 また、これに合わせて、更新サーバー設定のスクリプトもアップデートしました。重複した更新サーバーをチェックするようにしたりとか。添付のping.inc.phpmodulesディレクトリに、xmlrpc.phpは、index.phpと同じディレクトリにアップすればOKです。

 尚、ppBlogでは、更新pingサーバーは、管理画面の「環境設定」→「更新サーバーの管理」からいくらでも追加できます。テキストエリアに特定の書式で貼り付ければ良いのですが、使いやすいように、以下にコピペ用を用意しました。これをテキストエリアに貼り付けて、更新ボタンを押せばOKです。なお、ping.inc.phpをアップデートしてから、追加するのを強くお勧めします。古いままだと、重複して登録してしまうので。その際は、直接、ownerディレクトリにあるping.ini.phpを編集しないといけません。

ppBlogコピペ用

BlogPeople|www.blogpeople.net/ping/|www.blogpeople.net/newblog.html
Google ブログ検索|blogsearch.google.co.jp/ping/RPC2|blogsearch.google.co.jp
Yahoo! ブログ検索|api.my.yahoo.co.jp/RPC2|
Technorati|rpc.technorati.jp/rpc/ping|technorati.jp/
はてなRSS|r.hatena.ne.jp/rpc|d.hatena.ne.jp/
ドリコムRSS|ping.rss.drecom.jp/|
PING.BLOGGERS.JP|ping.bloggers.jp/rpc/|ping.bloggers.jp/
fc2ブログ|ping.fc2.com/|
Ask.jp ブログ検索|ping.ask.jp/xmlrpc.m|
Weblogs.com|rpc.weblogs.com/RPC2|www.weblogs.com/
livedoor Reader|rpc.reader.livedoor.com/ping|reader.livedoor.com/
gooブロッグ|blog.goo.ne.jp/XMLRPC|blog.goo.ne.jp/index.php?fid=freshEntry
添付ファイル: xmlrpc.phpattachedIcon  ping.inc.phpattachedIcon 

— posted by martin at 10:17 pm   commentComment [1]  pingTrackBack [0]

ログイン試行過多をチェック

category-icon

 こんばんは。昨日に引き続き。

 ppBlogでは、現状、ログイン試行をチェックする機構は特に採り入れていません。特に、これまで不正ログインを食らったという報告もないようですし。しかしながら、やはり、不正ログインを試みようとする情報は、把握してても良いかなとは思いますので、そういう機能を付けてみました。目指したのは、

  • 3回続けてログインに失敗すると、管理者にメールで知らせる。
  • 6回、同じIPアドレスからログイン試行があって、いずれも失敗すると、そのIPアドレスがアクセス拒否リストに追加される。管理者にもその旨、通知する。

です。基本的には、admin.phpをいじるだけなのですが、IPアドレス毎にアクセス拒否を行う動作を検証中に、現行バージョンではこの機能が動いていないことを見つけました。この影響で、admin.phpに加えて、utils.phpも若干の修正があります。

admin.phpに関しては、331行目からの部分に以下の追記をしました。

  $loginf = OD."login.txt"; // このファイル(ownerディレクトリの中)にログイン失敗情報を記録する
  $ltime = time(); $ldate = date('Y-m-d@H:i:s', $ltime);
  if(is_file($loginf)){
   $loginfo = file($loginf); $lsize = count($loginfo);
   $ips = preg_grep("{.+$ip}", $loginfo); $ips = count($ips);
   if($ips > 5){
    $ban_ini_file = OD.'ban.ini.php';
    include($ban_ini_file); $hit = FALSE;
    foreach ($BAN_LIST as $i => $item){
     if(strpos($item, "$ip|0") || strpos($item, "$ip|1")){
      $BAN_LIST[$i] = "$ltime|$ip|1"; // アクセス拒否対象とする
      $hit = TRUE; break;
     }
    }
    if(!$hit) array_push($BAN_LIST, "$ltime|$ip|1"); // アクセス拒否IPリストに追加
    rewrite_ini($ban_ini_file, $BAN_LIST);
    if(trim(MAILTO) != ''){
     include_once('modules/mail.inc.php');
     $msg  = 'ログイン試行が頻発しているようで、とりあえずブロックしました。IPアドレスは '.$ip.NL;
     $msg .= 'アクセス自体を拒否してます。解除するには、管理画面→「IPコントロール」→「コメント・TB拒否」から。';
     @send_jp_mail('ppBlog::連続ログイン試行', $msg, '', MAILTO);
    }
    exit("ログイン試行過多でブロックされました。");
   }
   if($lsize > 1){
    list($time1,,$ip1) = explode("¥t", trim($loginfo[$lsize - 1]));
    list($time2,,$ip2) = explode("¥t", trim($loginfo[$lsize - 2]));
    if(($ip1 == $ip2 && $ip1 == $ip) && $ltime - $time1 < 30){
     if(trim(MAILTO) != ''){
      include_once('modules/mail.inc.php');
      @send_jp_mail('ppBlog::連続ログイン試行',
       '3回ログインに失敗したかログイン試行が頻発しているようです。IPアドレスは '.$ip.NL, '', MAILTO);
     }
     $loginfo[] = $ltime."¥t$ldate¥t$ip".NL;
     rewrite($loginf, array_unique($loginfo));
     exit("ログイン試行が頻発しているので管理者に知らせました。");
    }
   }
   $loginfo = array_slice($loginfo, 0, 29); // とりあえず30件ほどに
   $loginfo[] = $ltime."¥t$ldate¥t$ip".NL;
   rewrite($loginf, array_unique($loginfo));
  } else rewrite($loginf, $ltime."¥t$ldate¥t$ip".NL);

 ソースにあるように、ログインに失敗した時点で、ownerディレクトリにlogin.txtファイルが自動的に作成されます。最大30件を記録するようにしていますが、分かる方は適宜変えてもよいでしょう。

 ログインに失敗したIPアドレスは記録するようにしています。統べて6回ログインに失敗すると、とりあえずそのIPアドレスをアクセス拒否リストに追加します(404 Not Foundを返す)。これは、管理画面の「IPコントロール」から、その解除が可能です。もし、勘違いか何かで、管理者自身がアクセス拒否を食らう可能性もありますが、この際は、ブラウザから管理画面には入れないので、FTPソフトを使って、ownerディレクトリにあるban.ini.phpをダウンロード、自身のIPアドレスが含まれる行を削除して、再度アップすればOKです。

 普段、不正ログインを試みる対象なんて気にもしませんが、こういう機能が付いていても良いかなと思いました。この機能を実装するには、添付のutils.phpとadmin.phpを既存のやつと入れ替えるだけで良いです。

添付ファイル: utils.phpattachedIcon  admin.phpattachedIcon 

— posted by martin at 07:48 am   commentComment [7]  pingTrackBack [0]

マルチバイトを考慮したstr_replace関数

category-icon

 こんばんは。最近、めっきり寒くなってきました。ラボは基本的に中央暖房なんですが、古いせいか壊れていて温度計は14度ぐらい。冷え症の身には応えます。

 さて、ユーザーの方から、パスワードやIDを変更したタイミングでログが壊れるという報告がありました。こちらでは再現出来なかったんですが、調べたところ、ログの書き換えにマルチバイトに対応していないstr_replace関数を使っているのが原因かと思いますので、マルチバイトに対応したやつを考えてみました。PHPには、マルチバイトに対応した色んな関数が揃っているLink のですが、頻用するstr_replaceのマルチバイト版mb_str_replaceが(何故か)ありません。オンラインのPHPマニュアルには、ユーザー寄稿のメモが沢山載せてあって、色々と参考になります。この中に、mb_str_replace()があったので、それに若干修正を加えて以下のようなものを用意しました。

/* マルチバイトを考慮したstr_replace */
function my_str_replace($search, $replace, $target, $encoding = ENCODE){
 $notArray = !is_array($target) ? TRUE : FALSE;
 $target = $notArray ? array($target) : $target;
 $search_len = mb_strlen($search, $encoding);
 $replace_len = mb_strlen($replace, $encoding);
 foreach ($target as $i => $tar){
  $offset = mb_strpos($tar, $search);
  while ($offset !== FALSE){
   $tar = mb_substr($tar, 0, $offset).$replace.mb_substr($tar, $offset + $search_len);
   $offset = mb_strpos($tar, $search, $offset + $replace_len);
  }
  $target[$i] = $tar;
 }
 return $notArray ? $target[0] : $target;
}

 これで、str_replace関数と大体似たような挙動をしてくれますが、本家str_replaceと違う点は、引数(ひきすう)の$search$replaceに配列を指定出来ないことです。なので配列に対応した関数を用意しましょう。上記の関数を使います。

/*
 str_replace関数のマルチバイト版
 上記 my_str_replace()が必要
*/
function mb_str_replace($search, $replace, $target){
 if(is_array($search)){ // $searchが配列なら
  if(!is_array($replace)) $replace = array($replace);
  foreach ($search as $i => $needle){
   $rep = isset($replace[$i]) ? $replace[$i] : $replace[0];
   $target = my_str_replace($needle, $rep, $target);
  }
  return $target;
 } else return my_str_replace($search, $replace, $target); // $searchが配列でないとき
}

これを使ったサンプルをば。全角空白を□(四角)に、「空白」という文字を「四角」に置換します。

$target = " おか機 ←全角空白です。";
$search = array(' ', '空白');
$replace = array('□', '四角');
$result = mb_str_replace($search, $replace, $target);

var_dump($result); // これで結果を出力

これの結果は、以下の通り。パフォーマンスもそんなに悪くないと思います。

string(39) "□おか機□←全角四角です。"

これの修正を施したutils_admin.phpの最新版を添付しておきます。replace_log_by_target()関数界隈が変わっています。

添付ファイル: utilsadmin.phpattachedIcon 

— posted by martin at 05:19 am   commentComment [0]  pingTrackBack [0]

差分です

category-icon

 こんばんは。もう年の瀬もすぐそこですね。相変わらず時が経つのは早いものです。

 さて、前回のアップデートで、1900年代の古い記事に画像が含まれる場合、その時系列処理がうまく行ってなかったのを修正したつもりでしたが、不十分でしたので、その差分を添付しておきます(upload.php, utils_admin.php, modules/mrss.inc.phpが該当)。ついでに、画像ポップアップの表示位置の微調整も(js/lib.js)。それぞれ既存のファイルを上書きすればOKです。

 コメントやフォーラムの方で、携帯向けのmoby.phpについて不具合の報告がありますが、今のところこちらでは確認できないので、これに関しては追って報告したいと思います。

 後、basicテーマのtemplate.phpのヘッダー部分にある

<span>Powerful Personal-publishing Tool</span>

<span>Powerful Perspnal-publishing Tool</span>

となっています。綴りのミスですf(--;

添付ファイル: DIFF081110.zipattachedIcon 

— posted by martin at 04:10 am   commentComment [4]  pingTrackBack [0]

差分アップデート

category-icon

 こんばんは。ちょっと間が空いてしまいましたが、いくつか不具合がありましたので差分アップデートです。10/16配布版からの差分を添付しておきます。修正点は、以下の通り。

  • 2000年以前の記事に画像を付けると、画像ギャラリーにて、その古いはずの画像が先頭に表示されることへの対応。古い記事だとUIDとして使用しているUNIXのタイムスタンプが10桁ではなくて9桁になりますが、その影響で画像データベースの日付ソートがうまく動いていないのを修正しました。後、ついでにですが、feedsディレクトリにMedia RSSの出力ファイルがあれば、画像データベースを更新したタイミングで自動的にそのRSSファイルも更新するようにしました。これまでは、管理画面から手動で更新する必要があったので。
  • コメントの画像認証に失敗すると、コメントのない記事でもコメント数が1と表示されていたのを修正。ついでに、これまでは画像認証に失敗すると、折角書き込んだコメントも消えてしまい再現不可でしたが(Ajax経由でコメントフォームを表示した場合とか)、失敗した際は、その画面にテキストエリアを表示して、そこに投稿したコメントを表示、コピペして再利用できるようにしました。
  • オンタイム投稿に関するeditor.jsのバグ修正。editor.jsは、圧縮前のソースに戻したのですが、その際に以前修正していた箇所も戻っていました。。それへの対応です。
  • ポップアップ画像の挙動の修正。拡大画像があるときは、ポップアップ表示になりますが、まずはブラウザ画面にフィットするように表示されます。更に画像サイズが大きい場合は、拡大アイコンがついて、更に拡大できます。これは従来の実装どおりですが、2段階拡大の際に、元の画像サイズを考慮して、画像左上をブラウザの左上端にするか、画像表示位置での拡大にするかの挙動を修正。

ってところです。結構冷え込んできましたが、手洗いうがいを忘れず元気に過ごしましょう。

添付ファイル: DIFF081030.zipattachedIcon 

— posted by martin at 11:12 am   commentComment [7]  pingTrackBack [0]

T: Y: ALL: Online:
Created in 0.0046 sec.
prev
2024.3
next
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31