Für unser Vorhaben verwenden wir die Klasse PHP Trackback die man frei über sourceforge beziehen kann. Nach dem Download kopieren wir die Klassendatei “trackback_cls.php” in ein beliebiges Verzeichnis der entsprechenden Web Applikation, die wir mit der Trackback Funktionalität ausstatten wollen. Wer sich einen Überblick über die Funktionen von PHP Trackback verschaffen will, sollte auch mal einen blick auf die Klassendokumentation werfen.
Die Handhabung von PHP Trackback ist denkbar einfach. Um einen Trackback an eine bestimmte URL zu senden nutzen wir die Funktion “ping”:
include ("includes/trackback_cls.php");
$trackback = new Trackback('name des blogs bzw der applikation','autor','UTF-8');
if ($trackback->ping('url die gepingt werden soll', 'permalink des eigenen beitrages', 'titel des beitrages','textauschnitt des beitrages')) {
echo "Trackback sent successfully...";
} else {
echo "Error sending trackback....";
}
Als Erstes binden wir die Klasse mit include in den bestehenden php Code ein und instanzieren eine neues trackback Objekt der PHP Trackback Klasse. Danach wird die Funktion “ping” aufgerufen, welche die übergebene URL versucht zu erreichen und den Trackback zu setzen. Falls dies gelingt oder nicht erfolgt eine Fehler bzw. Erfolgsmeldung.
Um einen Trackback empfangen zu können, muss man als erstes wissen wie er aussieht. Dazu gucken wir uns doch mal die Function “ping” in der PHP Trackback Klasse an und erkennen, dass ein Trackback ein HTTP_POST Request an eine bestimmte Trackback-Url mit den Parametern $tb $url $title und $excerpt ist. Mit diesem Wissen könne wir und eine php Datei bauen, die diesen Request in Empfang nimmt und die entsprechende Antwort darauf gibt. Die Antwort die erwartet wird ist ein XML Dokument mit dem Element “error” das 0 für Erfolg oder 1 für Fehler zurück gibt (siehe “recieve” Funktion in der PHP Trackback Klasse).
Für das Code Beispiel benutze ich folgende Trackback url: trackback.php?id=xy. Damit stellen wir mit der GET Variable sicher, dass ein Beitrag etc. genau einen Trackback url besitzt, über die er ansprachbar ist. Für die Speicherung der Trackbacks auf dem Server nutze ich eine einfache mysqlTabelle: (Achtung: Das Statement ist für mysql5 und funktioniert so nicht auf mysql4!)
CREATE TABLE `trackbacks` (
`trid` int(11) NOT NULL auto_increment,
`id` int(11) NOT NULL,
`fromurl` varchar(100) collate latin1_general_ci NOT NULL,
`title` varchar(50) collate latin1_general_ci NOT NULL,
`text` varchar(255) collate latin1_general_ci default NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`trid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Nun die php Datei trackback.php für das Empfangen der Trackbacks:
//die antwort für den Trackback sender wird als XML ausgegeben header('Content-Type: text/xml'); //Einbinden der php trackback Klasse include('includes/trackback_cls.php'); //Neues trackback Object instanzieren $trackback = new Trackback('openKE.org','openKE.org','UTF-8'); //die Trackback Parameter aus den GET bzw POST Variablen des Requests auslesen $tb_id = $_GET['id']; $tb_url = $_POST['url']; $tb_title = $_POST['title']; $tb_expert = $_POST['exerpt']; //Trackback in einer DB Tabelle sichern require('includes/mysql_connect.php'); $SqlInsert = 'INSERT INTO restrackbacks (trid, timestamp, bid, title, text, fromurl) '. "VALUES (' ', now(), '".$tb_id."', '".$tb_title."', '" .$tb_expert."', '" .$tb_url."')"; $result = mysql_query($SqlInsert); if (!$result) { die('Invalid query: ' . mysql_error()); }; //XML Antwort für den Trackback Sender generierten und zurück liefern echo $trackback->recieve(true);
Der php Code ist noch etwas ausbaufähig: es fehlt noch eine Überprüfung der POST bzw. GET Parameter auf Gültigkeit, eine Überprüfung ob der Trackback bereits angekommen und gespeichert worden ist und das wichtiste: SPAM Schutzmaßnahmen, wie ein Bad-Word Filter oder ähnliches.