我正在使用 PHP 上传进度扩展来检索有关正在上传到我的网络系统的文件的信息。但是,对于大于 2GB 的文件,总字节数和剩余时间字段将作为负数返回。
Apache 已设置为确保最大 3GB 的文件可以上传到网站。我已经测试过这个并且它有效。然而,返回错误的纯粹是报告。
我想知道这是否与 PHP 值的限制有关,以及如何修复它。我相信系统正在使用 64 位整数。如下所示:
echo "PHP_INT_MAX: " . PHP_INT_MAX;
// PHP_INT_MAX: 9223372036854775807
这里有一些关于进度条如何工作和安装的额外信息:http://www.ultramegatech.com/blog/2010/10/create-an-upload-progress-bar-with-php-and-jquery/
要获取信息,我只需调用扩展函数:
$status = uploadprogress_get_info($unique_form_id);
返回总字节数、估计剩余时间、当前字节数等,如下所示(总字节数为负):
array(11) {
["upload_id"]=> string(32) "ec75a30c24177ec1579aea93b56224f2"
["fieldname"]=> string(9) "comp_data"
["filename"]=> string(15) "Size_2-09GB.zip"
["time_start"]=> string(10) "1325851749"
["time_last"]=> string(10) "1325851758"
["speed_average"]=> string(5) "93011"
["speed_last"]=> string(6) "112618"
["bytes_uploaded"]=> string(6) "837105"
["bytes_total"]=> string(11) "-2048166056"
["files_uploaded"]=> string(1) "1"
["est_sec"]=> string(9) "-76260228"
}
更新(2012 年 1 月 6 日):我还联系了此扩展的开发人员,看他们是否可以分享任何见解。
更新(2012 年 1 月 9 日):扩展的开发人员已回应指出存在与此问题相关的现有工单:https://bugs.php.net/bug.php?id=59918
更新(2012 年 1 月 16 日):已设法摆脱扩展返回的负值。但是,与 Windows 在属性窗口中显示的相比,返回的数字与实际总字节数相去甚远。
最佳答案
使用 float 并删除小数点 - 这适用于这些较大的数字:
$filesize = filesize($large_file);
printf(Filesize: %.0f\n", $filesize);
此答案将确认您是否使用 64 位整数:how to have 64 bit integer on PHP?
注意:尽管该问题还有另一个答案似乎表明 64 位整数在 Windows 上不可用 - 您使用的是什么操作系统?
关于PHP 扩展上传进度 - 返回负总字节数和剩余时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8755886/