PHP如何判断文件是否空内容_PHP空文件检测法【状态】
发布时间 - 2026-02-02 00:00:00 点击率:次filesize() 是判断文件是否为空最直接可靠的方法,返回0即为空文件,但需前置校验 file_exists() 和 is_readable();逻辑空则需 file_get_contents() + trim() 判断。
用 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 或全空白行。
- 先用
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()等图像函数来判断空文件——它们对空文件会直接报错甚至崩溃
# php
# linux
# windows
# 字节
# csv
# win
# 配置文件
# 区别
# fopen
# fgets
# 接口
# bom
# 为空
# 能有
# 不存在
# 报错
# 先用
# 文件系统
# 返回值
# 的是
# 如果你
# 还能
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Laravel Fortify是什么,和Jetstream有什么关系
iOS验证手机号的正则表达式
油猴 教程,油猴搜脚本为什么会网页无法显示?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
详解vue.js组件化开发实践
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
简单实现Android验证码
在线教育网站制作平台,山西立德教育官网?
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Android实现代码画虚线边框背景效果
微信小程序 input输入框控件详解及实例(多种示例)
米侠浏览器网页背景异常怎么办 米侠显示修复
中山网站推广排名,中山信息港登录入口?
如何基于云服务器快速搭建个人网站?
黑客入侵网站服务器的常见手法有哪些?
Laravel怎么实现验证码(Captcha)功能
如何生成腾讯云建站专用兑换码?
php结合redis实现高并发下的抢购、秒杀功能的实例
中山网站制作网页,中山新生登记系统登记流程?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
Python面向对象测试方法_mock解析【教程】
如何在橙子建站中快速调整背景颜色?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
如何打造高效商业网站?建站目的决定转化率
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
JS去除重复并统计数量的实现方法
IOS倒计时设置UIButton标题title的抖动问题
手机网站制作与建设方案,手机网站如何建设?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
如何在云主机快速搭建网站站点?
Laravel如何自定义分页视图?(Pagination示例)
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel如何实现模型的全局作用域?(Global Scope示例)
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何获取上海专业网站定制建站电话?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何在万网利用已有域名快速建站?
Python文本处理实践_日志清洗解析【指导】


