2010-10-08 156 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

这是为什么被这么多投票呢? – 2010-10-08 14:29:58

+1

可能因为解释不清楚。我猜。 – 2010-10-08 14:32:56

+0

他使用'spits'而不是'display':o – bangbambang 2010-10-08 14:37:35

回答

3

您需要发送的内容部署标头强制下载

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

还设置了内容下明确键入:

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

没有冒犯,但是当你可以使用单引号时,转义双引号有什么意义? – fabrik 2010-10-08 14:29:00

+0

嗯,我刚刚从谷歌搜索中复制了这段代码,因为我记不起来了,所以没有真正的意思:) – 2010-10-08 14:30:48

+0

标题应该放在文件的开头是不是?我将如何获得文件名呢?它是可选的还是必需的? – macha 2010-10-08 14:33:07

0

如果我明白你的意思,你不会给你的用户一个下载文本文件的链接。如果是这样,您可以通过为此文件设置一个application/octet-stream -header(例如使用php)来完成此操作。

说明:在大多数情况下,我认为你不应该这样做。用户不知道如何处理可以通过浏览器打开的文件,并且如果用户不想下载这些文件,hea可以轻松地将浏览器配置为这个或那个。

+0

!我添加了这个头“header('Content-Type:application/octet-stream');”在顶部。但是无论何时加载页面,我都会弹出一个让我下载页面的弹出窗口。我不确定我犯了什么错误。 – macha 2010-10-08 14:43:04