トラックバック保留機能

トラックバックを受信しても、管理人が許可するまで保留状態にする改造です。

この機能を使えばトラックバックを受信しても、トラックバック送信元の内容を確かめてから表示を許可するか削除するか決める事が出来ます。

最近はアダルトサイトや詐欺サイトへの誘導を目的にしたトラックバックも多発しており、そのようなスパムから閲覧者の身を守るのが目的です。

説明

改造方法の前に簡単に仕組みを説明します。

トラックバックを受信すると、その内容がログに記録されます。
この時スクリプト側で「保留状態」という情報自動的に追加します。

管理人が管理画面で「保留状態」を解除すると、「許可済み状態」になります。

ブログ表示スクリプト(index.php)はトラックバックのログを読み込んだ時、トラックバックが「保留状態」なら概要を伏せます。「許可済み」なら概要を表示します。

Blogn(ぶろぐん)v1.9.2 の場合

トラックバックを受信したら保留状態にする

tb.php 58行目〜(↓3-4行目は実際は1行で書かれています)

$t_time = gmdate("Hi", time()+TIMEZONE);
$status = 1;
$trk = $no."<>".$blog_name."<>".$title."<>".$url."<>".$excerpt."<>".$t_date.
"<>".$t_time."<>".$ip_addr."<>".$user_agant."<>".$status."\r\n";
$trkname = "trk".substr($t_date,0,6).".dat";

保留解除機能を付ける

まずトラックバックの状態(保留/許可済み)をログから読み出します。
admin.php 2660行目

list($t_eid, $blog_name, $t_title, $t_url, $t_excerpt, $t_date, $t_time, $ip_addr, $user_agent, $status) = explode("<>", $trkval);

次に保留解除ボタンをつけます。
admin.php 2677行目〜

<tr><td bgcolor="#82BE7D" align="center">ブラウザ</td><td colspan="4">'.$user_agent.'</td></tr>
</table><br>
';
$cnt++;

上の青い文字列を赤い文字列に書き換えてください。

<tr><td bgcolor="#82BE7D" align="center">ブラウザ</td><td colspan="4">'.$user_agent.'</td></tr>
<tr><td bgcolor="#82BE7D" align="center">状態</td><td colspan="4">
';
$accept = PHP_SELF.'?mode=list&action=tb_accept&page='.$page.'&eid='.$trackback_eid.'&toid='.$cnt.'#trackback';
if ($status == 1) {
  echo '<a href='.$accept.'>保留を解除する</a></td></tr></table><br>';
}else{
  echo '許可済み</td></tr></table><br>';
}

$cnt++;

「保留解除」ボタンを押した時に、ファイルを書き換えます。
admin.php 2393行目と2394行目の間に赤い文字列部分を追加。

          exit;
        }
        $cnt++;
      }
    }
  }
}elseif ($action == "tb_accept") {
  // ----- トラックバックの保留解除
  $trklist = IDCheck($qry_eid, 2);
  @sort($trklist);

  $cnt = 0;
  for ($i = 0; $i < count($trklist); $i++ ) {
    $trk = file(LOGDIR.substr($trklist[$i], 3, 4)."/".$trklist[$i]);
    $trk = array_reverse($trk);
    while (list($trkkey, $trkval) = each($trk)) {
      $trkval = ereg_replace( "\n$", "", $trkval );
      $trkval = ereg_replace( "\r$", "", $trkval );
      list($t_eid,,,,,,,,,$status) = explode("<>", $trkval);
      if ($t_eid == $qry_eid) {
        if ($qry_toid == $cnt) {
          $status = 0;
          $trkval = preg_replace("/1$/","0\r\n",$trkval);
          array_splice($trk, $trkkey, 1, $trkval);
          $trk = array_reverse($trk);
          $fp = fopen(LOGDIR.substr($trklist[$i], 3, 4)."/".$trklist[$i], "w");
          flock($fp, LOCK_EX);
          fputs($fp, implode('', $trk));
          fclose($fp);
          $trackback_eid = $qry_eid;
          $link_url = PHP_SELF.'?mode=list&page='.$page.'&trackback='.$trackback_eid.'#trackback';
          echo '<html><head><META HTTP-EQUIV="refresh"content="1;URL='.$link_url.'"></head>
          <body><div style="text-align:center;margin-top:10px;">トラックバックの保留を解除しました。<br>画面が自動的に切り替わらない場合は<br><a href="'.$link_url.'">こちら</a>をクリックしてください。</div></body></html>';
          exit;
        }
        $cnt++;
      }
    }
  }

}elseif ($action == "delete") {
  // ----- 親記事の削除

表示部分(個別記事表示)

個別記事のトラックバック欄の表示を変更します。
相手の記事題名は表示されますが、記事の内容は「管理人が許可するまで、表示は保留されます」と表示します。またブログへのリンクもしません。

index.php 1203行目〜 に赤い文字列部分を追加する。

list($t_eid, $blog_name, $t_title, $t_url, $t_excerpt, $t_date, $t_time, , , $status ) = explode("<>", $trkval);
if ($qry_data == $t_eid) {
  $buf2 = str_replace ("{TRACKBACKTITLE}", $t_title, $tmpbuf);
  if ($status == 1) {
    $buf2 = str_replace ("{TRACKBACKBODY}", "管理人が許可するまで、表示は保留されます。", $buf2);
    $trackbackuser = $blog_name;
  }else{

    $buf2 = str_replace ("{TRACKBACKBODY}", $t_excerpt, $buf2);
    $trackbackuser = "<a href=\"".$t_url."\" target=\"_blank\" rel=\"nofollow\">".$blog_name."</a>";
  }
  $buf2 = str_replace ("{TRACKBACKUSER}", $trackbackuser, $buf2);

表示部分(トラックバック一覧)

「最新トラックバック一覧」の表示を変更します。
保留を解除するまでは、トラックバックを送信した「ブログ名」の代わりに「保留中」と表示されます。
(通常の表示のままが良い場合は、この部分は改造しなくてもかまいません)

index.php 660行目、666行目、697行目、707行目〜 に赤い部分を追加する。


list($t_eid, $blog_name, $t_title, , , $t_date, $t_time, , ,$status) = explode("<>", $trkval);
$RT[$i] = $d_title."<>".$t_date."<>".$t_time."<>".$blog_name."<>".$t_title."<>".$t_eid."<>".$status;
list($d_title, $t_date, $t_time, $blog_name, $t_title, $t_eid, $status) = explode("<>",$RTS[$k]);
$RTlinke = "</a>";
if ($status == 1) {
  $tmpbuf = preg_replace ("/\{RTNAME\}/", "保留中", $buf2);
}else{
  $tmpbuf = preg_replace ("/\{RTNAME\}/", $blog_name, $buf2);
}
$tmpbuf = preg_replace ("/\{RTLINK\}/", $RTlink, $tmpbuf);

使い方

トラックバック削除画面に新たに「状態」という項目が追加されます。
「保留を解除する」をクリックすると、そのトラックバックを「許可済み」にします。

1番目のトラックバックは許可されています。

2番目の記事はまだ保留状態のため、ブログには概要が表示されません。
その代わりに「管理人が許可するまで、表示は保留されます」と表示されます。
また保留が解除されるまではブログへリンクしません。

もしトラックバック送信元のブログが、トラックバックされるのに値しないと判断した場合は、削除してください。



サイト作成のヒント集に戻る