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

www.example.com

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

【示例】:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?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()并没有限制。

posted @   笠航  阅读(262)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示