检查 fclose() 的返回值是一件好事,因为某些操作系统只在关闭时刷新文件输出,因此可能会从 fclose() 返回错误。通过这样做,您可以捕获严重的导致数据丢失的错误。
我吃过这个苦头。
(PHP 4, PHP 5, PHP 7, PHP 8)
fclose — 关闭打开的文件指针
示例 #1 一个简单的 fclose() 示例
<?php
$handle = fopen('somefile.txt', 'r');
fclose($handle);
?>
检查 fclose() 的返回值是一件好事,因为某些操作系统只在关闭时刷新文件输出,因此可能会从 fclose() 返回错误。通过这样做,您可以捕获严重的导致数据丢失的错误。
我吃过这个苦头。
通常,在完成文件操作后始终关闭文件是一个好主意。很容易出现某些问题并损坏未正确关闭的文件。如果您担心效率,则开销可以忽略不计。
如果您在使用 stream_socket_server / stream_select 打开的一些客户端流正确断开连接时遇到问题,则应尝试使用 stream_socket_shutdown。
<?php stream_socket_shutdown($clientStream,STREAM_SHUT_RDWR); ?>
务必确保使用 fread() 或等效函数清除传入缓冲区中的所有传入数据包非常重要。尽管您可以调用 fclose(),但套接字直到传入数据包已清除后才会实际关闭。这可能会导致一些混淆。
如果您想通过一些函数串联文件句柄,并且每个函数都允许关闭文件,那么您可能首先要查看以下函数,看看句柄是否仍然有效。
打开文件时,通常会使用如下代码
if (!$fh = fopen($filename, $mode)) return false;
但是,如果您可能已经关闭了文件并且想要检查它,则类似的语句将不起作用。
不起作用:if (!$fh) end_of_chain();
使用更好:if (is_resource($fh)) end_of_chain();