2012-04-01 67 views
2

我有一个有趣的问题。我需要从一个asycronusly php文件下载进度条。我认为最好的方法是在下载开始之前脚本制作一个包含文件名和原始文件大小的txt文件。问题确定当前正在下载的文件大小?

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

  1. 文件更大然后2GB所以文件大小()函数是歇业
  2. 我试图找到一种不同的方式来确定本地文件的大小是这样的:

function getSize($filename) { 

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

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

有什么办法可以检查当前正在下载的文件的大小,文件大小是否会大于2 GB?

任何帮助,非常感谢。

+0

你有没有考虑到完全跳过PHP和使用HTTP HEAD请求,直接将文件大小从网络服务器? – 2012-04-01 18:27:18

+0

你的操作系统是什么? – safarov 2012-04-01 18:30:50

+0

米兰你的方式看起来很有趣,你可以给我一个代码示例如何做到这一点,或者你可以表达更多的想法吗? – Wermerb 2012-04-01 18:43:15

回答

1

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

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

只需更改您的操作系统和PHP以支持64位计算。你仍然可以使用filesize()。 从文件大小()手册:

Return Values

Returns the size of the file in bytes, or FALSE (and generates an error of level E_WARNING) in case of an error.

Note: Because PHP's integer type is signed and many platforms use 32bit integers, some filesystem functions may return unexpected results for files which are larger than 2GB.

+0

如果我使用filesize()即时通讯收到此错误:filesize()[function.filesize]:stat失败。我正在使用Linux进行开发,但它将在Windows上运行。两个系统都是64位。 – Wermerb 2012-04-01 18:41:27

+0

你使用文件大小的完整路径? '文件大小(“/完整/路径/到/下载/文件”);' – Superbiji 2012-04-01 18:44:12

+0

是的,我试过,以及它仍然是相同的错误消息 – Wermerb 2012-04-01 18:58:36