PHP filesize()On Files> 2 GB

Ren*_*ers 5 php signed filesize

我一直在讨论如何在PHP中获取> = 2 GB的文件的有效文件大小.

示例
这里我使用filesize()函数检查大小为3,827,394,560字节的文件的文件大小:

echo "The file is " . filesize('C:\MyFile.rar') . " bytes.";
Run Code Online (Sandbox Code Playgroud)

结果
这是它返回的内容:

该文件是-467572736字节.

背景
PHP使用有符号整数,这意味着它可以表示的最大数量是2,147,483,647(+/- 2 GB).
这是有限的地方.

Ren*_*ers 7

我尝试过并且显然有效的解决方案是使用 COM FileObject 的“大小”属性。我不完全确定它使用什么类型。

这是我的代码:

function real_filesize($file_path)
{
    $fs = new COM("Scripting.FileSystemObject");
    return $fs->GetFile($file_path)->Size;
}
Run Code Online (Sandbox Code Playgroud)

它被简单地称为如下:

$file = 'C:\MyFile.rar';
$size = real_filesize($file);
echo "The size of the file is: $size";
Run Code Online (Sandbox Code Playgroud)

结果

文件大小为:3,827,394,560 字节

  • 仅供参考 COM 对象仅表示 Windows (6认同)
  • @Juanma 假设?提出这个问题的同一个人在几秒钟后发布了这个答案。但是,如果您遇到此问题并且碰巧在此页面上绊倒了,那么出于显而易见的原因,您最好使用与操作系统无关的解决方案。 (3认同)
  • 问题是关于“C:\”中的一个文件,所以他假设环境是 Windows。 (2认同)

Bor*_*lid 5

http://us.php.net/manual/en/function.filesize.php#102135提供了一种完整且正确的方法,用于在 PHP 中查找大于 2GB 的文件大小,而无需依赖特定于操作系统的接口。

它的要点是您首先使用filesize获取“低”位,然后打开+查找文件以确定它包含多少个 2GB 的倍数(“高”位)。