0

0

PHP如何判断文件是否空内容_PHP空文件检测法【状态】

蓮花仙者

蓮花仙者

发布时间:2026-02-02 17:19:02

|

666人浏览过

|

来源于php中文网

原创

filesize() 是判断文件是否为空最直接可靠的方法,返回0即为空文件,但需前置校验 file_exists() 和 is_readable();逻辑空则需 file_get_contents() + trim() 判断。

php如何判断文件是否空内容_php空文件检测法【状态】

filesize() 判断文件是否为空最直接

空文件即内容长度为 0 字节filesize() 返回 0 就是可靠依据。它不读取内容,只查文件系统元数据,速度快、开销小。

注意:该函数在文件不存在或权限不足时返回 false,必须先用 file_exists()is_readable() 做前置校验,否则会触发警告。

  • filesize() 对符号链接默认返回目标文件大小;如需链接自身大小,加 @ 抑制警告并配合 lstat()
  • Windows 下 NTFS 卷上的稀疏文件可能有非零大小但实际无数据,但这种情况极少见,一般业务无需特殊处理
  • 若文件刚被 fopen(..., 'w') 创建但未写入,filesize() 仍返回 0,行为一致

file_get_contents() + trim() 检查“逻辑空”更实用

有些文件虽然有字节(比如只含空格、换行、BOM),但业务上视为“空”。这时不能只看 filesize(),得读内容再清理判断。

典型场景:用户上传的 CSV、TXT 或配置文件,可能带 UTF-8 BOM 或全空白行。

立即学习PHP免费学习笔记(深入)”;

Reword
Reword

AI文章写作,一个会思考的编辑

下载
  • 先用 file_get_contents($path) 读取,再用 trim($content) === '' 判断——trim() 默认清除所有常见空白字符(包括 \r\n\t\x00\x0B
  • 如果文件可能超大(>2MB),避免用 file_get_contents(),改用 fopen() + fgets() 逐行检查前几行是否全空白
  • UTF-8 BOM(\xEF\xBB\xBF)会被 trim() 忽略,无需额外剥离

stat()size 字段和 filesize() 效果一样

stat($path)['size']filesize($path) 底层调用相同系统接口,返回值完全一致。区别仅在于:stat() 还能顺便拿到修改时间、权限等信息。

如果你 already 在用 stat() 查其他属性,顺手取 ['size'] 更高效;否则没必要为单个 size 多一次系统调用。

  • stat() 在文件不存在时也返回 false,同样需要前置校验
  • 某些 NFS 或网络文件系统下,stat() 可能有缓存延迟,但 filesize() 同样受影响,无本质差异

容易被忽略的边界情况:文件存在但不可读,或被其他进程独占锁定

file_exists() 返回 true 并不代表你能读它;is_readable() 在 Windows 上对只读文件返回 true,但在 Linux 下受 umask 和 ACL 影响可能失败。

更隐蔽的是:Windows 下某进程以 CREATE_ALWAYS 打开文件后未关闭,会导致 PHP 的 filesize()file_get_contents() 都失败(报错 Permission denied)。

  • 统一做法:始终组合使用 file_exists()is_readable() → 再调用 filesize()file_get_contents()
  • 错误处理建议捕获 E_WARNING,或用 @ 抑制后检查返回值是否为 false
  • 生产环境别依赖 getimagesize()exif_read_data() 等图像函数来判断空文件——它们对空文件会直接报错甚至崩溃

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
fgets在c语言中的用法
fgets在c语言中的用法

本专题整合了c语言中fgets用法介绍,阅读专题下面的文章了解更多详细内容。

16

2025.08.27

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1209

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

235

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2181

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.01.19

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

879

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1135

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

807

2023.08.01

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

89

2026.02.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 10.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号