动态设置Content-Type

时间:2013-02-06 13:28:26

标签: php content-type

我有以下代码,我用来强制下载文件而不是在浏览器中打开。

if(isset($_POST['file_name'])){
$player_file = $_POST['file_name'];
$accessKey = "REMOVED";
$secretKey = "REMOVED";
$bucket = $_POST['bucket'];
$fname = $_POST['fname'];

$zip_url = el_s3_getTemporaryZipLink($accessKey, $secretKey, $bucket, $fname);
$mp3_url = el_s3_getTemporaryMP3Link($accessKey, $secretKey, $bucket, $fname);    


header('Content-type: audio/mpeg3');
header('Content-Disposition: attachment; filename="themixtapesite_'.$player_file.'"');
readfile($mp3_url);
exit();
}

如您所见,我传递了表单中的所有变量。然后使用该信息为存储在Amazon S3上的文件生成唯一的签名URL。

如果文件是MP3,我需要它使用$ mp3_url,如果是Zip文件,我需要使用$ zip_url。

这一定非常简单,但是我整天都坐在这个屏幕前,现在我的脑子一片空白!

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

  1. 这段代码是一个巨大的安全漏洞。您刚刚为愿意使用它的人打开了通往服务器的大门。
  2. 使用array of mime types确定超出扩展名的mime类型(但是,您需要进行额外的安全检查,因为仅仅根据扩展进行转发并不是一件明智的事情)。
  3. 使用switch语句确定要使用的函数。切换后你应该有$url - 只有一个存储扩展名的变量,而不是两个不同的变量。