首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP头强制下载返回不可用的mp3

PHP头强制下载返回不可用的mp3
EN

Stack Overflow用户
提问于 2016-10-05 02:40:29
回答 1查看 118关注 0票数 1

我已经做了5天了.撕毁代码并重建它。我试图强制下载一个mp3文件。当它没有特殊的字符(符号,引号,撇号)时,下载工作正常。我丢失了文件中的所有元数据,但是文件可以下载,并且是可播放的。

这是我的文件下载脚本:

代码语言:javascript
运行
复制
header('Content-type: audio/mpeg');
header('Content-Disposition: attachment; filename="TraxXMP3_'.$file.'"');
readfile($file);
   exit;

我粗略的猜测是,数据库中的数据没有被正确地返回/净化。但不确定怎么做。我试过了:

代码语言:javascript
运行
复制
$var =  str_replace("'","%27", $var);
$var =  str_replace("%27", "'" , $var);
$var = htmlentities($var,ENT_QUOTES,'UTF-8');
$var = html_entity_decode($var,ENT_QUOTES,'UTF-8');

所有这些都将允许从数据库中输入和检索。它将作为修改后的字符串显示在数据库中,并返回到html页面。所有其他非转义文件将下载没有问题。只有当有转义代码时,它才会失败。

输出文件随字符串转义而变化。结果就像..。文件被传输,但没有内容。或者,返回文件时使用不可用的字符串(文件名的一部分没有mp3扩展名)。

这是整个文件下载头文件:

代码语言:javascript
运行
复制
if(isset($_GET['file'])){
$file = $_GET['file'];
$sql = "SELECT * FROM main_lib WHERE file_name='.$file.' LIMIT 1";
$query = mysqli_query($db_conn, $sql) or die (mysqli_error()); 
while ($row = mysqli_fetch_array($query)) { 
$count_dl            = $row['count_dl'];
}
//mysqli_free_result($query);
mysqli_query($db_conn, "UPDATE main_lib SET count_dl='$count_dl'+1 WHERE file_name='$file'");
/**
* 
*   EMAIL SCRIPT HERE
* 
*/
mysqli_free_result($query);
$file =     cleanVarsDn($file);
    header('Content-type: audio/mpeg');
    header('Content-Disposition: attachment; filename="TraxXMP3_'.$file.'"');
    readfile('../data/lib/'.$file);
    exit;
}

这是我的字符串转义文件:

代码语言:javascript
运行
复制
function cleanVarsUp($var){
    //$var = htmlentities($var,ENT_QUOTES,'UTF-8');
    //$var =  str_ireplace("\"",  """, $var);
    $var =  str_replace("'","%27", $var);
    return $var;
}
function cleanVarsDn($var){
    //$var =  str_ireplace("'",  "'", $var);
    //$var = html_entity_decode($var,ENT_QUOTES,'UTF-8');
    $var =  str_replace("%27", "'" , $var);
    return $var;
}

评论行是我尝试过的。注意..。这个脚本确实有效。只是没有未经消毒的数据。我在这里完全迷路了。不是新手程序员,但也不是专业人士。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-06 01:34:42

我发现了我的问题。我没有给它添加文件大小,所以它没有读取文件的长度。添加了这两行,工作完美。

代码语言:javascript
运行
复制
$size = filesize('../data/lib/'.$file);
header('Content-Length: ' . $size);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39864610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档