我已经做了5天了.撕毁代码并重建它。我试图强制下载一个mp3文件。当它没有特殊的字符(符号,引号,撇号)时,下载工作正常。我丢失了文件中的所有元数据,但是文件可以下载,并且是可播放的。
这是我的文件下载脚本:
header('Content-type: audio/mpeg');
header('Content-Disposition: attachment; filename="TraxXMP3_'.$file.'"');
readfile($file);
exit;我粗略的猜测是,数据库中的数据没有被正确地返回/净化。但不确定怎么做。我试过了:
$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扩展名)。
这是整个文件下载头文件:
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;
}这是我的字符串转义文件:
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;
}评论行是我尝试过的。注意..。这个脚本确实有效。只是没有未经消毒的数据。我在这里完全迷路了。不是新手程序员,但也不是专业人士。
发布于 2016-10-06 01:34:42
我发现了我的问题。我没有给它添加文件大小,所以它没有读取文件的长度。添加了这两行,工作完美。
$size = filesize('../data/lib/'.$file);
header('Content-Length: ' . $size);https://stackoverflow.com/questions/39864610
复制相似问题