php高手看看这段代码该怎么解释?

来源:百度知道 编辑:UC知道 时间:2024/06/11 04:46:27
<?php
$fp=fsockopen("www.163.com",80,&$errno,&errstr,10); //?
if(!$fp){ //?
echo "$errstr ($errno)<br>\n";
}else{
fputs($fp,"GET / HTTP/1.0\nHost:www.163.com\n\n"); //?
while(!feof($fp)){
echo fgets($fp,128);
}
fclose($fp);
}
?>

以上是我看视频教程时候所不能理解的,谁能一句一句的帮我解释一下,特别是有问号的行,我非常不理解!

&$errno这个申明的是什么?我仅仅知道它是错误处理,可不知道为什么前面有个&?

还有它那个if判断是不是搞反了,返回的$fp应该不为空,那么就是一false,再在前面加个!不就成了true,返回了true,还输出错误信息?

另外它那个fputs函数应该是写入的,怎么能像网页中写入数据了?这点我搞不明白!希望高手给指点!感激涕零!
两位还是没有解释清除那个if(!$fp)语句,我还是不清除!~

第二次补充:那个!是什么意思?应该说返回的$fp是个文件指针啊,它前面来个!是设么意思?我大致的知道她是个非的意思?可到底这是什么意思,还是不咋懂,请你在说的清除点,谢谢了~~!!~

你没有PHP手册吗,查看一下fsockopen函数的说明就知道了,你的语句fsockopen("www.163.com",80,&$errno,&$errstr,10);(仔细看:你的语句少了一个$符号)表示连接主机www.163.com的80端口,错误状态、错误信息保存在$errno、$errstr变量里面,连接超时限制为10秒。

如果连接成功,那么$fp实际上是你的电脑上的一个TCP端口,可以像文件句柄一样使用这个端口,fputs写入数据表示向网络发送数据,fgets等读数据语句表示从网络读取信息。fputs和fgets都是针对网络端口,这个端口除了80表示网页以外,还可以是其它各种各样的端口,并不表示修改网页。

对于80端口,fputs是发送命令,fgets是获取结果,你的语句fputs($fp,"GET / HTTP/1.0\nHost:www.163.com\n\n"); 是发送一个GET命令,相当于在浏览器地址栏目输入地址然后请求结果的命令,按照http的协议,如果服务器执行成功,接下来就可以使用fgets获取网页内容。

补充:
我以为你只是有//?的语句不清楚。

if(!$fp)表示打开文件不成功,建立网络连接不成功。因为成功连接以后,$fp变量的值是不为false的,只有失败的时候才为false。! false的值就是true。

上面一句中,false的意思是假,true的意思是真,if语句当括号里面的结果为真时候执行if后面的语句,否则执行else后面的语句,当有else时。

补充:
你说