您的位置:

PHP获取文件大小及其应用

一、使用filesize函数获取文件大小

filesize是PHP自带的一个函数,可以获取指定文件的大小。下面是一个使用filesize函数计算文件大小的示例代码:

<?php
$file = 'example.txt';
$size = filesize($file);
echo "文件的大小为:" . $size . " 字节";
?>

执行上面的代码,输出的结果类似于:

文件的大小为:1024 字节

其中,$file为要获取大小的文件路径,$size为获取到的文件大小(以字节为单位)。

此外,由于filesize函数返回的是一个长整型数值,故在计算文件大小时需要注意单位转换,如将文件大小从字节转换为KB、MB等。

二、以人类可读的方式显示文件大小

我们通常会将文件大小转换为人类可读的格式,例如:1.5 MB3.2 GB等。以下是一个示例代码,可以将文件大小转换为KB、MB、GB等易于阅读的格式。

<?php
function formatSizeUnits($bytes)
{
    if ($bytes >= 1073741824) {
        $bytes = number_format($bytes / 1073741824, 2) . ' GB';
    } elseif ($bytes >= 1048576) {
        $bytes = number_format($bytes / 1048576, 2) . ' MB';
    } elseif ($bytes >= 1024) {
        $bytes = number_format($bytes / 1024, 2) . ' KB';
    } elseif ($bytes > 1) {
        $bytes = $bytes . ' bytes';
    } elseif ($bytes == 1) {
        $bytes = $bytes . ' byte';
    } else {
        $bytes = '0 bytes';
    }
    return $bytes;
}

// 获取文件大小并以易于阅读的方式显示出来
$file = 'example.txt';
$size = filesize($file);
echo "文件的大小为:" . formatSizeUnits($size);
?>

上述代码中的formatSizeUnits函数可以将文件大小由字节格式转换成易于阅读的格式(KB、MB、GB等)。此函数的输入参数为文件大小(以字节为单位),返回值为转换后的文件大小字符串。

运行上述代码,会以以下格式输出文件大小:

文件的大小为:1.00 KB

三、限制上传文件的大小

在使用PHP上传文件时,经常需要限制上传文件的大小。PHP可以通过检查上传文件的大小进行限制。以下是一个示例代码实现上传文件大小限制的方法。

<?php
// 允许上传文件的最大大小(以字节为单位)
$max_file_size = 1048576; //1MB

if ($_FILES['file']['error'] == UPLOAD_ERR_OK
    && $_FILES['file']['size'] <= $max_file_size
) {
    // 文件上传成功,执行上传操作
} else {
    // 文件上传失败,返回错误信息
    if ($_FILES['file']['size'] > $max_file_size) {
        echo "文件大小超过限制!";
    }
    if ($_FILES['file']['error'] != UPLOAD_ERR_OK) {
        echo "文件上传失败!";
    }
}
?>

上述代码中,$max_file_size为允许上传文件的最大大小(以字节为单位),$_FILES['file']为上传文件的信息(包括文件大小等信息)。首先需要判断上传文件是否存在,并且大小是否在允许范围内,然后再执行相应的上传操作或返回错误信息。

四、计算整个目录的大小

有时候,我们需要计算整个目录的大小,以便于给用户展示展示文件存储空间的使用情况。以下是一个示例代码,可以计算整个目录的大小。

<?php
function folderSize($dir)
{
    $total_size = 0;
    $files = scandir($dir);
    foreach ($files as $file) {
        if ($file === '.' || $file === '..') continue;
        $path = $dir . '/' . $file;
        if (is_file($path)) {
            $total_size += filesize($path);
        } else if (is_dir($path)) {
            $total_size += folderSize($path);
        }
    }
    return $total_size;
}

// 计算整个目录的大小
$dir = 'uploads';
$size = formatSizeUnits(folderSize($dir));
echo "目录的大小为:" . $size;
?>

上述代码中的folderSize函数会递归遍历目录$dir下所有子目录和子文件,然后累加所有文件的大小,并返回目录的大小(以字节为单位)。

运行上述代码,会以以下格式输出目录大小:

目录的大小为:4.45 MB

五、统计文件夹中所有文件数量

在进行文件管理时,我们可能需要知道文件夹中所有文件的数量。以下是一个示例代码,可以统计文件夹中所有文件数量。

<?php
function countFiles($dir)
{
    $total_files = 0;
    $files = scandir($dir);
    foreach ($files as $file) {
        if ($file === '.' || $file === '..') continue;
        $path = $dir . '/' . $file;
        if (is_file($path)) {
            $total_files++;
        } else if (is_dir($path)) {
            $total_files += countFiles($path);
        }
    }
    return $total_files;
}

// 统计文件夹中所有文件数量
$dir = 'uploads';
$num_files = countFiles($dir);
echo "文件夹中所有文件数量为:" . $num_files;
?>

上述代码中的countFiles函数会递归遍历目录$dir下所有子目录和子文件,然后返回文件总数。

运行上述代码,会以以下格式输出文件数量:

文件夹中所有文件数量为:47