我正在尝试获取文件的文件大小> 2GB,但无论64位还是32位版本,PHP接缝都会出现问题。在64位操作系统上运行64位处理器的PHP 64位版本上,它仍然使用filesize()函数返回错误的文件大小。在我遇到它之前它返回一个负数,或者什么都没有...如果文件大小正在改变,但是数字正在改变,但是对于文件不准确> 2gb ...如果php使用的是32位整数,我可以理解一个小于实际大小,零甚至是负数的数字,但正如我所读,php 64bit应该支持文件大小> 2GB ...
我也尝试过使用fseek结束和ftell:
$a = fopen("c:\big.txt", 'r');
fseek($a,0,SEEK_END);
$fs = ftell($a);
fclose($a);
echo $fs;
但那只是给了0 ......
答案 0 :(得分:0)
为什么不使用filesize
函数?
echo filesize('c:\big.txt');
此功能在32位系统上可能无法正常工作,但应在64位系统上提供正确的大小:
注意:由于PHP的整数类型已签名且许多平台使用32位整数,因此某些文件系统函数可能会为大于2GB的文件返回意外结果。
答案 1 :(得分:0)
手册实际上说"这可能会在您的平台上被破坏。哦,太糟糕了。"
此评论可能有所帮助:http://us3.php.net/manual/en/function.filesize.php#113457。它与您尝试的类似,但它似乎假设SEEK_END也不起作用。
function RealFileSize($fp)
{
$pos = 0;
$size = 1073741824;
fseek($fp, 0, SEEK_SET);
while ($size > 1)
{
fseek($fp, $size, SEEK_CUR);
if (fgetc($fp) === false)
{
fseek($fp, -$size, SEEK_CUR);
$size = (int)($size / 2);
}
else
{
fseek($fp, -1, SEEK_CUR);
$pos += $size;
}
}
while (fgetc($fp) !== false) $pos++;
return $pos;
}
免责声明:我没有尝试过这个。