2010-10-08 1 views
0

Это код, который я использую. Как я уже сказал, я добавил заголовки для типа контента и расположения.Невозможно скачать файлы - PHP

<?php 
header('Content-Disposition: attachment'); 
header('Content-Type: application/octet-stream'); 

$con = mysql_connect("localhost","root","admin"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("acl_cake", $con); 

$result = mysql_query("select * from attachments"); 

while($row = mysql_fetch_array($result)) 
{ 
echo '<a href="'.$row[2].'" target="_blank">Download</a>--'.$row[3].'<br>'; 
} 

mysql_close($con); 
?> 

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

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

Если у меня есть content-disposition:attachment; filename='file.txt', то при загрузке страницы появляется всплывающее окно для загрузки файла «file.txt», и ни одна из ссылок не отображается на веб-странице.

Я не уверен, что я что-то совершил с ошибкой.

Я не уверен, допустил ли я ошибку с заголовками.

+0

Почему это так сильно проголосовало? –

+1

Наверное, потому что объяснение непонятно. Я полагаю. –

+0

и он использует 'spits', а не' display': o – bangbambang

ответ

3

вам нужно отправить заголовок Content-Disposition, чтобы заставить скачать

header("Content-Disposition: attachment; filename=\"my.file\""); 

также установить тип контента в явном виде:

header('Content-Type: application/octet-stream'); 
+0

Не обижайтесь, но какой смысл избегать двойных кавычек, когда вы можете использовать одиночные? – fabrik

+0

Хм, я просто скопировал этот код из поиска Google, потому что я не мог точно запомнить, так что нет смысла :) –

+0

заголовки должны размещаться в начале файла, не так ли? как я могу получить имя файла тогда? Это необязательно или существенно? – macha

0

Если я понимаю вас правильно, вы не дадите своим пользователям ссылку на скачивание текстового файла. если это так, вы можете сделать это, установив application/octet-stream -header для этого файла (например, используя php).

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

+0

! Я добавил заголовок заголовка («Content-Type: application/octet-stream»); на вершине. Но всякий раз, когда я загружаю страницу, я получаю всплывающее окно, которое позволяет загружать страницу. Я не уверен, с чем я ошибаюсь. – macha