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 ...
随机推荐
- VIM
初步
按i前插入字符.a在光标后追加字符 ctrl+d将光标下称半个窗体.按Ctrl+u将光标上移半个窗体 在输入模式下:ctrl+h删除字符,ctrl+u删除行.ctrl+w删除字 命令模式下.x删除字符 ...
- Java学习路径:不走弯路,这是一条捷径
1.如何学习编程? JAVA是一种平台.也是一种程序设计语言,怎样学好程序设计不只适用于JAVA,对C++等其它程序设计语言也一样管用.有编程高手觉得,JAVA也好C也好没什么分别,拿来就用.为什么他 ...
- Unity3d 网络编程(三)(Unity3d内置简单的网络server编制)
使用Unity3d内置的网络建立一个简单的server.主机时,请使用机器.创建一个client连接到本机. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv ...
- 【SSH2(实用文章)】--Struts2文件上传和下载的例子
回想一下,再上一篇文章Struts2实现机制,该步骤做一步一步来解决,这种决心不仅要理清再次Struts2用法.映射机制及其在深入分析.最后一个例子来介绍Struts2一种用法,这里将做一个有关文件上 ...
- ext3文件系统反删除利器ext3grep应用实战
推荐:10年技术力作:<高性能Linuxserver构建实战Ⅱ>全网发行,附试读章节和全书实例源代码下载! 一."rm –rf"带来的困惑 国外一份非常著名的Linux ...
- [Oracle] 分析功能(1)- 语法
语法概览 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGJhbm90ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...
- Shell 文字 顶替tomcat星团war包裹
执行前server造成免费ssh登陆. 修改配置文件不是太大 您可以覆盖原有的配置 profile 简介 bak=/home/wsm/bak webapps=/home/wsm/webapps/WSM ...
- 熟人UML
UML,全名Unified Modeling Language.模语言.它是软件和系统开发的标准建模语言.主要是以图形的方式对系统进行分析.设计. 同一时候,UML不是一个程序设计语言,也不是一个形式 ...
- 在.NET Fiddle有趣的沙盒代码
在.NET Fiddle有趣的沙盒代码 笔者:Tony Patton | 托尼·巴顿译:PurpleEndurer,2014-11-18,第1版 C#和VB.NET开发者能够使用.NET Fiddle ...
- oracle11g ASM(修复损坏的磁盘组头asm修复2)
--编KFED [oracle@rac2 lib]$cd $ORACLE_HOME/rdbms/lib [oracle@rac2 lib]$ pwd /u01/app/oracle/product/1 ...