steelray project viewer 在PHP中使用Sockets 從Usenet中取得文件
作者:Armel Fauveau
原文網址:http://www.phpbuilder.net/columns/armel20010427.php3
PHP能夠開啟遠端或本機伺服器的sockets!這裡是一個使用socket的簡單的例子:連接到Usenet的新聞伺服器,與伺服器溝通,並從一個精確的新聞分組中下載一些文章。
使用PHP開啟Socket
使用fsockopen()來開啟一個Socket。這個函數在PHP3和PHP4都存在。函數的原型如下:
intfsockopen
(string hostname,
string errstr [,
double timeout]] ])
?>
對於網路主機,它將建立一個TCP的Socket的連接到主機名稱的連接埠上。主機名稱可以是網域名稱或IP位址。對於UDP連接,你需要明確指出其協定:udp://hostname。對於unix主機,主機名稱將在socket的路徑中使用,在這個範例中連接埠必須設定成0。可選項timeout可以用來設定連線逾時的秒數。
關於fsockopen()的更多資訊可以存取http://www.php.net/manual/function.fsockopen.php
網路新聞傳輸協定(NNTP)
存取一個usenet新聞伺服器需要用到一個特別的協議,稱作NNTP,即網路新聞傳輸協議標準。這個協議的詳細資料在RFC977中,你可以在http://www.w3.org/Protocols/rfc977/rfc977.html查看。這個文檔詳細的描述如何使用不同的命令來連接並且和NNTP伺服器對話。
連接伺服器
連接到NNTP伺服器需要知道伺服器的主機名稱(或IP位址)和它將要監聽的連接埠。另外建議你加上一個超時的時間,這樣連線失敗的時候就不會「凍結」程式。
$cfgServer = "your.news.host";
$cfgPort = 119;
$cf cfgTimeOut)
// without timeout
$usenet_handle = fsockopen($cfgServer, $cfgPort); le = fsockopen($cfgServer, $cfgPort, & $errno, &$errstr, $cfgTimeOut);
if(!$usenet_handle) {
echo"Connexionfailedn";
echo" Connectedn";
$tmp = fgets($usenet_handle, 1024);
}
?>
與伺服器互動
現在我們已經連接到先前開啟伺服器上的伺服器連線與伺服器進行互動。讓我們對伺服器說「我們要從某一新聞分組中獲取到最新的10篇文章」。 RFC977定義瞭如何選擇正確的新聞分組的命令,如下:
GROUPggg
必需的參數ggg是你將要選擇的新聞分組的名字,例如net.news。使用list指令你可以取得一組有效的新聞清單。成功選擇回應會返回群組中首尾兩篇新聞的新聞號碼以及存檔新聞號估計。
例如
chrome:~$ telnetmy.news.host 119
Trying aa.bb.cc.dd...
Connected tomy.news.host.
Escape character is'^] '.
200 my.news.hostInterNetNews NNRP server INN 2.2.2 13-Dec-1999 ready (posting ok).
GROUP alt.test
211253596329 🎜 >205 .
在接受到命令“GROUP alt.test”,新聞伺服器返回了“211232 222996 223235 alt.test”。其中211是RFC識別碼(簡單的解釋說命令已經成功的執行—查看RFC你可以獲取更加詳細的資料),返回信息說明其中有232篇文章,其中最舊的新聞的索引號是222996,而最新的新聞索引號碼是223235。現在讓我們來計算下:222996+232並不等於232235。這遺失的文章或從這伺服器移除出去了,或是被他的作者取消了(是的,這是可能的,也是很容易實現的),或是刪除了。
小心起見,在選擇新聞分組之前,伺服器可能需要認證,當然這是由伺服器是否公開或私有來決定的。一般是允許任何人獲取新聞,但發表新聞需要通過認證。
//$cfgUser = "xxxxxx";
//$cfgPasswd = "yyyyyy";
$cfgNewsGroup = "yyyyyy";
$cfgNewsGroup = "yyyyyy";
$cfgNewsGroup = "yyyyyy";
$cfgNewsGroup private server
if($cfgUser) {
fputs($usenet_handle, "AUTHINFO USER".$cfgUser."n");
fputs ($usenet_handle, "AUTHINFO PASS ".$cfgPasswd."n");
$tmp = fgets($usenet_handle, 1024); "281Okrn" ) {
echo "502Authentication errorn";
exit(); fputs($usenet_handle, "GROUP ".$cfgNewsGroup."n ");
$tmp = fgets($usenet_handle, 1024);
if($tmp == "480 Authentication require for commandrn");{ }
$info = split(" ", $tmp);
$first = $info[2];
$last = $info[3]; : $firstn";
print "Last : $lastn";
?>
取得一些文章
現在我們已經有最新文章的A索引號,那就能很容易的取得最新的十篇文章。 RFC977指出使用ARTICLE指令可以和文章的索引號碼或訊息的ID一起使用。為了小心起見,在這裡,文章的索引號碼和訊息ID是不同的,因為每個新聞伺服器定義不同,所以在不同的新聞伺服器上相同文章的索引號碼都會不一樣的,但是訊息ID好是唯一的(包含在文章的頭部)
$cfgLimit = 10;
// upload last articles
$boucle=$last-$cfgLimit; set_time_limit(0);
fputs($usenet_handle, "ARTICLE$ "); fgets($usenet_handle, 4096 );
if(substr($tmp,0,3) != "220") {
echo "+--------------------- -+n";
echo "Error onarticle $bouclen";
echo "+----------------------+n"; }
else {
while($tmp!=".rn") ;
$article = $article.$tmp;
}
echo "+----------------------+n"; echo "$articlen";
}
🎜>?>
我們僅僅從這個伺服器的這個分組上獲取了十條最新的新聞。你也可以使用HEAD指令來至取得文章的頭部訊息,或是使用BODY指令來取得新聞的正文。
關閉連線
使用fclose()函數你就可以結束與NNTP伺服器之間的會話,當然你可以一些一個新的文件,如下:
// close connexion
fclose($usenet_handle);
?>
更多關於fclose()的信息,請看:http://www.php.net/manual/function.fclose.php
結論
本文中,我們只說明了在確定的情況下如何開啟、使用和關閉一個socket連線:連接上一個NNTP伺服器然後從新聞分組中取回一些文章。使用POST指令在NNTP伺服器上發表一篇文章並不複雜多少。
因此,下一步就是寫一個新聞客戶端(並去掉一些Netscape),它需要能很容易的保存文章,並使用一些搜尋引擎(例如htgid, http://www.htdig.org/)來索引這些文章,而且要有一個WEB應用程式能進行新聞分組下的關鍵字搜尋。這裡有一個例子,你可以上http://www.phpindex.com/ng/去下載。
以上就介紹了steelray project viewer 在PHP中使用Sockets 從Usenet中獲取文件,包括了steelray project viewer方面的內容,希望對PHP教程有興趣的朋友有所幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

RESTAPI設計原則包括資源定義、URI設計、HTTP方法使用、狀態碼使用、版本控制和HATEOAS。 1.資源應使用名詞表示並保持層次結構。 2.HTTP方法應符合其語義,如GET用於獲取資源。 3.狀態碼應正確使用,如404表示資源不存在。 4.版本控制可通過URI或頭部實現。 5.HATEOAS通過響應中的鏈接引導客戶端操作。

在PHP中,異常處理通過try,catch,finally,和throw關鍵字實現。 1)try塊包圍可能拋出異常的代碼;2)catch塊處理異常;3)finally塊確保代碼始終執行;4)throw用於手動拋出異常。這些機制幫助提升代碼的健壯性和可維護性。

匿名類在PHP中的主要作用是創建一次性使用的對象。 1.匿名類允許在代碼中直接定義沒有名字的類,適用於臨時需求。 2.它們可以繼承類或實現接口,增加靈活性。 3.使用時需注意性能和代碼可讀性,避免重複定義相同的匿名類。

在PHP中,include,require,include_once,require_once的區別在於:1)include產生警告並繼續執行,2)require產生致命錯誤並停止執行,3)include_once和require_once防止重複包含。這些函數的選擇取決於文件的重要性和是否需要防止重複包含,合理使用可以提高代碼的可讀性和可維護性。

PHP中有四種主要錯誤類型:1.Notice:最輕微,不會中斷程序,如訪問未定義變量;2.Warning:比Notice嚴重,不會終止程序,如包含不存在文件;3.FatalError:最嚴重,會終止程序,如調用不存在函數;4.ParseError:語法錯誤,會阻止程序執行,如忘記添加結束標籤。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
