问题以确定当前正在下载的文件大小


Issue to determine a currently downloading file size?

我有一个有趣的问题。我需要从一个异步php文件下载进度条。我认为最好的方法是在下载开始之前,编写一个txt文件,其中包括文件名和原始文件大小。

现在我们有了一个ajax函数,它调用一个php脚本来检查本地文件大小。我有两个主要问题。

  1. 文件大于2GB,因此filesize()函数不起作用
  2. 我试图找到一种不同的方法来确定本地文件大小,如下所示:

  function getSize($filename) { 
       $a = fopen($filename, 'r'); 
       fseek($a, 0, SEEK_END); 
       $filesize = ftell($a); 
       fclose($a);
       return $filesize;
  } 

不幸的是,第二种方式给了我很多错误,假设我无法打开当前正在下载的文件。

有没有什么方法可以检查当前正在下载的文件的大小,并且文件大小将大于2GB?

非常感谢您的帮助。

我使用exec()函数找到了解决方案:

exec("ls -s -k /path/to/your/file/".$file_name,$out);

只需更改操作系统和PHP即可支持64位计算。并且您仍然可以使用filesize()。From filesize()manual:

返回值

返回文件的大小(以字节为单位)或FALSE(并生成E_WARNING级别的错误)。

注意:因为PHP的整数类型是有符号的,许多平台使用32位整数,某些文件系统函数可能会意外返回大于2GB的文件的结果。