使用PHP保护音频文件

使用PHP保护音频文件,php,audio,Php,Audio,我想用PHP保护文件。现在我有了这段代码,它能够提供可恢复的下载: $file_info = finfo_open(); $file_mime = finfo_file($file_info, $file_path, FILEINFO_MIME_TYPE); $file_size = filesize($file_path); $file_time = filemtime($file_path); $etag = md5($file_size . $file_time); ini_set("z

我想用PHP保护文件。现在我有了这段代码,它能够提供可恢复的下载:

$file_info = finfo_open();
$file_mime = finfo_file($file_info, $file_path, FILEINFO_MIME_TYPE);
$file_size = filesize($file_path);
$file_time = filemtime($file_path);
$etag = md5($file_size . $file_time);

ini_set("zlib.output_compression", "Off");

header("Accept-Ranges: bytes");
header("Content-Disposition: inline");
header("Etag: {$etag}");
header("Last-Modified: " . gmdate("D, d M Y H:i:s T", $file_time));
header("Cache-Control: public, must-revalidate");

if($_SERVER["HTTP_IF_NONE_MATCH"] == $etag) {
    header("HTTP/1.1 304 Not Modified");
}
else {
    set_time_limit(0);
    $file = fopen($file_path, "r");

    if($_SERVER["HTTP_RANGE"]) {
        preg_match("/bytes=(\d+)-(\d+)?/", $_SERVER["HTTP_RANGE"], $matches);
        $length = $matches[2] - $matches[1];
        fseek($file, $matches[1]);

        header("HTTP/1.1 206 Partial Content");
        header("Content-Length: " . ($matches[2] - $matches[1]));
        header("Content-Range: bytes {$matches[1]}-{$matches[2]}/{$file_size}");
    }
    else {
        header("Content-Length: {$file_size}");
    }
    header("Content-Type: {$file_mime}");

    while(!feof($file) && !connection_status()) {
        echo fread($file, 8192);
        ob_flush();
        flush();        
    }
    fclose($file);
}
这适用于所有类型的文件-音频(和视频)文件除外

它与Firefox兼容,Safari抛出错误(加载资源失败),但仍然可以播放,Chrome和Opera拒绝播放任何内容。即使设置了
Content-Disposition:inline
,Internet Explorer也会下载音频文件。当我手动将
Content Type
audio/mpeg
设置为
audio/mpeg3
时,尽管设置了
Content-Disposition:inline
,Chrome也会下载音频文件

我不知道为什么有些浏览器一直这样,我是不是遗漏了什么