- Writers needed:
Spain
Rotterdam
Berlin - Luke and Brie are on a first date
- Sea Legs
- Kung Fu Joe
- The Dark Lurking
- First English review of Swiss scifi thriller CARGO
- SXSW 2010: Review of Neil Marshall's CENTURION
- SXSW 2010: Review of MONSTERS
- SXSW 2010: Review of A SERBIAN FILM (SRPSKI FILM)
- SXSW 2010: Review of KICK ASS
- SXSW 2010: Review of THE GIRL WITH THE DRAGON TATTOO
- Review of Jean Reno's L'IMMORTEL (22 BULLETS)
- Review of Tim Burton's ALICE IN WONDERLAND
- Book Review: AMERICAN APOCALYPSE - THE BEGINNING
- Review of THE CRAZIES
- PA Video Game Review: FALLEN EARTH
- THE BRONX WARRIOR TRILOGY
- Re: Ok, I think M Night may have has lost his load (again)
- Re: Hello is anybody there?
- Re: Hello is anybody there?
- Re: Hello is anybody there?
- Re: Last Stand New Online Zombie Series
- Re: Last Stand New Online Zombie Series
- Re: Last Stand Part 1 New Zombie Series
- Re: 667
- Re: Last Stand Part 1 New Zombie Series
- First English review of Swiss scifi thriller CARGO
- Coming to the BBC.. a new 6 part post apocalyptic comic adaptation FALLOUT
- EXCLUSIVE: Kyle Rankin of Infestation fame is back with the PA NUCLEAR FAMILY
- Trailer for post-apocalyptic creature feature DARK NEMESIS
- Chris Gorak teams with Timur Bekmambetov on new PA flick!
- First look at DANISH post-apocalyptic actioner EASTERN ARMY
- Watch the full PA short CONNECTED now!
- Trailer for Capcom's live action DEAD RISING movie... seriously
- Leaked promo reel for UK PA zombie flick DEVIL'S PLAYGROUND
- Trailer for post-apocalyptic video game METRO 2033
- Retro Slave: the apocalypse gets silly in AMERICA 3000
- Win a STINGRAY SAM DVD and soundtrack!
- Trailer for ZATOICHI: THE LAST
- The official trailer for Jay Baruchel's commie comedy THE TROTSKY
- Poster and new trailer for intriguing coming-of-ager DESERT SON
- Trailer for post-apocalyptic creature feature DARK NEMESIS
- Review of Jean Reno's L'IMMORTEL (22 BULLETS)
- Chris Gorak teams with Timur Bekmambetov on new PA flick!
- SXSW 2010: Full trailer for EARTHLING
- Review of Tim Burton's ALICE IN WONDERLAND
- Partial SCI-FI LONDON lineup includes PkD's RADIO FREE ALBEMUTH!
- The great Michael Biehn makes directorial debut with BLOOD BOND
- Crazy a** stills from demonic biker flick HARD RIDE TO HELL
- SXSW 2010: Trailer for David Robert Mitchell’s THE MYTH OF THE AMERICAN SLEEPOVER
- First image from HBO's GAME OF THRONES series.. yep, it's happening
- Intriguing trailer for epic locomotive racing actioner THE EDGE
- Trailer for Christina Ricci starrer AFTER.LIFE
- DVD / Blu-ray releases for Tuesday March 2, 2010
- First look at Travis Stevens' horror western SILVER MOON
- Portuguese horror series THE TEN (O Dez) debuts
- Polish techno-neo-noir choose your own adventure in SUFFERROSA
News
Reviews
Forums
Post apocalyptic list

Yes, we've sold out.

Join QE!
Upcoming Reviews
Latest Reviews
Latest Forum Posts
PA News
Older News

Posted on Monday, October 30th, 2006 23:56:43 GMT by: quietearth
Posted under: blog php pingback
Here's a tutorial (howto) on coding your own pingback mechanism for your blog using version 2.0 of the phpxmlrpc library available from sourceforge.
1. Receiving pingbacks
The pingback specs are available here:
http://www.hixie.ch/specs/pingback/pingback
When a client sends a pingback, it requests the page of the article being pinged and looks for either the X-Pingback header or a link the html header section of the page. This tells the client sending the pingback the url to actually send the pingback too. So first off we need to add these in to every page which serves articles.
This is part of the http header, so you need this before any html is served out:
header("X-Pingback: http://www.yoursite.com/pingback.php");This is for the html header section:
<link rel="pingback" href="http://www.yoursite.com/pingback.php" />The rest is simply making the pingback server itself. Here's the skeleton for pingback.php:
<?
header("Content-Type: application/xml");
require_once('/path/to/xmlrpc/lib/xmlrpc.inc');
require_once('/path/to/xmlrpc/lib/xmlrpcs.inc');
function pbprocess($m) {
global $xmlrpcerruser;
$x1 = $m->getParam(0);
$x2 = $m->getParam(1);
$source = $x1->scalarval(); # their article
$dest = $x2->scalarval(); # your article
# INSERT CODE
# here we can check for valid urls in source and dest, security
# lookup the dest article in our database etc..
if (..) { # source uri does not exist
return new xmlrpcresp(0, 16, "Source uri does not exist");
}
if (..) { # source uri does not have a link to target uri
return new xmlrpcresp(0, 17, "Source uri does have link to target uri");
}
if (..) { # target uri does not exist
return new xmlrpcresp(0, 32, "Target uri does not exist");
}
if (..) { # target uri cannot be used as target
return new xmlrpcresp(0, 33, "Target uri cannot be used as target");
}
if (..) { # Pingback already registered
return new xmlrpcresp(0, 48, "Target uri cannot be used as target");
}
if (..) { # Access denied
return new xmlrpcresp(0, 49, "Access denied");
}
if (..) { # Could not communicate with upstream server or got error
return new xmlrpcresp(0, 50, "Problem with upstream server");
}
if (..) { # Generic fault code if not applicable to above
return new xmlrpcresp(0, 50, "Unkown error");
}
return new xmlrpcresp(new xmlrpcval("Pingback registered. May the force
be with you.", "string"));
}
$a = array( "pingback.ping" => array( "function" => "pbprocess" ));
$s = new xmlrpc_server($a, false);
#$s->setdebug(3);
$s->service();
?>The xmlrpc_server class from the xmlrpcphp module processes the post and uses pbprocess as a callback to return the data. From the pbprocess function we need to return a valid xmlrpcresp, and this gets passed off to the client. This is pretty straightforward. On a side note, I use the Access denied (error 49) as a generic error response in case none of the others fit.
2. Sending pingbacks
For sending pingbacks, we need to pass the entire text of a post put on the blog to a parsing routine. This routine send_pingback which is below, looks for all the html links and runs through each one of these pages looking for the X-Pingback header. (At this time I haven't implemented the html link reference.) If it finds this header, it will submit a pingback to the specified url.
<?
require_once('/path/to/xmlrpc/lib/xmlrpc.inc');
function do_send_pingback($myarticle, $url, $pdebug = 0) {
$parts = parse_url($url);
if (!isset($parts['scheme'])) {
print "do_send_pingback: failed to get url scheme [".$url."]<br />\n";
return(1);
}
if ($parts['scheme'] != 'http') {
print "do_send_pingback: url scheme is not http [".$url."]<br />\n";
return(1);
}
if (!isset($parts['host'])) {
print "do_send_pingback: could not get host [".$url."]<br />\n";
return(1);
}
$host = $parts['host'];
$port = 80;
if (isset($parts['port'])) $port = $parts['port'];
$path = "/";
if (isset($parts['path'])) $path = $parts['path'];
if (isset($parts['query'])) $path .="?".$parts['query'];
if (isset($parts['fragment'])) $path .="#".$parts['fragment'];
$fp = fsockopen($host, $port);
fwrite($fp, "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n");
$response = "";
while (is_resource($fp) && $fp && (!feof($fp))) {
$response .= fread($fp, 1024);
}
fclose($fp);
$lines = explode("\r\n", $response);
foreach ($lines as $line) {
if (ereg("X-Pingback: ", $line)) {
list($pburl) = sscanf($line, "X-Pingback: %s");
#print "pingback url is $pburl<br />\n";
}
}
if (empty($pburl)) {
print "Could not get pingback url from [$url].<br />\n";
return(1);
}
if (!isset($parts['scheme'])) {
print "do_send_pingback: failed to get pingback url scheme [".$pburl."]<br />\n";
return(1);
}
if ($parts['scheme'] != 'http') {
print "do_send_pingback: pingback url scheme is not http[".$pburl."]<br />\n";
return(1);
}
if (!isset($parts['host'])) {
print "do_send_pingback: could not get pingback host [".$pburl."]<br />\n";
return(1);
}
$host = $parts['host'];
$port = 80;
if (isset($parts['port'])) $port = $parts['port'];
$path = "/";
if (isset($parts['path'])) $path = $parts['path'];
if (isset($parts['query'])) $path .="?".$parts['query'];
if (isset($parts['fragment'])) $path .="#".$parts['fragment'];
$m = new xmlrpcmsg("pingback.ping", array(new xmlrpcval($myarticle, "string"), new xmlrpcval($url, "string")));
$c = new xmlrpc_client($path, $host, $port);
$c->setRequestCompression(null);
$c->setAcceptedCompression(null);
if ($pdebug) $c->setDebug(2);
$r = $c->send($m);
if (!$r->faultCode()) {
print "Pingback to $url succeeded.<br >\n";
} else {
$err = "code ".$r->faultCode()." message ".$r->faultString();
print "Pingback to $url failed with error $err.<br >\n";
}
}
# call send_pingback() from your blog after adding a new post,
# $text will be the full text of your post
# $myurl will be the full url of your posting
function send_pingback($text, $myurl) {
$m = array();
preg_match_all ("/<a[^>]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text, $m);
$c = count($m[0]);
for ($i = 0; $i < $c; $i++) {
$ret = valid_url($m[1][$i]);
if ($ret) do_send_pingback($myurl, $m[1][$i]);
}
}
?>I have put up a page to allow you to test sending and receiving pingbacks from your blog:
http://www.quietearth.us/webtools
RSS Feed for commentsComments
Posted by: obokaman | January 15, 2007 08:57:07 am | permalink
Posted by: ikari | February 20, 2007 02:46:07 pm | permalink
Posted by: quietearth | February 20, 2007 03:00:27 pm | permalink
Posted by: Mindloop Webdesign | July 4, 2007 06:55:21 am | permalink
Posted by: Mike | August 6, 2007 10:54:37 pm | permalink
Posted by: Mike | August 6, 2007 11:43:06 pm | permalink
Posted by: Kestas | August 20, 2007 05:46:10 am | permalink
Posted by: Kestas | August 20, 2007 07:23:37 am | permalink
Posted by: quietearth | August 20, 2007 03:54:17 pm | permalink
Posted by: Kestas | August 21, 2007 03:24:32 am | permalink
Posted by: Tyler | October 16, 2007 08:56:19 am | permalink
Posted by: snydez | December 5, 2007 12:05:59 am | permalink
Posted by: scott klarr | December 10, 2007 02:49:09 am | permalink
Posted by: vivevtvivas | January 3, 2008 11:21:18 am | permalink
Posted by: Lazar | February 8, 2008 05:14:17 pm | permalink
Posted by: rio | February 18, 2008 07:54:34 am | permalink
Posted by: LukasS | March 1, 2008 11:28:23 am | permalink
Posted by: Trezub | April 25, 2008 04:45:04 am | permalink
Posted by: akifemre | May 25, 2008 03:10:35 am | permalink
Posted by: Allan Wirth | June 24, 2008 11:12:19 pm | permalink
Posted by: Origin | October 3, 2008 05:12:40 am | permalink
Posted by: Ramon Fincken | January 31, 2009 12:18:39 pm | permalink
Posted by: Ramon Fincken | January 31, 2009 01:48:57 pm | permalink
Post a comment
Related articles
rss | subscribe via email | the team | contact us | mobile
© 2006-2009 Don Neumann (except where applicable)
We are looking for free hosting with a cut of sales, you'll get a link right here.
If you want news of your film posted, use our contact page and we'll check it out
Permission is granted to use material from this site if you provide a reference to us via a link and DO NOT HOTLINK.
GenreBanners.com Banner Exchange