扫盲 2026.09.30 07:15 40 次浏览 0 条评论

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

行思随记

欢迎来到:行思随记