我已经为此工作了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;
}
注释掉的是我尝试过的。注意......这个脚本有效。只是没有未经过数据处理的数据。 我完全迷失在这里。不是新手程序员,也不是专业人士。
答案 0 :(得分:0)
我发现了我的问题。我没有添加文件大小,所以它没有读取文件的长度。添加了这两行并完美无缺地工作
$size = filesize('../data/lib/'.$file);
header('Content-Length: ' . $size);