1

我在这里有一个奇怪的问题:如果我尝试使用相同的下载脚本下载多个文件(我尝试了 php.net 上的 5 个不同的脚本),第一个运行良好,但第二个延迟大约 60 秒从其请求之日起。如果我取消第一次下载,那么第二次会突然开始。我已经测试了从 apache 直接下载文件,一切正常。这是我尝试过的最后一个脚本:

<?php
$filename= $_GET['file'];

header("Content-Length: " . filesize($filename));
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename=writeToFile.zip');

$file_contents = file_get_contents($filename);
print($file_contents);
?>
4

3 回答 3

2

可能是底层 Web 服务器对来自同一 IP 的并发连接有限制吗?您可以同时从两个不同的 IP 尝试吗?

于 2009-11-26T14:33:19.937 回答
1

不,不,不……问题出在其他地方

您已经开始会话(手动或自动)并且会话通常存储在文件中......

所以当打开第一个脚本然后打开会话和锁定文件...其他请求必须等待解锁会话文件...

现有的两个解决方案...... - 使用 self 类进行会话存储......不锁定文件会话(错误脚本可能会覆盖会话数据) - 或在 file_get_content 调用 session_write_close() 之前;

于 2010-07-19T10:11:36.760 回答
0

您可以尝试readfile($filename)代替, $file_contents = file_get_contents($filename);print($file_contents);因为readfile()不会将内容存储在字符串中,因此它不会像这样占用内存file_get_contents()

@Pekka Gaiser 关于并发连接有一个很好的观点。还要看看你的 PHP 使用了什么样的内存限制。

于 2009-11-26T14:40:22.497 回答