PHP Streams函数

PHP stream_set_blocking() 函数设置流上的阻塞或非阻塞模式。此函数适用于任何支持非阻塞模式的流(当前为常规文件和套接字流)。

语法

stream_set_blocking(stream, enable) 

参数

stream必填。 指定流。
enable必填。 如果enable为false,给定的流将切换到非阻塞模式,如果为true,则将切换到阻塞模式。这会影响 fgets() 等调用fread() 从流中读取。在非阻塞模式下, fgets() 调用将始终立即返回,而在阻塞模式下,它将等待数据可用

返回值

成功时返回 true,失败时返回 false。

示例:

下面的示例显示了stream_set_blocking()函数的用法。

<?php
$fp = fsockopen("www.example.com", 80);
if (!$fp) {
  echo "Unable to open\n";
} else {
  fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
  stream_set_blocking($fp, true);
  $res = fread($fp, 1000);

  $info = stream_get_meta_data($fp);
  fclose($fp);

  if ($info['timed_out']) {
    echo 'Connection timed out!';
  } else {
    echo $res;
  }
}
?> 

上述代码的输出将类似于:

HTTP/1.0 404 Not Found
Content-Type: text/html
Date: Sun, 24 Oct 2021 04:58:59 GMT
Server: ECS (dna/63B4)
Content-Length: 345
Connection: close

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 过渡//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>404 - Not Found</title>
    </head>
    <body>
        <h1>404 - Not Found</h1>
    </body>
</html>