PHP下载脚本失败

时间:2015-09-02 21:16:24

标签: php download

每个人的好日子,

我需要使用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重新启动。

0 个答案:

没有答案