无法下载文件 - PHP

时间:2010-10-08 14:24:45

标签: php download cakephp-1.3

这是我正在使用的代码。正如建议的那样,我添加了内容类型和处置的标题。

<?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”,并且没有任何链接显示在网页上。

我不确定自己是否犯了错误。

我不确定我是否在标题上犯了错误。

3 个答案:

答案 0 :(得分:3)

您需要发送内容处置标头以强制下载

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

还明确设置内容类型:

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

答案 1 :(得分:1)

添加标题Content-Disposition: attachment。见http://apptools.com/phptools/force-download.php

答案 2 :(得分:0)

如果我理解你的话,你不应该给你的用户一个下载文本文件的链接。如果是这样,您可以通过为此文件设置application/octet-stream - 标头(例如使用php)来完成此操作。

注意:在大多数情况下,我认为你不应该这样做。用户不会选择如何处理浏览器可以打开的文件,如果用户不想下载这些文件,那么他可以轻松地将浏览器配置为这个或那个。