柔情似水 发表于 2015-2-4 00:26:54

PHP教程之在 php 中利用 sockets:重新闻组中获得...

理解动态语言的概念,运做机制,熟悉PHP语法   PHP能翻开近程或当地主机上的Socket端口。本文是一个利用Socket的小例子:连
接到一个Usenet旧事组办事器,同办事器对话,重新闻组中下载一些文章。

在php中翻开一个socket
利用fsockopen()翻开一个socket.这个函数在php3和php4种都可使用。函数声明
是如许的:
int fsockopen (string hostname, int port [, int errno [, string errstr [, double timeout]]])
这个函数将翻开一个毗连到主机hostname的port端口的TCP毗连。hostname可所以一
个无效的域名,或是一个ip地址。关于udp毗连,你必需指定协定:udp://hostname.
关于unix域,主机名利用到socket的途径,这类情形下,端口port必需置为0。可选
的timeout参数用来设定守候翻开一个socket的工夫,单元为秒。
关于fsockopen()的更多信息,请参考:h
ttp://www.php.net/manual/function.fsockopen.php

收集旧事传输协定
会见旧事组办事器需求经由过程称为NNTP(收集旧事传输协定)的协定来停止。这个协定
在rfc977中有具体的细节,可以在http://www.w3.org/Protocols/rfc977/rfc977.html
失掉。这个文档分离描写了如何毗连到NNTP办事器,如何同办事器对话,和完成这
些义务的分歧号令。

毗连
毗连到一个NNTP办事器需求晓得它的主机名(或是ip地址)和它侦听的端口。为了
防止一个毗连妄图掉败招致法式挂起,你应当利用timeout参数。
<?php
$cfgServer = "your.news.host";
$cfgPort = 119;
$cfgTimeOut = 10;

//open a socket
if(!$cfgTimeOut)
// without timeout
$usenet_handle = fsockopen($cfgServer, $cfgPort);
else
// with timeout
$usenet_handle = fsockopen($cfgServer, $cfgPort, &$errno, &$errstr, $cfgTimeOut);

if(!$usenet_handle) {
echo "Connection failed.n";
exit();
}
else {
echo "Connected.n";
$tmp = fgets($usenet_handle, 1024);
}

?>


与办事器对话
  如今咱们已毗连到了办事器,可以经由过程后面翻开的socket同办事器对话了。好比
说咱们要从某个旧事组失掉比来的10篇文章。RFC977指出,第一步要用GROUP号令选择
准确的旧事组:
GROUP ggg
参数ggg是要选择的旧事组的名字(好比说是"net.news"),这是必须的。可用的新
闻组的列表可以用LIST号令失掉。选择旧事组的号令胜利后,前往组中第一篇和最
后一篇文章的文章编号,和组中文章的数量。
上面是一个例子:
chrome:~$ telnet my.news.host 119
Trying aa.bb.cc.dd...
Connected to my.news.host.
Escape character is '^]'.
200 my.news.host InterNetNews NNRP server INN 2.2.2 13-Dec-1999 ready (posting ok).
GROUP alt.test
211 232 222996 223235 alt.test
quit
205 .

吸收到号令 GROUP alt.test 后,办事器前往"211 232 222996 223235 alt.test".
211是RFC中界说的前往码,唆使号令已胜利履行。前往信息还指出,如今有232篇文
章,最早的文章的编号是222996,最新的文章的编号是223235。咱们看到,
222996+232其实不等于223235。丧失的7篇文章由于某种缘由被从办事器删除,能够
是由于被它的正当作者作废了(这是能够的,并且很轻易做到),或由于是灌水文
章而被删。
需求注重的事,有些办事器在选择旧事组之前能够请求身份认证,这取决于这是一个
公共的或是私用的办事器。也有能够办事器答应任何人读取文章,但宣布文章需求
身份验证。

<?php

//$cfgUser = "xxxxxx";
//$cfgPasswd = "yyyyyy";
$cfgNewsGroup = "alt.php";

//identification required on private server
if($cfgUser) {
fputs($usenet_handle, "AUTHINFO USER ".$cfgUser."n");
$tmp = fgets($usenet_handle, 1024);
fputs($usenet_handle, "AUTHINFO PASS ".$cfgPasswd."n");
$tmp = fgets($usenet_handle, 1024);

//check error

if($tmp != "281 Okrn") {
echo "502 Authentication errorn";
exit();
}
}

//select newsgroup

fput($usenet_handle, "GROUP ".$cfgNewsGroup."n");
$tmp = fgets($usenet_handle, 1024);

if($tmp == "480 Authentication required for commandrn") {
echo $tmp;
exit();
}

$info = split(" ", $tmp);
$first= $info;
$last = $info;

printf("First : %sn", $first);
printf("Last : %lastn", $last);

?>说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。

山那边是海 发表于 2015-2-4 13:08:48

我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。

谁可相欹 发表于 2015-2-9 23:02:21

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

admin 发表于 2015-2-10 07:15:02

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

小妖女 发表于 2015-3-1 02:12:01

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

愤怒的大鸟 发表于 2015-3-10 12:05:55

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

小女巫 发表于 2015-3-17 06:12:34

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

小魔女 发表于 2015-3-23 06:48:02

装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。

再见西城 发表于 2015-3-27 23:09:38

最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。

柔情似水 发表于 2015-4-1 01:26:12

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

若天明 发表于 2015-4-3 04:05:49

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

精灵巫婆 发表于 2015-4-6 18:56:54

为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。

简单生活 发表于 2015-4-17 22:51:13

装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。

飘飘悠悠 发表于 2015-4-26 23:10:18

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

第二个灵魂 发表于 2015-4-28 00:48:27

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

兰色精灵 发表于 2015-5-6 05:11:45

Ps:以上纯属原创,如有雷同,纯属巧合

因胸联盟 发表于 2015-5-10 06:37:39

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

只想知道 发表于 2015-6-5 22:11:49

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81

灵魂腐蚀 发表于 2015-6-18 20:58:05

兴趣是最好的老师,百度是最好的词典。

老尸 发表于 2015-7-8 06:54:50

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。
页: [1] 2
查看完整版本: PHP教程之在 php 中利用 sockets:重新闻组中获得...