「Codeigniter」トラックバック受信処理について使い方とサンプル
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Codeigniterトラックバック受信処理について使い方とサンプルをメモしました。
データベース作成
データベースを作成します。
手順
Mysqlにログインし、使用するデータベースへ移動します。
Mysqlにログイン
terminalmysql -u root -p
DBを選択
terminaluse 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_whereのpostは今回作成はしていませんが記事ページのデータベースになります。
記事の「dが存在するかのチェックをしています。
DB保存
insertの$dataはコントローラー側で加工しています。
$dataの配列を、先ほど作成したtrackbackDBへ保存しています。
trackback取得
get_trackbackではtrackbackDBから保存してあるデータを取得します。
コントローラーの処理
コントローラーでは「Codeigniter」のトラックバッククラスを使用します。
今回のサンプルでは以下の形でトラックバックを受信します。
受信するパス
bash(ドメイン)/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
bash(ドメイン)/trackback/info
コードはサンプルですので、「View」などを使用して任意に装飾してください。
最後に
今回のサンプルコードではトラックバック受信が実装する最低限のコードです。
最近では海外などから、不正に送信されるケースが多いため
実際に使用する際はipaddressからの受信時の時間制限や、スパム登録の機能など
セキュリティー上考慮した上で実装してください。
参考文献
articlePHP とは?2025 年版の特徴・強み・できることを徹底解説【保存版】
articleCodeIgniterで接続しているデータベースにPHPからテーブルを作成するサンプルコード
article「Codeigniter」トラックバック受信処理について使い方とサンプル
articlePHPでフォーム送信時のCAPTCHA(画像認証) を簡単に設置できる「Securimage」の使い方とサンプル
articlePHPから日本語のメールを送信するやり方
article「WordPress」ログインしていないユーザへのリダイレクトや自動ログインなど処理いろいろ
articleCodeIgniterで接続しているデータベースにPHPからテーブルを作成するサンプルコード
article「Codeigniter」トラックバック受信処理について使い方とサンプル
articlePHP(Codeigniter使用)からブログ投稿時にTwitterへ自動投稿してみました。
articlePHP(Codeigniter使用)からブログ投稿時にFacebookページへ自動投稿してみました。
articleComfyUI とは?ノードベースで組む最新画像生成ワークフローを完全解説【2025 年版】
articleBun とは?Node.js・Deno と何が違うのかを 3 分で理解【2025 年最新版】
articleShell Script とは?初心者が最短で理解する基本構文・実行モデル・活用領域
articleNode.js 本番メモリ運用:ヒープ/外部メモリ/リーク検知の継続監視
articleReact とは? 2025 年版の特徴・強み・実務活用を一気に理解する完全解説
articleNext.js でインフィニットスクロールを実装:Route Handlers +`use` で滑らかデータ読込
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来