第二个顺序函数踩踏第一个函数

时间:2012-08-21 14:01:59

标签: php function header

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

发生了什么......

  • PHP读取会话& post变量,从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');
}

1 个答案:

答案 0 :(得分:0)

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

决定是否要在回复中重定向或提供文件并执行其中一项操作。

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

根据您尝试提供CSV文件的内容,然后重定向到另一个页面。对不起,你不能这样做。 HTTP响应只做一件事而且只做一件事。您可以考虑使用target <a>属性在另一个窗口中打开指向CSV文件的链接。