Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和JavaScript下载状态_Php_Javascript_Download_Statusbar - Fatal编程技术网

使用PHP和JavaScript下载状态

使用PHP和JavaScript下载状态,php,javascript,download,statusbar,Php,Javascript,Download,Statusbar,我目前正在研究一种在页面上显示文件下载状态的方法。 我知道这不是必需的,因为用户通常在浏览器中具有下载状态,但我希望用户保持在他下载的页面上,只要下载持续。要做到这一点,下载状态应该与文件的实际状态相匹配(而不是一个假进度条)。也许它还会显示用户下载的速度,并根据当前的下载速率估计所需的时间 这可以用PHP和Javascript实现吗?或者它真的需要Flash或Java 服务器上的某个地方不应该有关于谁以什么速度下载什么以及下载多少的信息吗 提前感谢您的帮助。跨浏览器确实不太可能,但请仔细研究一

我目前正在研究一种在页面上显示文件下载状态的方法。 我知道这不是必需的,因为用户通常在浏览器中具有下载状态,但我希望用户保持在他下载的页面上,只要下载持续。要做到这一点,下载状态应该与文件的实际状态相匹配(而不是一个假进度条)。也许它还会显示用户下载的速度,并根据当前的下载速率估计所需的时间

这可以用PHP和Javascript实现吗?或者它真的需要Flash或Java

服务器上的某个地方不应该有关于谁以什么速度下载什么以及下载多少的信息吗


提前感谢您的帮助。

跨浏览器确实不太可能,但请仔细研究一下。IE(像往常一样)是不玩球的罪魁祸首。

您可以使用两个单独的php文件来完成,第一个文件用于下载过程。 例如:


第二个文件将用于Ajax连续读取yourtempFile.txt。因为开始打印,所以不会使用会话和Cookies。

但我不确定这是否是我想要的。。。我认为xhr只是启动了一个请求,与其他发生的事情没有任何关系?请求(Xml Http request/xhr)在整个请求过程中都是可用的,因此通过定期轮询请求头的
内容长度
,您可以计算出下载了多少,花了多长时间,这样可以提供下载速度和估计完成时间。@Christian Romeni,我同意您将IE从类别浏览器中删除。注意:您可以将数据文件名更改为用户id或其他方法,以避免多次下载问题。但在这种情况下,我将下载速率限制为120kbps?每个用户只有两个文件,最多20个用户,所有用户都有一个用户名。所以我不会有问题…你可以删除睡眠(1);行,则不会有任何限制或限制下载速率。因此,数据写入期间将使用下载限制。例如,如果不使用任何sleep()命令,将$download_rate降低到1,则可以记录下载的全部进度。但请注意,对于大型文件,此写入过程可能会降低服务器性能。因为写作时间很长。您可以根据服务器性能、需要、用户数量等设置下载速率,。。。这取决于你的实践。好的,这更多的是关于将统计数据写入tmp文件,然后是实际下载速率…是的。您可以将此tmp文件用于任何应用程序(包括flash、ajax、刷新php页面…)
$strtTime=time();
$download_rate=120;   //downloading rate  
    $fp = fopen($real, "r");
      flush();// Flush headers
    while (!feof($fp)) {   
     $downloaded=round($download_rate * 1024);
        echo fread($fp,$downloaded );
        ob_flush();
       flush(); 
        if (connection_aborted ()) {

     // unlink("yourtempFile.txt" ;
            exit;
        }

     $totalDw +=$downloaded;
     // file_put_contents("yourtempFile.txt", "downloaded: $totalDw ; StartTime:$strtTime");
          sleep(1);
    }
    fclose($fp);
   // unlink("yourtempFile.txt") ;