当前位置:首页 > PHP > 正文内容

php feof使用注意,php feof socket套接字使用注意,

高老师5年前 (2020-09-02)PHP1199

服务端:

<?php
$socket = stream_socket_server('tcp://127.0.0.1:8888', $errno, $errstr);
while ($conn = stream_socket_accept($socket))
{
    fwrite($conn, "1024");
    fclose($conn);
}
fclose($socket);

客户端:

<?php
$socket = stream_socket_client('tcp://127.0.0.1:8888', $errorno, $errstr);
while (!feof($socket))
{
    echo fread($socket, 128);
}
fclose($socket);

这是一个很经典的socket的客户端和服务端,由于客户端不知道服务器端发送了多少数据,通过feof()判断是否读取完成。但是feof如果遇到一个socket套接字,并且这个套接字没有被关闭,就算读取不到数据也会一直阻塞等待不会继续执行,一直到最终超时,而超时的配置由php.ini的default_socket_timeout时间决定,也可以通过stream_set_timeout对单独的套接字设置超时时间。下面给出验证代码:

我们将服务器端代码改为如下:

<?php
$socket = stream_socket_server('tcp://127.0.0.1:8888', $errno, $errstr);
while ($conn = stream_socket_accept($socket))
{
    fwrite($conn, "1024");
}
fclose($socket);

 此时客户端获取到1024的数据后会一直阻塞不能退出进程,因为服务器端发送完数据没有关闭客户端。而服务器端关闭客户端可以用fclose或者unset或者设置为null。通常我们不建议用feof来获取socket发送的数据,建议使用指定协议或者指定发送大小来解决问题。

另外feof在传递的文件指针无效的时候为一直返回true,你很有必要使用is_resource来判断一下,不正确的处理会陷入死循环。

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/154.html

分享给朋友:

“php feof使用注意,php feof socket套接字使用注意,” 的相关文章

PHP批量插入的2种方法速度对比

PHP批量插入的2种方法速度对比

代码1:for循环批量插入100W数据<?php set_time_limit(0); $servername = "localhost"; $username = "root"; $password ...

php无限查询下级,php递归统计下级总数,php 获取无限子级

php无限查询下级,php递归统计下级总数,php 获取无限子级

因项目需要需要统计用户无限下级计算分销佣金,计算每月分红,计算无限下级团队的业绩,需要先获得某个会员的无限下级成员。先看看数据库中的member表字段id            username       &...

 php xml字符串转数组,phpxml转数组,php 将xml转换成数组

php xml字符串转数组,phpxml转数组,php 将xml转换成数组

001源码:/*  * $xml_str是xml字符串  */ function  xmltoarray($xml_str) { //禁止XML实体扩展攻击 libxml_disable_entity_loader(true); //拒绝包含...

编写php com组件,php调用.net dll,php源码保护

编写php com组件,php调用.net dll,php源码保护

开发com组件可以用c++,vc++,net,我比较熟悉net,演示用dnet(1).创建项目:启动vs2017,新建项目,选择Visual C# ->Windows桌面->类库通用windows(2). 修改Com项目:点击 项目->项目属性,再点击应用程序->程序集信息,...

PHP二维数组排序,PHP多维数组排序, array_multisort()

PHP二维数组排序,PHP多维数组排序, array_multisort()

使用php函数array_multisort()即可实现和SQL一样的order by排序. 例如我们需要对会员表按照主键降序排列,年龄升序排列://会员表数据 $list = []; $list[] = ['mid' =>&n...

 php监听事件,php触发事件

php监听事件,php触发事件

逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event {     /** &nbs...