每个人的好日子,
我需要使用PHP脚本强制下载一些MP3(我想确保它在点击MP3链接时不会开始流式传输)。这是我现在使用的脚本:
<?php
@ini_set('error_reporting', E_ALL & ~ E_NOTICE);
@ini_set('zlib.output_compression', 'Off');
if(!isset($_GET['id']) || empty($_GET['id']))
{
header("HTTP/1.0 400 Bad Request");
echo ("No ID Give");
exit;
}
$filelist = array(
'000001' => array(
'filename' => 'djmix.mp3',
'folder' => 'http://www.example.com/music/download/',
'serverfldr' => '/home/content/html/music/download/'),
'000002' => array(
'filename' => 'othermix.mp3',
'folder' => 'http://www.example.com/music/download/',
'serverfldr' => '/home/content/html/music/download/')
);
$id = $_GET['id'];
$file = $filelist[$id]['filename'];
$folder = $filelist[$id]['folder'];
$serverpath = $filelist[$id]['serverfldr'];
if (is_file($serverpath . $file)){
$filesize = filesize($serverpath . $file);
$file = @fopen($serverpath . $file, "rb");
if ($file){
header('Pragma: public');
header('Expires: -1');
header('Cache-Control: public, must-revalidate, post-check=0, pre-check=0');
header('Content-Disposition: attachment; filename="' . $file . '"');
header('Content-Type: application/octet-stream');
header('Content-Length:' . $filesize);
set_time_limit(0);
while(!feof($file))
{
print(@fread($file, 1024*8));
ob_flush();
flush();
if (connection_status()!=0)
{
@fclose($file);
exit;
}
}
// file save was a success
@fclose($file);
exit;
}
else{
echo ('File cannot be opened');
}
}
else {
echo('Cannot find a file');
};
exit;
?>
我最大的问题是文件很大(从50MB到100MB),但似乎在慢速连接时,会出现某种超时......或者因为下载实际失败而发生了一些事情。 (它确实在Firefox中写了“FAILED”)。
在慢速互联网上的Firefox上,它给了我“失败” 如果我使用下载管理器(Mac版的速度下载),下载实际上是重置...是的,你正确阅读,重置...我的意思是什么?下载会持续一段时间,经过一段时间后,它会从Zero重新启动。