PHP Socket编程 之使用fsockopen()函数
Socket可以理解为两台计算机相互通信的通道。
用法:使用fsockopen()函数
具体用法详见上篇文章。函数的参数为URL、端口号、一个存放错误编号的变量、一个存放错误信息字符串的变量和超时等待时间。(只有第一个参数是必须的)
常见的端口表:
端口号 |
主要用途 |
21 |
FTP |
22 |
SSH |
23 |
Telnet |
25 |
SMTP |
80 |
Web |
110 |
POP |
其中,组成URl的几个部分为:协议名(scheme),主机(host),端口号(port),文件路径(path),查询参数(query)。
当url是http://www.example.com/view.php?week=1#demo时:
指标 |
值 |
Scheme |
http |
Host |
|
Port |
80 |
User |
|
Pass |
|
Path |
View.php |
Query |
Week=1 |
Fragment |
#demo |
常见的HTTP状态码:
代码 |
含义 |
200 |
OK |
204 |
NO Content |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not Found |
408 |
Time out |
5** |
Server error |
【示例】:
<?PHP
function check_url($url){
//解析url
$url_pieces = parse_url($url);
//设置正确的路径和端口号
$path =(isset($url_pieces['path']))?$url_pieces['path']:'/';
$port =(isset($url_pieces['port']))?$url_pieces['port']:'80';
//用fsockopen()尝试连接
if($fp =fsockopen($url_pieces['host'],$port,$errno,$errstr,30)){
//建立成功后,向服务器写入数据
$send = "HEAD $path HTTP/1.1\r\n";
$send .= "HOST:$url_pieces['host']\r\n";
$send .= "CONNECTION: CLOSE\r\n\r\n";
fwrite($fp,$send);
//检索HTTP状态码
$data = fgets($fp,128);
//关闭连接
fclose($fp);
//返回状态码和类信息
list($response,$code) = explode(' ',$data);
if(code == 200){
return array($code,'good');
}else{
return array($code,'bad');//数组第二个元素作为css类名
}
}else{
//没有连接
return array($errstr,'bad');
} }
//创建URL列表
$urls = array(
'http://www.sdust.com',
'http://www.example.com'
)
//调整PHP脚本的时间限制:
set_time_limit(0);//无限长时间完成任务
//逐个验证url:
foreach($urls as $url){
list($code,$class) = check_url($url);
echo "<p><a href =\"$url\">$url</a>(<span class =\"$class\">$code</span>)</p>"; }
?>
使用fsockopen()函数比fopen()函数的优点:fopen()只会在PHP中已经将allow_url_fopen设置为真时才能使用,而fsockopen()并没有限制。
PHP Socket编程 之使用fsockopen()函数的更多相关文章
- Socket编程 之使用fsockopen()函数
fsockopen函数:初始化一个套接字连接到指定主机(hostname) get方式: client.php <?php //创建连接 $fp=fsockopen('localhost',80 ...
- socket编程中客户端常用函数
1 常用函数 1.1 connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客 ...
- socket编程中服务器端常用函数 以及简单实现
1 常用函数 1.1 socket() int socket(int family, int type, int protocol); socket()打开一个网络通讯端口,如果成功的话,返回一个 ...
- c++ 网络编程(五) LINUX下 socket编程 多种I/O函数 -以及readv和writev函数用法
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614056.html 一.多种I/O函数 前言:之前我们讲的数据传输一般Linux上用writ ...
- socket编程中客户端常用函数 以及简单实现
1 常用函数 1.1 connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客 ...
- socket编程相关的结构体和字节序转换、IP、PORT转换函数
注意:结构体之间不能直接进行强制转换, 必须先转换成指针类型才可以进行结构体间的类型转换, 这里需要明确的定义就是什么才叫强制转换. 强制转换是将内存中一段代码以另一种不同类型的方式进行解读, 因此转 ...
- socket编程:客户端与服务器间的连接以及各函数的用法
在认真的看UNP之前,一直被socket编程说的云里雾里,今天我要让大家从整天上认识socket编程,让我们知道socket编程的整个流程和各个函数的用法.这样:我们在写一些简单的socket编程时就 ...
- Socket编程(C语言实现):socket()函数英文翻译
最近开始研究使用Socket API来网络编程,想着把自己的感想.感悟写下来.我发现在编程之外还有不少概念性的东西要学习.我觉得应该有以下几点吧: 1.得了解下计算机网络的基本概念,如OSI的7层模型 ...
- php的socket编程(socket关键几个函数)
php的socket编程(socket关键几个函数) 一.总结 一句话总结: socket_create.socket_connect.socket_bind.socket_listen.socket ...
随机推荐
- 【Nginx】如何应对HTTP组态
相同的配置项可以在相同的时间内发生的多个块.例如HTTP片.server片.location片.阻断取之于在配置项值. 处理HTTP配置项分下面4个步骤: 创建数据结构用于存储配置项相应的參数 设定配 ...
- Team Foundation Server 2015使用教程--默认团队成员连接tfs及checkin操作
- boostrap-非常好用但是容易让人忽略的地方------row
row是非常好用但是却非常容易忽略的地方. 想实现内部元素相对父级的padding=0,则在父子中间加个row.如下图 列嵌套也是同样的道理 经验之谈:学会row的用法,在手机版布局的时候会很方便,否 ...
- [linux]scp指令(转)
Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程.从远程复制到本地是两种使用方式.这里有具体举例: ================== Linu ...
- 全栈JavaScript路(八)得知 CDATASection 种类 节点
CDATASection 只船舶类型节点 基于XML 文件.演出CDATA 数据. 构造函数: CDATASection function(){[native code]} CDATASection ...
- [置顶] think in java interview-高级开发人员面试宝典(二)
从现在开始,以样题的方式一一列出各种面试题以及点评,考虑到我在前文中说的,对于一些大型的外资型公司,你将会面临全程英语面试,因此我在文章中也会出现许多全英语样题. 这些题目来自于各个真实的公司,公司名 ...
- 王立平--android特权
//同意应用程序访问和更改checkin数据库"properties"数据表 android.permission.ACCESS_CHECKIN_PROPERTIES //同意应用 ...
- js实现双击后网页自己主动跑-------Day55
公司的界面设计环节总算是告一段落了,必需要承认的是,这段时间晚间的学习带给我非常多益处.在工作中偶尔的应用,效果出奇的好,收到领导和同事的一些小赞扬,表示非常欣慰,也长了点不少自信,尽管不理解,他们这 ...
- Spring MVC异常处理详解(转)
下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要实现HandlerExceptionReso ...
- DTD验证XML(转)
1.内部DTD 最简单的使用DTD的方法是在XML文件的序言部分加入一个DTD描述,加入的位置是紧接在XML处理指示之后.一个包含DTD的XML文件的结构为: <?xml ve ...