[英]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_xsendfile或XSendfile来提供文件。
如果那不可能,您总是可以尝试使用readfile()
function 稍微简化传送文件的过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.