仓酷云

标题: PHP编程:在php中利用sockets:重新闻组中获得文章... [打印本页]

作者: 灵魂腐蚀    时间: 2015-2-4 00:30
标题: PHP编程:在php中利用sockets:重新闻组中获得文章...
你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。   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()的更多信息,请参考:http://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. ";
exit();
}
else {
echo "Connected. ";
$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[2];
$last = $info[3];

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

?>
  实现固定数量的几张图片的上传;再如调试软件ZendStudio的使用,看了很多次老师的应用,但总感觉用的不顺手,不懂那么多的数据值,到底哪一个才是真正的问题所在;还有如数据库语句的封装,我只会用简单的函数来进行封装。
作者: 分手快乐    时间: 2015-2-4 13:14
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者: 山那边是海    时间: 2015-2-9 23:15
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 老尸    时间: 2015-2-10 04:21
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者: 深爱那片海    时间: 2015-2-21 00:31
写的比较杂,因为我也是个新手,不当至于大家多多指正。
作者: 兰色精灵    时间: 2015-3-6 19:23
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者: 不帅    时间: 2015-3-13 00:50
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 莫相离    时间: 2015-3-17 11:08
爱上php,他也会爱上你。
作者: 飘灵儿    时间: 2015-3-17 21:36
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 变相怪杰    时间: 2015-3-22 05:07
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 小女巫    时间: 2015-3-28 16:48
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 若相依    时间: 2015-4-2 11:03
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 金色的骷髅    时间: 2015-4-16 15:11
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 简单生活    时间: 2015-4-22 05:15
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
作者: 灵魂腐蚀    时间: 2015-5-1 04:03
本文当是我的笔记啦,遇到的问题随时填充
作者: 冷月葬花魂    时间: 2015-5-1 20:09
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 若天明    时间: 2015-5-4 12:19
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者: 爱飞    时间: 2015-6-8 10:08
Ps:以上纯属原创,如有雷同,纯属巧合
作者: 仓酷云    时间: 2015-6-9 00:14
本文当是我的笔记啦,遇到的问题随时填充
作者: 蒙在股里    时间: 2015-6-10 23:23
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2