fsockopen 打开一个网络连接或者一个Unix套接字连接
发表日期:2021-07-01 08:56:40 | 来源: | | 浏览(1053) 分类:网络 函数
fsockopen
(PHP 4, PHP 5, PHP 7, PHP 8)
fsockopen — 打开一个网络连接或者一个Unix套接字连接
说明
string
$hostname
,int
$port
= -1,int
&$errno
= ?,string
&$errstr
= ?,float
$timeout
= ini_get("default_socket_timeout")): resource
初始化一个套接字连接到指定主机(hostname
)。
PHP支持以下的套接字传输器类型列表 所支持的套接字传输器(Socket Transports)列表。也可以通过stream_get_transports()来获取套接字传输器支持类型。
默认情况下将以阻塞模式开启套接字连接。当然你可以通过stream_set_blocking()将它转换到非阻塞模式。
stream_socket_client()与之非常相似,而且提供了更加丰富的参数设置,包括非阻塞模式和提供上下文的的设置。
参数
-
hostname
-
如果安装了OpenSSL,那么你也许应该在你的主机名地址前面添加访问协议
ssl://
或者是tls://
,从而可以使用基于TCP/IP协议的SSL或者TLS的客户端连接到远程主机。 -
port
-
端口号。如果对该参数传一个-1,则表示不使用端口,例如
unix://
。 -
errno
-
如果传入了该参数,holds the system level error number that occurred in the system-level
connect()
call。如果
errno
的返回值为0
,而且这个函数的返回值为false
,那么这表明该错误发生在套接字连接(connect()
)调用之前,导致连接失败的原因最大的可能是初始化套接字的时候发生了错误。 -
errstr
-
错误信息将以字符串的信息返回。
-
timeout
-
设置连接的时限,单位为秒。
注意:
注意:如果你要对建立在套接字基础上的读写操作设置操作时间设置连接时限,请使用stream_set_timeout(),fsockopen()的连接时限(
timeout
)的参数仅仅在套接字连接的时候生效。
返回值
fsockopen()将返回一个文件句柄,之后可以被其他文件类函数调用(例如:fgets(),fgetss(),fwrite(),fclose()还有feof())。如果调用失败,将返回false
。
错误/异常
如果主机(hostname
)不可访问,将会抛出一个警告级别(E_WARNING
)的错误提示。
更新日志
版本 | 说明 |
---|---|
4.3.0 |
在win32系统上增加了对时限设置(timeout )参数的支持。
|
4.3.0 | 在TCP/IP协议的基础上增加了SSL和TLS。 |
范例
示例 #1 fsockopen()的例子
01 | <?php |
02 | $fp = fsockopen ( "www.example.com" , 80, $errno , $errstr , 30); |
03 | if (! $fp ) { |
04 | echo "$errstr ($errno)<br />\n" ; |
05 | } |
06 | else { |
07 | $out = "GET / HTTP/1.1\r\n" ; |
08 | $out .= "Host: www.example.com\r\n" ; |
09 | $out .= "Connection: Close\r\n\r\n" ; |
10 | fwrite( $fp , $out ); |
11 | while (! feof ( $fp )) { |
12 | echo fgets ( $fp , 128); |
13 | } |
14 | fclose( $fp ); |
15 | } |
16 | ?> |
示例 #2 使用UDP连接
下面这个例子展示了怎么样在自己的机器上通过UDP套接字连接(端口号13)来检索日期和时间。
01 | <?php |
02 | $fp = fsockopen ( "udp://127.0.0.1" , 13, $errno , $errstr ); |
03 | if (! $fp ) { |
04 | echo "ERROR: $errno - $errstr<br />\n" ; |
05 | } |
06 | else { |
07 | fwrite( $fp , "\n" ); |
08 | echo fread ( $fp , 26); |
09 | fclose( $fp ); |
10 | } |
11 | ?> |
注释
注意:
因为环境的不同,某些情况下在Unix套接字连接或者自定义的连接设置连接时限(
timeout
)可能不会生效。
UDP套接字有些时候在即使远程主机未知的情况,也能打开,并且不发生任何错误。只有当你通过该套接字进行读写的时候才会发现错误。之所以会这样,是因为UDP是一个“非连接状态”的协议,那么这就意味着当前操作系统直到它(套接字)真正需要发送和接受数据的时候才会去尝试为其去建立连接。
注意: 当指定数值型的 IPv6 地址(例如
fe80::1
)时必须用方括号将 IP 围起来——例如,tcp://[fe80::1]:80
。
参见
- pfsockopen() - 打开一个持久的网络连接或者Unix套接字连接。
- stream_socket_client() - Open Internet or Unix domain socket connection
- stream_set_blocking() - 为资源流设置阻塞或者阻塞模式
- stream_set_timeout() - Set timeout period on a stream
- fgets() - 从文件指针中读取一行
- fgetss() - 从文件指针中读取一行并过滤掉 HTML 标记
- fwrite() - 写入文件(可安全用于二进制文件)
- fclose() - 关闭一个已打开的文件指针
- feof() - 测试文件指针是否到了文件结束的位置
- socket_connect() - 开启一个套接字连接
- The Curl extension
- PHP(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- checkdnsrr 给指定的主机(域名)或者IP地址做DNS通信检查(0)
- closelog 关闭系统日志链接(0)
- dns_check_record 别名 checkdnsrr()(0)
- dns_get_mx 别名 getmxrr()(0)
- dns_get_record 获取指定主机的DNS记录(0)
- fsockopen 打开一个网络连接或者一个Unix套接字连接(0)
- gethostbyaddr 获取指定的IP地址对应的主机名(0)
- gethostbyname 返回主机名对应的 IPv4地址。(0)
- gethostbynamel 获取互联网主机名对应的 IPv4 地址列表(0)
- gethostname 获取主机名(0)
- getmxrr 获取互联网主机名对应的 MX 记录(0)
- getprotobyname Get protocol number associated with protocol name(0)
- getprotobynumber Get protocol name associated with protocol number(0)
- getservbyname 获取互联网服务协议对应的端口(0)
- getservbyport Get Internet service which corresponds to port and protocol(0)
- header_register_callback 调用一个 header 函数(0)
- header_remove 删除之前设置的 HTTP 头(0)
- header 发送原生 HTTP 头(0)
- headers_list 返回已发送的 HTTP 响应头(或准备发送的)(0)
- headers_sent 检测 HTTP 头是否已经发送(0)
- http_response_code 获取/设置响应的 HTTP 状态码(0)
- inet_ntop Converts a packed internet address to a human readable representation(0)
- inet_pton Converts a human readable IP address to its packed in_addr representation(0)
- ip2long 将 IPV4 的字符串互联网协议转换成长整型数字(0)
- long2ip 将长整型转化为字符串形式带点的互联网标准格式地址(IPV4)(0)
- openlog Open connection to system logger(0)
- pfsockopen 打开一个持久的网络连接或者Unix套接字连接。(0)
- setcookie 发送 Cookie(0)
- setrawcookie 发送未经 URL 编码的 cookie(0)
- socket_get_status 别名 stream_get_meta_data()(0)
- socket_set_blocking 别名 stream_set_blocking()(0)
- socket_set_timeout 别名 stream_set_timeout()(0)
- syslog Generate a system log message(0)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 数组 函数(81)
- 类/对象 函数(18)
- 函数处理 函数(13)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- 字符串 函数(101)