【问题标题】:php headers doesn't downloadsphp标头不下载
【发布时间】:2014-04-23 11:15:17
【问题描述】:

我试图通过 PHP 进行“强制下载”,但得到的只是奇怪的符号。

我尝试添加标题(“application/typeofmyfile”)和标题(“Content-Disposition”)...以及来自这里的许多其他帖子的许多其他内容,但没有

我有这个:

$f_location = "path/myfile.nl2pkg";
$f_name = "myfile.nl2pkg";


header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$f_name); //Here also tried basename($f_name) but nothing
header("Content-Length: ".filesize($f_location));    
header("Content-Transfer-Encoding: binary");

我这样做是因为当用户点击“下载”按钮时,我使用 ajax 将他发送到页面以强制下载,将一些数据放入数据库中,然后刷新主页。

这是我第一次处理标题,对于我阅读的内容,不知道我是否做错了什么。

【问题讨论】:

  • 您的代码应该可以在干净的页面中运行。尝试运行 ajax,执行您必须做的事情,然后使用该代码打开一个新的空白页面,它应该可以运行。
  • 使用 header_sent 检查天气是否已经发送de1.php.net/manual/en/function.headers-sent.php的标题
  • 好的,为了尝试,我在浏览器中添加了一个新选项卡,并将所有变量放入标题中,下载工作正常。去做你问我的事,我会告诉你的。还要检查那个页面,谢谢。
  • 正如@rennyrocha 所建议的那样。您不能通过 AJAX 请求下载文件。您必须向服务器发出正常请求。当您返回您在此处使用的标题时,用户将看到一个下载框,他们将留在原始页面上。
  • 嗨,使用 Ajax 我只将变量传递给页面以强制下载(以及来自文件的 id 和用户将其添加到数据库),并使用 thouse 变量获取文件。正如rennyrocha 所说,我已经完成了ajax,然后使用location.href 打开了一个新链接并且工作正常。还将检查之前发送的标头。谢谢大家。

标签: php force-download


【解决方案1】:

您的标题代码看起来不错。问题似乎出在其他地方。

要调试您的代码,请使用headers_sent 来确定是否已发送标头。您还可以使用headers_list 查看已发送的标头。

if (headers_sent()) {
  var_dump(headers_list());
  die('Headers have already been sent');
  exit;
}

如果您在定义标题之前使用它,您可能会找到问题的根源。

【讨论】:

  • 嗨,我在发送标头之前已经这样做了,唯一向我展示的是“Powered By PhP”标头。正如我所说,第一次为它们工作。也尝试做一个 header_remove() 但什么也没做,所以我决定按照 renny 告诉我的那样做,为 ajax 创建一个页面以添加到数据库,另一个页面用于在 ajax 之后重定向到下载。我想把它放在第一页,但是,这暂时有效
  • 如果您看到Powered By PhP 标头,则表示您的标头已发送。尝试搜索?> <?php 和类似问题。它似乎你确实输出了一些东西,即使那只是一些空白。如果您也已经输出了一些内容,header_remove 将无法完成这项工作。
  • 谢谢,也许我得到的返回 true 或 false 的函数会导致问题?
  • 如果该真或假被回显。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2012-11-10
  • 1970-01-01
相关资源
最近更新 更多