「Codeigniter」トラックバック受信処理について使い方とサンプル

PHPMySQL
「Codeigniter」トラックバック受信処理について使い方とサンプル
Memo
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Codeigniterトラックバック受信処理について使い方とサンプルをメモしました。

データベース作成

データベースを作成します。

手順

Mysqlにログインし、使用するデータベースへ移動します。

Mysqlにログイン

terminal
mysql -u root -p

DBを選択

terminal
use test_db;

上記のデータベース(test_db)はサンプルです。

###テーブルを作成

トラックバックテーブルを作成します。

terminal
create table trackback ( id int(10) unsigned not null auto_increment, entry_id int(10) unsigned not null default 0, url varchar(200) not null, title varchar(100) not null, excerpt text not null, blog_name varchar(100) not null, state enum('info','checked') default 'info', ip_address varchar(16) not null, created datetime, modified datetime, primary key `id` (`id`), key `entry_id` (`entry_id`) );

テーブルの構造

カラム名 概要
id テーブルのidです。
entry_id トラックバックを受信するページのidです。
url トラックバック送信側のページのURLです。
title トラックバック送信側のページのタイトルです。
excert トラックバック送信側のページの記事の内容
blog_name トラックバック送信側のページの名前です。
state 「info」は確認前、「checed」は確認のような形のフラグです。
ip_address トラックバック送信側のipaddresを保存します。
created 新規登録時点の時間を保存します。
modified 更新時の時間を保存します。

モデルの処理

モデルがないとコントローラー側でエラーになるので
先にモデルを作成します。

application/model/trackback_model.php
<?php class Trackback_model extends CI_Model{ function __construct(){ parent::__construct(); $this->load->database(); } //idチェック関数 Public function id_check($id){ $query = $this->db->get_where('trackback',array('id' => $id),1); if($query->num_rows > 0){ return true; }else{ return false; } } //DB保存 Public function insert($data){ $this->db->set($data); return $this->db->insert('trackback', $this); } //trackback取得 Public function get_trackback (){ $query = $this->db->get('trackback'); if($query->num_rows > 0){ return $query->result_array(); }else{ return false; } } } ?>

idチェック関数

get_wherepostは今回作成はしていませんが記事ページのデータベースになります。 記事の「dが存在するかのチェックをしています。

DB保存

insert$dataはコントローラー側で加工しています。 $dataの配列を、先ほど作成したtrackbackDBへ保存しています。

trackback取得

get_trackbackではtrackbackDBから保存してあるデータを取得します。

コントローラーの処理

コントローラーでは「Codeigniter」のトラックバッククラスを使用します。
今回のサンプルでは以下の形でトラックバックを受信します。

受信するパス

(ドメイン)/trackback/receive/(記事のid)

コントローラーの作成

application/controller/trackback.php
<?php class Trackback extends CI_Controller { public function __construct() { parent::__construct(); //モデルを読み込みます。 //application/models/trackback_model.php $this->load->model('trackback_model'); $this->load->library('trackback'); } public function receive ($id = null){ if(is_null($id) || $this->trackback_model->id_check($id)){ //もしページのidが存在しなかったらエラーを返します。 $this->trackback->send_error('エラーです。'); } if ( ! $this->trackback->receive()){ $this->trackback->send_error("トラックバックデータに不正なデータが含まれます"); } //エラーがなければDBに登録 $data = array( 'entry_id' => (int) $id, 'url' => urldecode ($this->trackback->data('url')), 'title' => urldecode ($this->trackback->data('title')), 'excerpt' => urldecode ($this->trackback->data('excerpt')), 'blog_name' => urldecode ($this->trackback->data('blog_name')), 'state' => 'info', 'ip_address' => $this->input->ip_address(), 'created' => date('Y-m-d H:i:s'), 'modified' => date('Y-m-d H:i:s') ); $res = $this->trackback_model->insert($data); if($res){ $this->trackback->send_success(); }else{ $this->trackback->send_error('登録できませんでした。'); } } //トラックバック表示ページ public function info () { $res = $this->trackback_model->get_trackback(); if($res){ echo '<table>'; foreach ($res as $lists){ echo '<tr>'; foreach ($lists as $list) { echo '<td>'.htmlspecialchars($list, ENT_QUOTES, 'UTF-8', FALSE).'</td>'; } echo '</tr>'; } echo '</table>'; }else{ echo 'データがありません。'; } } } ?>

処理の解説

トラックバッククラスの読み込み

以下のコードでトラックバッククラスを読み込みます。

php
$this->load->library('trackback');

エラーを返す

引数はメッセージです。

php
$this->trackback->send_error('エラーです。');

トラックバックのチェック

正しい形式で送られてきたかチェックします。

php
$this->trackback->receive();

トラックバックの成功を返す

トラックバック送信側に成功したメッセージを返します。

php
$this->trackback->send_success();

トラックバックの表示

「info」メソッドではトラックバックが「trackback」DBに保存されていたら表示します。

表示するURL

(ドメイン)/trackback/info

コードはサンプルですので、「View」などを使用して任意に装飾してください。

最後に

今回のサンプルコードではトラックバック受信が実装する最低限のコードです。 最近では海外などから、不正に送信されるケースが多いため 実際に使用する際はipaddressからの受信時の時間制限や、スパム登録の機能など セキュリティー上考慮した上で実装してください。

参考文献

終わりに

最後までご覧いただきありがとうございます。
この記事では「Codeigniter」トラックバック受信処理について使い方とサンプルについて紹介させていただきました。

これからも皆様の開発に役立つ情報を提供していきたいと考えています。
今後ともよろしくお願いいたします。