0

可能重复:
标题位置 + 内容处置

我有一个使用生成excel报告的页面 header content-type并将生成信息保存在数据库中(例如谁生成了报告,何时等)我的问题是为什么我不能重定向页面。下面是示例代码/算法

// excel content
/* excel content populates here */

// output to excel file
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=".$positionFileName);
header("Cache-Control: max-age=0");

// save logs on the database  
/* save logs code executed here */

// redirect page to get the logs on the database that display on the web page
header("location: report.php");  *<--- I can't redirect to report.php*

这正是我想要的

用户要做的是选择报告类型,然后单击按钮生成以输出 excel 报告(打开/保存对话框)。然后,系统会将生成报告的日志保存在数据库中,然后显示在页面上。这就是为什么我想在report.php 上再次重定向它,以便日志将再次出现在数据库中以显示在浏览器上。

4

5 回答 5

2

标题正在碰撞。首先你说“这里有一个文件”,使用Content-Disposition: attachment,然后你说“哦,不,它没有来,对 XYZ 做一个额外的请求”,使用Location标题。您可以省略Content-标题以获得相同的结果。

然而,这对我有用:

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=foo.dat");
header("location: foo.dat");

在那里我被重定向到 foo.dat 文件,该文件显示在浏览器中(因此Content-headers 被忽略,因为在Location-header 之后发出了一个新请求,该请求在其响应中没有得到Content-headers。如果你想要要强制执行attachment,请将您的 Web 服务器配置为为某些扩展名或目录发出这些标头fpassthru($filename),或者在不使用Location-header 的情况下直接发出文件而不会遇到内存错误:

header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=".$positionFileName);
header("Cache-Control: max-age=0");

// save logs on the database  
/* save logs code executed here */

fpasstrhu($positionFileName);

但请注意,前三个header()语句之后的代码执行过程中产生的任何输出都会输出到浏览器,浏览器会认为是文件数据。

我猜这目前也在发生,导致header("location: ...")失败。启用错误报告以查看打印数据的原因和位置

于 2012-10-30T10:54:17.967 回答
1

它不起作用,因为您告诉浏览器它应该期待一个 Excel 文件。然后,在您告诉浏览器它应该期待一个 Excel 文件之后,您正试图重定向到另一个页面。问题在于你的方法。

于 2012-10-30T10:35:54.877 回答
-1

检查您是否尚未向浏览器输出任何内容。

“位置”通常也应该是“位置”。

于 2012-10-30T10:30:47.920 回答
-1

编辑此
标头(“位置:report.php”);

于 2012-10-30T10:32:49.923 回答
-1
header( "Location: http://" . strip_tags( $_SERVER ['HTTP_HOST'] ) . "/report.php" );

试试这个。我总是调用 HTTP 主机检查器,以确保我留在同一个域中。

编辑:我的错,我知道它是用大写字母 L 写的……抱歉之前的注释。

于 2012-10-30T10:35:06.283 回答