您的位置:

如何获取PHP文件大小信息 - PHP filesize()

一、使用filesize()函数获取文件大小信息

在PHP中可以使用filesize()函数来获取指定文件的大小,该函数的语法如下所示:

    /**
    * 获取文件大小
    * @param string $filename 文件名称(包含路径)
    * @return int 文件大小或者在出现错误时返回FALSE
    **/
    filesize(string $filename) : int|false

该函数的参数是要获取大小的文件名(包含路径),函数的返回值是文件大小,单位是字节(byte),如果出现错误则返回false。

使用该函数获取文件大小信息的示例代码如下:

    $filename = 'path/to/file.txt';
    $filesize = filesize($filename);
    echo "文件".$filename."的大小是".$filesize."字节";

二、使用filesize()函数获取远程文件大小信息

filesize()函数不仅可以获取本地文件的大小信息,还可以获取远程文件的大小信息。要获取远程文件的大小,只需要将文件的URL作为函数的参数即可。示例代码如下:

    $url = 'http://www.example.com/path/to/file.txt';
    $filesize = filesize($url);
    echo "文件".$url."的大小是".$filesize."字节";

需要注意的是,如果要获取的远程文件是通过HTTP协议传输的,则需要在PHP环境中开启allow_url_fopen选项,否则会报出"failed to open stream: operation failed"的错误。

示例代码可参考下面的代码:

    ini_set('allow_url_fopen', 'On');
    $url = 'http://www.example.com/path/to/file.txt';
    $filesize = filesize($url);
    echo "文件".$url."的大小是".$filesize."字节";

三、将文件大小转换为可读性更好的格式

filesize()函数返回的是文件大小,单位是字节。但是,用户更习惯使用KB、MB或GB等更具有可读性的单位表示文件大小。为了满足用户的需求,PHP提供了一种将文件大小转换为更易读的格式的方法,代码如下:

    /**
    * 将字节数转换为更可读的格式
    * @param int $filesize 文件大小,单位是字节
    * @param int $precision 可选参数,规定小数点后保留几位。默认为2位。
    * @return string 可读的文件大小,如1.20kB、3.45MB、2.00GB等。
    **/
    function formatFilesize(int $filesize, int $precision = 2) : string {
        $units = array('B', 'KB', 'MB', 'GB', 'TB');
        $i = 0;
        while ($filesize >= 1024 && $i < 4) {
            $filesize /= 1024;
            $i++;
        }
        $filesize = round($filesize, $precision);
        return $filesize.$units[$i];
    }
    // 单位自动适配,是1024,而不是1000

该函数的第一个参数是文件大小,单位是字节;第二个参数是可选的,用于指定小数点后保留几位。该函数将文件大小按照1024字节划分为不同的单位(如B、KB、MB等),再将文件大小进行四舍五入处理,最后返回一个字符串表示的可读的文件大小。示例代码如下:

    $filesize = filesize('path/to/file.txt');
    $filesize = formatFilesize($filesize);
    echo "文件大小为:".$filesize;

四、其他注意事项

在使用filesize()函数获取文件大小时,需要注意一些问题:

  • 如果该文件不存在,则返回false。

  • 对于某些不支持文件指针的操作系统,filesize()函数无法获取超过2G的文件大小。

  • 如果要获取的文件是一个目录,则返回false。

  • 使用PHP的filesize()函数获取文件大小,并不是最好的方法。更好的方法是使用操作系统提供的stat()或fstat()函数。但是,这些方法需要对文件进行比较底层的处理,因此对于初学者来说使用filesize()函数还是比较方便的。

参考文献:
  1. PHP: filesize - Manual
  2. PHP: round - Manual