繁体   English   中英

当用户正在下载时,为什么他们不能加载另一个页面?

[英]while a user is downloading, why cant they load another page?

下载脚本的相关代码:

$fp = @fopen($file, 'rb');

while(!feof($fp) && ($p = ftell($fp)) <= $end) {

    if ($p + $buffer > $end) {
        $buffer = $end - $p + 1;
    }
    echo fread($fp, $buffer);
    flush();
    if($limits["Max_DL"]) sleep(1); 
}

fclose($fp);

下载正在进行时,不会加载同一站点的任何其他页面。 但它们仍然会在另一个浏览器中加载。 我认为这与下载页面不断“加载”以阻止其他页面加载这一事实有关?

关于如何解决这个问题的任何建议? 对于大文件,我不希望用户在下载过程中无法浏览网站

如果您的下载脚本在任何时候调用了session_start() ,您需要先调用session_write_close() ,然后再将文件发送给用户 stream。

这将关闭 PHP session 文件并允许用户加载另一个页面,该页面可能正在调用session_start (因此正在等待对 session 文件的锁定)。

注意:您仍然可以在调用session_write_close()后读取$_SESSION ,但任何修改都将被丢弃 - 您刚刚告诉 PHP 您已完成对 session 的更改。

更多信息: http://us2.php.net/manual/en/function.session-write-close.php

PHP 不是传送大文件的最佳解决方案,因为您将在每个用户的整个下载过程中占用服务器上的一个进程; 如果您使用的是 Apache 或 nginx,您应该考虑使用mod_xsendfileXSendfile来提供文件。

如果那不可能,您总是可以尝试使用readfile() function 稍微简化传送文件的过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM