PHP获取文件大小
取文件大小最常用的就一个函数:filesize()。它返回的是字节数,文件不存在或者没权限会返回 false 并抛个警告,所以最好先判断一下。
<?php
$file = 'test.zip';
// 先确认文件在,不然 filesize 会报警告
if (file_exists($file)) {
$size = filesize($file);
echo '字节数:' . $size;
} else {
echo '文件不存在';
}
字节数看着不直观,一般都要转成 KB、MB。写个小函数循环除 1024 就行。
<?php
function formatSize($bytes) {
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
$i = 0;
// 大于等于1024就往上进一级
while ($bytes >= 1024 && $i < 4) {
$bytes /= 1024;
$i++;
}
return round($bytes, 2) . $units[$i];
}
echo formatSize(filesize('test.zip'));
两个坑记一下。第一,PHP 会缓存文件状态,同一个文件被改过以后再取大小可能还是旧值,得先 clearstatcache() 清一下。第二,32 位环境的 PHP,filesize() 处理超过 2GB 的文件会出负数或者报错,这种大文件就换成 fseek 跳到文件末尾看位置。
<?php
// 大文件取大小的备用写法
$fp = fopen('big.iso', 'rb');
fseek($fp, 0, SEEK_END); // 指针挪到末尾
echo ftell($fp); // 当前位置就是大小
fclose($fp);
说点什么 0