PHP: fsockopen
fsockopen
(PHP 4, PHP 5, PHP 7, PHP 8)
fsockopen — 打开 Internet 或者 Unix 套接字连接
说明
fsockopen( string $hostname, int $port = -1, int &$error_code = null, string &$error_message = null, ?float $timeout = null): resource|false
初始化套接字连接到指定 hostname 资源。
如所支持的套接字传输器列表所述,PHP 支持 Internet 和 Unix 域中的目标。也可以通过
stream_get_transports() 获取支持的传输器列表。
默认情况下将以阻塞模式开启套接字连接。可以通过 stream_set_blocking() 将它转换到非阻塞模式。
stream_socket_client() 与之非常相似,而且提供了更加丰富的参数设置,包括非阻塞连接和提供流上下文的能力。
参数
hostname
如果安装了 OpenSSL,那么可以在主机名地址前面添加 ssl://
或者是 tls://,从而可以使用基于 TCP/IP 协议的 SSL 或者 TLS 的客户端连接到远程主机。
port
端口号。可以省略该参数或传 -1,则表示传输器不使用端口,例如 unix://。
error_code
如果提供该参数,则会保存调用系统级别 connect() 发生的系统级错误号。
如果 error_code 的返回值为 0,且函数的返回值为
false,则表明错误发生在 connect()
调用之前。这很可能是由于初始化套接字的问题。
error_message
错误信息将以字符串的信息返回。
timeout
设置连接的时限,单位为秒。当为 null 时,使用 default_socket_timeout php.ini 设置。
注意:
如果需要对为套接字读/写数据数据操作设置超时,请使用
stream_set_timeout(),fsockopen() 的
timeout 参数仅仅在连接套接字时适用。
返回值
fsockopen() 返回文件指针,可以跟其他文件函数(比如
fgets()、fgetss()、fwrite()、fclose()
和 feof())一起使用。如果调用失败,将返回 false。
错误/异常
如果 hostname 不是有效域,则抛出 E_WARNING。
更新日志
版本
说明
8.0.0
timeout 现在可以为 null。
示例
示例 #1 fsockopen() 示例
\n";} else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp);}?>
示例 #2 使用 UDP 连接
下面这个例子展示了怎么样在自己的机器上通过 UDP 服务“daytime”(端口号 13)中来检索日期和时间。
\n";} else { fwrite($fp, "\n"); echo fread($fp, 26); fclose($fp);}?>
注释
注意:
根据环境的不同,Unix 域或可选的连接超时可能无效。
警告
即使远程主机无法访问,UDP
套接字有时候也能打开且无错误。只有当从套接字读/写数据的时候才会出现错误。这样的原因是
UDP 是“无连接”协议,这意味着在真正发送/接收数据之前,操作系统不会尝试为套接字创建连接。
注意: 当指定数值型的 IPv6
地址(例如 fe80::1)时必须用方括号将 IP 围起来——例如,
tcp://[fe80::1]:80。
参见
pfsockopen() - 打开持久的 Internet 或 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() - 开启一个套接字连接
Curl 扩展
