我正在编写一个脚本,将通过我的服务器将来自Web地址的文件流式传输给用户。目前它可以正常工作,但速度非常慢。
以下是相关代码:
/* Bytes per second */
define('TRANSFER_CAP', 1048576);
/* Hard part... stream the file to the user */
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename=' . $filename);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . $filesize);
$file = fopen($fileLocation, 'rb');
if(!$file) {
// TODO: handle errors
}
while(!feof($file)) {
echo fread($file, TRANSFER_CAP / 2);
ob_flush();
flush();
/* Limit the download speed by sleeping */
usleep(500);
}
这个脚本在我的本地机器上运行。当我在浏览器中请求文件(不通过脚本)时,下载速度可达到2.5MB/s,这是我的网络最大速度。然而,如果我运行脚本并尝试下载相同的文件,则只能获得约240-250KB/s的速度。
我知道不是脚本限制了传输速度,因为我将其设置为1MB/s。我也想不出这个脚本中有任何会导致速度变慢的开销较大的东西。
编辑:有趣的是,如果我改用
readfile()
,则几乎可以获得全部下载速度:readfile('http://cachefly.cachefly.net/100mb.test');
所以这一定是使用和的问题吗?