如何获取磁盘上的文件大小,而不是文件大小?



如何在PHP中获取特定文件的磁盘大小?

echo filesize("test.txt");
//Size         100 KB (102,836 bytes)

但是在磁盘上我有:

Size on Disk 104 KB (106,493 bytes)

如何使用 PHP 获取磁盘大小?

听起来您只是想取filesize()返回的结果并四舍五入到最接近的 1024 的倍数(或任何驱动器的块大小(。以下是将最接近的 X 四舍五入的几种方法: 在 PHP 中向上舍入到最接近的 5 的倍数

要实现这一点,你需要使用 PHP 内置的 stat(( 函数。 filesize(( 只会返回文件的实际大小,有时可能比磁盘上的大小小得多(例如,如果您的块大小为 4096KB,而文件只有 1KB,那么您在磁盘上的大小将为 4096KB 对于 1KB 的文件(。我们特别感兴趣的是stat()返回的以下数组键:

块 - 分配的 512 字节块数 **

因此,我们只需要从数组中获取blocks键并将其乘以 512。您可以在下面看到不同的输出(基于 4096KB 块大小系统上的 5968KB 文件(:

echo filesize('test.txt');
echo stat('test.txt')['blocks'] * 512;

在我的机器上将返回:

5968
8192

这是因为我的块大小为 4096KB。我的文件是 5968KB,因此需要分配 2 个 4096KB 块。这相当于 16 个 512K 块,因此这就是我们如何获得正确的磁盘大小值。

如果您有兴趣,还可以使用以下数组键找到您的系统块大小stat()返回:

blksize - 文件系统 IO 的块大小 **

但是请注意,如果您在Windows服务器上,则根据以下文档中的说明,这将不起作用:

** 仅在支持 st_blksize 类型的系统上有效 - 其他系统(例如 Windows(返回 -1。

根据 http://php.net/manual/en/function.filesize.php

int filesize ( string $filename )应该有效

喜欢:

$filename = "path/to/file";
$size = filesize($filename);

最新更新