百科狗-知识改变命运!
--

fsockopen() - php 网络函数

乐乐1年前 (2023-11-21)阅读数 10#技术干货
文章标签文件

fsockopen()

(PHP 4, PHP 5, PHP 7)

打开一个网络连接或者一个Unix套接字连接

说明

fsockopen(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-levelconnect()call。

如果$errno的返回值为0,而且这个函数的返回值为FALSE,那么这表明该错误发生在套接字连接(connect())调用之前,导致连接失败的原因最大的可能是初始化套接字的时候发生了错误。

$errstr

fsockopen() - php 网络函数

错误信息将以字符串的信息返回。

$timeout

设置连接的时限,单位为秒。

Note:

注意:如果你要对建立在套接字基础上的读写操作设置操作时间设置连接时限,请使用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。

范例

Example #1fsockopen()的例子

使用UDP连接

下面这个例子展示了怎么样在自己的机器上通过UDP套接字连接(端口号13)来检索日期和时间。

注释

Note:

因为环境的不同,某些情况下在Unix套接字连接或者自定义的连接设置连接时限($timeout)可能不会生效。Warning

UDP套接字有些时候在即使远程主机未知的情况,也能打开,并且不发生任何错误。只有当你通过该套接字进行读写的时候才会发现错误。之所以会这样,是因为UDP是一个“非连接状态”的协议,那么这就意味着当前操作系统直到它(套接字)真正需要发送和接受数据的时候才会去尝试为其去建立连接。

Note:当指定数值型的 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() 开启一个套接字连接
  • TheCurl extension
just a quick note for users attempting https and thinking they must resort to curl or alternate methods -
you can use fsockopen, just read the docs closely. basically they are saying to use 'ssl://' for a HTTPS (SSL) web request.
so this would work for authorize.net, and others; even for that paypal IPN - however I think it would be best to leave the site and deal with paypal's form: 
This script checks specific ports so you need to have the correct port open on the server for this to work.
E.g if i have a windows domain controller and it is servering LDAP then the following would be used to check it is online:

for a webserver:

etc etc
-------------------------------------------------------- 

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)