2013-11-19 2 views
0

У меня есть кнопка загрузки, и когда я нажимаю на нее, вместо сохранения на диск она открывается в браузере. Я перепробовал кучу попыток сделать его открытым в браузере, но это не кажется, что сделать что-нибудькнопка загрузки - сохранение файла на диск вместо открытия

<?php 
// make a connection to the database 
require_once("connection/connection.php"); 

//retrieve the ID from the url to fetch the specific details 
if ($_GET['id'] != ""){ 
$item_id = $_GET['id']; 
$bad_id = FALSE;  
} 
else{ 
$item_id = ""; 
$bad_id = TRUE; 
} 

//select the specific item from the database 
// run if statement to ensure valid id was passed 
if (is_numeric ($_GET['id'])){ 
$query = "SELECT name FROM repository WHERE item_id = '$item_id'"; 
$result = mysql_query($query) or die(mysql_error()); 

// assign the values to an array 
$row = mysql_fetch_assoc($result); 

//assign the values from the array to variables 
$name = $row['name']; 
} 

// define path to the xml file 
$file = "xml/".$hud_name . "_cfg.xml"; 

// check to make sure the file exists 
if(!file_exists($file)){ 
    die('Error: File not found.'); 
} else{ 
    // Set headers 
    header("Content-Type: application/xml"); 
    header("Content-Disposition:attachment; filename=".basename($file).""); 
    readfile($file); 
} 
?> 

То есть download.php и, очевидно, находит файл, потому что оно не дает ошибку об этом не существует. Она также вторит обратно правильный путь к файлу

Затем на другой странице у меня есть:

<a href="download.php?id=<?php echo $item_id; ?>"><img src="images/download.png" alt=""/></a> 

Любые идеи, что не так?

+0

Для установки вам нужно имя basename ($ file) 'при настройке заголовка файла. Вы используете имя файла с указанным в нем способом – jszobody

+0

tbh Я не уверен, что такое basename. Должен ли я просто изменить это и оставить путь к файлу таким же? header ("Content-Disposition: attachment; filename = '". basename ($ file). "'"); Или я могу удалить часть xml и определить где-нибудь имя_базы? – user1547410

ответ

0

Ну, в конце концов решение оказалось простым, но я не видел никакой документации, говорящей, что заголовок должен быть самой первой строкой. Если я размещены:

header("Content-Type: application/xml"); 

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

Смежные вопросы