1
我一直在這工作了5天...現在撕毀代碼並重建它。我試圖強制一個mp3文件下載。當它沒有特殊字符(&符,引號,撇號)時,下載工作正常。我放棄了文件中的所有元數據,但是文件下載並且可以播放。
這是我的文件下載下載腳本:php頭部力量下載返回無法使用的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;
}
註釋掉線是什麼,我都試過了。請注意...此腳本確實可行。只是不涉及unsanitized數據。 我完全迷失在這裏。不是新手程序員,但不是專業人士。