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 |
【示例】:
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()并没有限制。
分类:
PHP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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工具