电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

在PHP中使用Sockets:從Usenet中獲取文件

瀏覽:3日期:2024-02-24 17:51:29

作者:Armel Fauveau原文地址:http://www.phpbuilder.net/columns/armel20010427.php3譯者:許立強feifengxlq@gmail.comHttp://www.phpobject.net/blog/

PHP能夠打開遠程或者本地服務器的sockets!這里是一個使用socket的簡單的例子:連接到Usenet的新聞服務器,與服務器溝通,并從一個精確的新聞分組中下載一些文章。使用PHP打開Socket使用fsockopen()來打開一個Socket。這個函數在PHP3和PHP4中都存在。函數的原型如下:<?php

intfsockopen (string hostname, int port[, int errno[, 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地址)和它將要監聽的端口。另外建議你加上一個超時的時間,這樣連接失敗的時候就不會“凍結”程序。<?php$cfgServer;='your.news.host';$cfgPort;=119;$cfgTimeOut;=10;// open asocketif(!$cfgTimeOut) // without timeout $usenet_handle=fsockopen($cfgServer,$cfgPort);else // with timeout $usenet_handle=fsockopen($cfgServer,$cfgPort, &$errno, &$errstr,$cfgTimeOut);if(!$usenet_handle) { echo'Connexionfailedn'; exit();};else { echo'Connectedn'; $tmp=fgets($usenet_handle,1024);}?>與服務器交互現在我們已經連接上服務器了,而且能夠通過先前打開的socket連接與服務器進行交互。讓我們對服務器說“我們要從某一新聞分組中獲取到最新的10篇文章”。RFC977定義了如何選擇正確的新聞分組的命令,如下:GROUPggg必需的參數ggg是你將要選擇的新聞分組的名字,比如net.news。使用list命令你可以獲取到一組有效的新聞列表。成功選擇響應會返回組中首尾兩篇新聞的新聞號以及對存檔新聞號估計。比如chrome:~$ telnetmy.news.host 119Trying 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.test211 232 222996 223235alt.testquit205 .在接受到命令“GROUP alt.test”,新聞服務器返回了“211232 222996 223235 alt.test”。其中211是RFC標識碼(簡單的解釋說命令已經成功的執行—查看RFC你可以獲取更加詳細的資料),返回信息說明其中有232篇文章,其中最舊的新聞的索引號是222996,而最新的新聞索引號是223235。現在讓我們計算下:222996+232并不等于232235。這丟失的文章或者從這服務器移除出去了,或者被他的作者取消了(是的,這是可能的,也是很容易實現的),或者是刪除了。小心起見,在選擇新聞分組之前,服務器可能需要認證,當然這是由服務器是否公開或者私有來決定的。一般是允許任何人獲取新聞,但發表新聞需要通過認證。<?php//$cfgUser;= 'xxxxxx';//$cfgPasswd;= 'yyyyyy';$cfgNewsGroup;='alt.php';// identification required on private serverif($cfgUser) { fputs($usenet_handle,'AUTHINFO USER'.$cfgUser.'n'); $tmp=fgets($usenet_handle,1024); fputs($usenet_handle,'AUTHINFOPASS'.$cfgPasswd.'n'); $tmp=fgets($usenet_handle,1024); // check error if($tmp!='281Okrn') { echo'502Authentication errorn'; exit(); };}// select newsgroupfputs($usenet_handle,'GROUP '.$cfgNewsGroup.'n');$tmp=fgets($usenet_handle,1024);if($tmp=='480 Authentication required for commandrn') { echo'$tmpn'; exit();};$info=split(' ',$tmp);$first=$info[2];$last=$info[3];

print'First : $firstn';print'Last : $lastn';?>獲取一些文章現在我們已經有最新文章的A索引號,那就能很容易的獲取最新的十篇文章。RFC977指出使用ARTICLE命令可以和文章的索引號或者消息的ID一起使用。為了小心起見,在這里,文章的索引號和消息ID是不同的,因為每個新聞服務器定義不同,所以在不同的新聞服務器上相同文章的索引號都會不一樣的,但是消息ID好是唯一的(包含在文章的頭部中)<?php$cfgLimit;=10;// upload last articles$boucle=$last-$cfgLimit;while ($boucle<=$last) { set_time_limit(0); fputs($usenet_handle,'ARTICLE$bouclen');; $article=''; $tmp=fgets($usenet_handle,4096); if(substr($tmp,0,3) !='220') { echo'+----------------------+n'; echo'Error onarticle $bouclen'; echo'+----------------------+n'; } else { while($tmp!='.rn') { $tmp=fgets($usenet_handle,4096); $article=$article.$tmp; };;;;; echo'+----------------------+n'; echo'Article$bouclen'; echo'+----------------------+n'; echo'$articlen'; }; $boucle++;}?>我們僅僅從這個服務器的這個分組上獲取了十條最新的新聞。你也可以使用HEAD命令來至獲取文章的頭部信息,或者使用BODY命令來獲取新聞的正文。關閉連接使用fclose()函數你就可以結束與NNTP服務器之間的會話,當然你可以些一個新的文件,如下:<?php// close connexionfclose($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/去下載。

標簽: PHP
主站蜘蛛池模板: 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛婚外情取证-青岛王军侦探事务所 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 蔬菜配送公司|蔬菜配送中心|食材配送|饭堂配送|食堂配送-首宏公司 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 光环国际-新三板公司_股票代码:838504 | ZHZ8耐压测试仪-上海胜绪电气有限公司 | 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | 智慧消防-消防物联网系统云平台 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 上海公众号开发-公众号代运营公司-做公众号的公司企业服务商-咏熠软件 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 箱式破碎机_移动方箱式破碎机/价格/厂家_【华盛铭重工】 | 玻璃瓶厂家_酱菜瓶厂家_饮料瓶厂家_酒瓶厂家_玻璃杯厂家_徐州东明玻璃制品有限公司 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-北京罗伦过滤技术集团有限公司 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 丙烷/液氧/液氮气化器,丙烷/液氧/液氮汽化器-无锡舍勒能源科技有限公司 | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 九州网址_专注于提供网址大全分享推广中文网站导航服务 | 泥沙分离_泥沙分离设备_泥砂分离机_洛阳隆中重工机械有限公司 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 东亚液氮罐-液氮生物容器-乐山市东亚机电工贸有限公司 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 |