我在这里遇到一个奇怪的问题:如果我尝试使用相同的下载脚本下载多个文件(我已尝试在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);
?>
答案 0 :(得分:2)
可能是底层Web服务器对来自同一IP的并发连接有限制吗?你能同时尝试两种不同的IP吗?
答案 1 :(得分:1)
不,不,不......问题在别的地方
您已开始会话(手动或自动) 和会话通常存储在文件中......
所以当打开第一个脚本然后打开会话和LOCK FILE ...其他请求必须等待解锁会话文件......
现有的两个解决方案...... - 使用自我类进行会话存储...而不锁定文件会话(错误脚本可能会覆盖会话数据) - 或者在file_get_content之前调用session_write_close();
答案 2 :(得分:0)
您可以尝试readfile($filename)
而不是$file_contents = file_get_contents($filename);print($file_contents);
由于readfile()
不会将内容存储在字符串中,因此它不会像file_get_contents()
那样占用内存。
@Pekka Gaiser对并发连接有一个很好的观点。另请参阅PHP正在使用的内存限制。