首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP Socket 實戰:連線 NNTP 伺服器抓取 Usenet 新聞群組文章

     編輯:PHP 綜合知識

fsockopen() 建立 Socket 連線

$cfgServer = "your.news.host";
$cfgPort = 119;
$cfgTimeOut = 10;
$usenet_handle = fsockopen($cfgServer, $cfgPort, $errno, $errstr, $cfgTimeOut);
if (!$usenet_handle) { echo "Connection failed\n"; exit(); }
$tmp = fgets($usenet_handle, 1024); // 讀取歡迎訊息

NNTP 協定互動流程

  1. 認證(私有伺服器需求):
    fputs($handle, "AUTHINFO USER $user\n");
    fputs($handle, "AUTHINFO PASS $pass\n");
    
  2. 選擇新聞群組:
    fputs($handle, "GROUP alt.php\n");
    $tmp = fgets($handle, 1024); // 211 232 222996 223235 alt.php
    // 211=成功碼, 232=文章數, 222996=最舊編號, 223235=最新編號
    
  3. 擷取最新 N 篇文章:
    $last = 223235; $limit = 10;
    for ($i = $last - $limit + 1; $i <= $last; $i++) {
        fputs($handle, "ARTICLE $i\n");
        $header = fgets($handle, 4096);
        if (substr($header,0,3) != '220') continue; // 文章不存在
        $article = '';
        while (($line = fgets($handle, 4096)) != ".\r\n") $article .= $line;
        echo $article;
    }
    
  4. 關閉連線:fclose($usenet_handle);

關鍵函數說明

函數用途
fsockopen()開啟 TCP/UDP/Unix Socket 連線
fputs()/fwrite()發送指令(需以 \r\n 結尾)
fgets()讀取一行回應(含換行符)
fclose()關閉連線釋放資源

延伸應用

  • 使用 HEAD 僅取標頭、BODY 僅取內文。
  • 結合 ht://Dig 建立全文搜尋引擎。
  • 開發 Web 介面新聞閱讀器,支援關鍵字搜尋、分類瀏覽。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved