0

我想我必须崩溃并寻求帮助。(应该在 3 天前完成!)

这就是发生的事情......

  • PHP 读取会话和发布变量,从 mysql 查询构建一个 .csv 文件。
  • 它会尝试打开“另存为”对话框,完成后跳转到另一个页面。
  • 我正在使用嵌套函数,但是在运行时,对话框似乎被运行了并且永远不会出现。
  • 单独的功能工作正常。
  • 运行时,“另存为”对话框不等待用户输入
  • 谁能看到我做错了什么,或者你能改变我的想法吗?
  • $filename 指向服务器上创建的 CSV 文件
  • $suggname 是用户应该在对话框中看到的默认文件名。

编码:

holdit($filename,$suggname);

function holdit($filename,$suggname) {
  $fp=@fopen($filename, 'rb');
  if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
    header('Content-Type: "application/octet-stream"');
    header('Content-Disposition: attachment; filename="'.$suggname.'"' );
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Transfer-Encoding: binary");
    header('Pragma: public');
    header("Content-Length: ".filesize($filename));
  } else {
    header('Content-Type: "application/octet-stream"');
    header('Content-Disposition: attachment; filename="'.$suggname.'"' );
    header("Content-Transfer-Encoding: binary");
    header('Expires: 0');
    header('Pragma: no-cache');
    header("Content-Length: ".filesize($filename));
  }
  fpassthru($fp);
  fclose($fp);
  jump();
}

function jump() {
    header('Location: return_from_csv.php');
}
4

1 回答 1

0

您正在向 HTTP 响应添加大量标头。其中之一是Location指示浏览器重定向。显然,它将其解释为比其他标题更高的优先级。

决定是否要在响应中重定向或提供文件,然后选择其中一个。

我怀疑你误解了Location标题。阅读:http ://en.wikipedia.org/wiki/HTTP_location

从外观上看,您尝试提供 CSV 文件,然后重定向到另一个页面。抱歉,您不能这样做。HTTP 响应只做一件事和一件事。您可以考虑使用target属性在另一个窗口中打开指向 CSV 文件的链接<a>

于 2012-08-21T14:17:28.887 回答