通常情况下,如果我在地址栏中输入一个媒体文件(例如。mp3文件)的URL, Chrome和Firefox将显示一个简单的播放器。
http://example.com/audio/myfile-1.mp3
通常会导致一个黑暗的页面,中间有一个简单的网络播放器,有一个播放按钮,我可以在浏览器中收听音频文件。
…浏览器没有让我下载
然而,当我的PHP处理_GET
参数时,以不同的名称交付该文件,它要求下载。
我的情况:实际文件位于:
www/html/example.com/audio/myfile-1.mp3
没有问题这个URL呈现一个web播放器,正确的,没有下载请求:
http://example.com/audio/myfile-1.mp3
问题(浏览器要求下载文件)
|浏览器地址:(不是实际文件)
http://example.com/aud-1.mp3
|. htaccess: require mod创建_GET
RewriteRule ^aud-([a-zA-Z0-9]+).mp3$ /audio.php?a=$1 [L]
…到目前为止,一切都很顺利……
|audio.php:
$id = $_GET[a];
$file = "www/html/example.com/audio/myfile-$id.mp3";
if (file_exists($file)) {
header('Content-Description: File Transfer');
header("Content-Transfer-Encoding: binary");
header('Content-Type: audio/mpeg');
header('Content-Disposition: attachment; filename="aud-'.$id.'.mp3"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file));
readfile($file);
exit;
}
…然后浏览器请求下载该文件,但不呈现音频文件以在浏览器中播放。这个文件是正确的,可以正确播放,并且可以在带有<audio>
标记的HTML中播放。因此,.htaccess或_GET
进程没有问题。
我想我的headers
之一一定是错的。为什么浏览器要求下载而不是播放?如何使音频文件URL在浏览器中像其他音频文件一样播放?
在输入这整个问题后,我想删除header('Content-Disposition: ...)
语句,这解决了它。这是使它在浏览器中下载而不是播放的部分。
有更好的解决方案吗?有更好的方法吗?