PHP fsockopen 网络函数

  • 定义和用法

    fsockopen - 打开一个网络连接或者一个Unix套接字连接
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
    4.3.0 在win32系统上增加了对时限设置(timeout)参数的支持。
    4.3.0 在TCP/IP协议的基础上增加了SSL和TLS。
  • 语法

    fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
    
    初始化一个套接字连接到指定主机(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 如果传入了该参数,保留在系统级调用connect()中发生的系统级错误号。如果errno的返回值为0,而且这个函数的返回值为FALSE,那么这表明该错误发生在套接字连接(connect())调用之前,导致连接失败的原因最大的可能是初始化套接字的时候发生了错误。
    errstr 错误信息将以字符串的信息返回。
    timeout 设置连接的时限,单位为秒。
    注意:如果你要对建立在套接字基础上的读写操作设置操作时间设置连接时限,请使用stream_set_timeout(),fsockopen()的连接时限(timeout)的参数仅仅在套接字连接的时候生效。
  • 返回值

    fsockopen()将返回一个文件句柄,之后可以被其他文件类函数调用(例如:fgets()fgetss()fwrite()fclose()还有feof())。如果调用失败,将返回FALSE。
  • 示例

    <?php
    $fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30);
    if (!$fp) {
       echo "$errstr ($errno)<br />\n";
    } else {
       $out = "GET / HTTP/1.1\r\n";
       $out .= "Host: www.baidu.com\r\n";
       $out .= "Connection: Close\r\n\r\n";
       fwrite($fp, $out);
       while (!feof($fp)) {
           echo fgets($fp, 128);
       }
       fclose($fp);
    }
    
  • 相关函数

    pfsockopen() - 打开一个持久的网络连接或者Unix套接字连接。
    stream_socket_client() - 打开Internet或Unix域套接字连接
    stream_set_blocking() - 为资源流设置阻塞或者阻塞模式
    stream_set_timeout() - 在流上设置超时时间
    socket_connect() - 开启一个套接字连接