« 杂记 2005.07.22回到首页由改写 HTML 想到的——CSS、DIV »

July 24, 2005

Beta 阶段进度报告 1 ——trackback 完成  

调整阅读文字: Blog 开发记录

昨天搞定了 trackback,不过虚拟主机却挂了,无法更新。

这事说起来比较丢人,本来想实现 TrackBack Ping,结果一直看的是 weblogUpdates.ping 的文档,当然发不通……早说就是 post 四个变量我何必费这劲,一直拖到今天……向自己机器上的 Movable Typeblogbus 上的测试帐号发送成功,又自己对自己发送,也接收成功,应该算是通过了吧。spam 应该暂时还轮不到我头上,碰到再说,关键点是 MySQL 用 heap 类型的表来记录应该能提升不少效率。

POST 方式要用 socket,算是 PHP FAQ 吧,希望这个函数有能用上的。

<?PHP
// 用 socket 方式发送 trackback

function trackback($sURL$aData) {

    
/*

    使用方法
    $aTrackbackData = array(
        "title" => "test",
        "excerpt" => "test",
        "url" => "test",
        "blog_name" => "test"
    );
    trackback("http://tb.test.com/tb.cgi?id=1", $aTrackbackData);

     */

    // 要提交的变量

    
$sData "";
    foreach (
$aData as $key => $value) {
        if(!empty(
$sData)) {
            
$sData .= "&";
        }
        
$sData .= rawurlencode($key)."=".rawurlencode($value);
    }
    
$sData trim($sData);

    
// 将 url 分解成 socket 连接所需要的

    
$aURL parse_url($sURL);

    
$aURL["port"] = empty($aURL["port"]) ? 80 $aURL["port"];

    
// socket 连接

    
$fp fsockopen($aURL["host"], $aURL["port"], $errno$errstr10);
    if (
$fp) {

        
$aURL["query"] = isset($aURL["query"]) ? "?".$aURL["query"] : "";

        
fputs($fp"POST ".$aURL["path"].$aURL["query"]." HTTP/1.0\r\n");
        
fputs($fp"Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n");
        
fputs($fp"Host: ".$aURL["host"]."\r\n");
        
fputs($fp"Content-length: ".strlen($sData)."\r\n");
        
fputs($fp"\r\n".$sData);
        
fputs($fp"\r\n");

        
// 取返回值
        
$sReturn "";
        while(!
feof($fp)){
            
$sReturn .= fgets($fp);
        }

        
fclose ($fp);
    }
    return 
$sReturn;
}
?>

完成的意义是,最起码我可以放心的说我这东西叫 blog 了


Update in 2005-08-07 21:02

发现还有 BUG,改正之:

1.不应该发送 \n,而应该是 \r\n,发现 Apache 兼容后者,而 IIS 不兼容前者,又是一个该死的事实标准
2.增加一个“fputs($fp, "Host: ".$aURL["host"]."\r\n");”,不然 name-based 虚拟主机可能会无法接收

主要是对 donews.net 发发不出去而发现的,以后发现别的问题再说

Posted by Platinum at July 24, 2005 01:07 PM | Comments (0)