0

0

PHP怎么获取文件大小_PHP获取文件大小并格式化显示

星夢妙者

星夢妙者

发布时间:2025-09-15 21:13:01

|

594人浏览过

|

来源于php中文网

原创

PHP中获取文件大小需使用filesize()函数,返回字节数,结合formatBytes函数可转换为KB、MB等易读单位。该函数通过log计算数量级,支持精度控制与单位扩展,适用于本地文件但不支持远程URL。需注意权限、文件存在性及32位系统对大文件的限制。实际应用中常用于上传校验,需前后端协同判断,结合$_FILES['size']与php.ini配置,确保安全性与用户体验。

php怎么获取文件大小_php获取文件大小并格式化显示

PHP中获取文件大小主要通过内置的

filesize()
函数,它返回的是文件字节数。要格式化显示,通常需要结合数学运算和条件判断,将其转换为更易读的单位,比如KB、MB或GB。

解决方案

要获取文件大小并进行格式化显示,我们通常会先用

filesize()
函数拿到原始字节数,然后编写一个辅助函数来处理单位转换。这个过程其实挺直接的,但有些细节值得琢磨。

首先,

filesize()
函数接受一个文件路径作为参数,并返回该文件的大小,单位是字节(bytes)。如果文件不存在或者无法读取,它会返回
false

这个

formatBytes
函数的核心思路是,通过计算字节数对1024的对数,来确定它应该属于哪个数量级(KB、MB等),然后进行除法运算并保留指定精度。这比简单的
if/else if
链条要灵活一些,也更优雅,尤其当未来需要支持更大单位时,只需扩展
$units
数组即可。

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

PHP
filesize()
函数的潜在陷阱与跨平台兼容性

在使用

filesize()
时,我遇到过一些不是那么显而易见的问题,这玩意儿看似简单,实则有些坑。最常见的就是权限问题,如果PHP脚本运行的用户没有读取文件的权限,
filesize()
会直接返回
false
,而不是抛出一个明确的错误,这需要你用
file_exists()
或者
is_readable()
先进行判断,否则很容易在生产环境踩坑。

另一个值得注意的点是,

filesize()
无法直接获取远程文件(如HTTP或FTP URL)的大小。如果你想获取一个通过URL访问的远程文件大小,你需要采用不同的策略,比如使用
get_headers()
函数来获取HTTP响应头中的
Content-Length
字段,或者更复杂的,通过
cURL
来实现。这其实是两个不同的场景,
filesize()
专注于本地文件系统。

在跨平台兼容性方面,

filesize()
通常表现良好,但在某些老旧的32位系统上,如果文件大小超过2GB(2^31 - 1 字节),它可能会返回不正确的值,因为PHP的整型限制。不过,现在大多数服务器都是64位环境,这个问题已经很少见了。但如果你的应用需要部署在各种奇奇怪怪的环境中,了解这个潜在的限制还是有必要的。遇到这种情况,你可能需要考虑使用
stat()
函数,它能提供更详细的文件信息,并且在某些情况下可能对大文件有更好的处理。

文件大小格式化显示的最佳实践与代码优化思路

文件大小的格式化显示,不仅仅是把字节数转换成KB、MB那么简单,它还涉及到用户体验和代码的可维护性。我个人觉得,上面提供的

formatBytes
函数已经是一个不错的起点,但我们还可以从几个方面去思考优化。

jQuery多文件上传并获取大小与格式代码
jQuery多文件上传并获取大小与格式代码

jQuery多文件上传并获取大小与格式代码

下载

首先是精度问题。我们给

round()
设定了默认的
precision = 2
,这对于大多数情况来说是足够的,但有时候,比如文件特别小,只有几十个字节,显示成 "0.05 KB" 可能不如直接显示 "50 B" 来得直观。所以,在某些特定场景下,可以考虑对极小值进行特殊处理,或者动态调整精度。例如,如果转换后小于1,可以考虑直接显示为字节。

其次,关于性能。尽管文件大小获取和格式化通常不是性能瓶颈,但如果在一个循环中对成千上万个文件进行操作,那么即使是微小的优化也可能累积起来。上面我们使用了

log()
pow()
,这些数学函数在PHP中效率很高。避免在循环中重复定义函数或不必要的计算,确保
$units
数组是静态的或全局的,这些都是常规的优化思路。

最后,代码的可读性和可重用性。将格式化逻辑封装成一个独立的函数是最佳实践,这样可以在项目中的任何地方方便地调用,保持代码的DRY(Don't Repeat Yourself)原则。同时,给函数参数设置合理的默认值,比如

precision = 2
,也能让函数更易用。

实际项目中文件大小校验与上传限制的考量

在实际的Web开发中,文件大小的获取和格式化,最常见的应用场景就是用户上传文件。这里面涉及到的校验和限制,远比想象的要复杂一些,因为你需要同时在客户端和服务器端进行双重验证。

客户端(前端)的校验主要是为了提升用户体验。在用户选择文件后,通过JavaScript立即获取文件大小并进行初步判断,如果文件过大,可以直接提示用户,避免不必要的上传,减少服务器压力。但请记住,前端校验永远不可信,它很容易被绕过。

服务器端(后端)的校验才是重中之重。当用户提交文件后,PHP会通过

$_FILES['file']['size']
数组提供文件大小。我们需要在这里对文件大小进行严格的检查,确保它不超过我们设定的上限。这个上限通常会受到
php.ini
配置的两个参数影响:
upload_max_filesize
(单个文件最大上传大小)和
post_max_size
(POST请求总大小)。如果用户上传的文件超过了这些限制,PHP甚至可能在脚本执行前就拒绝接收文件,导致
$_FILES
数组为空或者不完整。

因此,在处理文件上传时,一个健壮的流程应该是:

  1. 前端预检: 使用JavaScript快速判断文件大小,提供即时反馈。
  2. 后端校验:
    • 检查
      $_FILES['file']['error']
      是否为
      UPLOAD_ERR_INI_SIZE
      UPLOAD_ERR_FORM_SIZE
      ,这表明文件大小超过了
      php.ini
      或HTML表单设定的限制。
    • 如果
      $_FILES['file']['size']
      有效,再用自定义的业务逻辑进行判断,比如你可能允许上传10MB的图片,但
      php.ini
      设置的是20MB。
    • 结合
      formatBytes
      函数,可以给用户提供更友好的错误提示,比如“文件大小不能超过5MB,您上传的文件是12.5MB。”

除了上传,文件大小在磁盘空间管理、日志记录、审计和数据备份等场景中也扮演着重要角色。例如,定期扫描某个目录,获取所有文件大小并计算总和,可以帮助我们监控磁盘使用情况,及时发现异常增长的文件或目录。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1883

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1241

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1136

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1398

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

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

精品课程

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

共754课时 | 17万人学习

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

共6课时 | 6.9万人学习

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

共13课时 | 0.8万人学习

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

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