2016-10-05 2 views
1

Я работаю над этим уже 5 дней ... срывая код и перестраивая его. Я пытаюсь принудительно загрузить mp3-файл. Когда у него нет специальных символов (амперсанд, цитата, апостроф), загрузка отлично работает. Я теряю все метаданные в файле, но файл загружается и воспроизводится.
Это мой скачать скрипт для загрузки файла:php header force загрузить return непригодный mp3

header('Content-type: audio/mpeg'); 
header('Content-Disposition: attachment; filename="TraxXMP3_'.$file.'"'); 
readfile($file); 
    exit; 

Мое скромное предположение данные из базы данных не возвращается/продезинфицировать правильно. Но неуверенный how.i пробовал это:

$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 Data. Я полностью потерян здесь. НЕ программист новичков, но не профессионал.

ответ

0

Я нашел свою проблему. Я не добавлял в него размер файла, поэтому он не читал длину файла. Добавлено эти 2 линии и работает безупречно

$size = filesize('../data/lib/'.$file); 
header('Content-Length: ' . $size); 
Смежные вопросы