【发布时间】:2014-04-14 09:34:06
【问题描述】:
在网页上,我正在使用以下代码将一些数据写入 CSV 文件,最后使用 fclose(); 关闭
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='.$filename);
$out = fopen('php://output', 'w');
fputcsv($out, $cvs_cols);
fclose($out);
echo "HELLO WORLD"; // sneaks into CSV!?
为什么“HELLO WORLD”已经进入了 CSV 下载文件,但它已经有 fclose()?我想输出要在浏览器中显示的页面的其余 HTML。我该怎么做?
【问题讨论】:
-
"HELLO WORLD" 实际上是我想要发送到浏览器的 HTML,但就像我说的,它们进入了 CVS 文件。
-
虽然您还没有重新路由输出,并且由于正在执行的 PHP 代码仍在构建文档,所以 echo 的内容将附加到 CSV。
-
它不会继续输出到 CSV,但是因为您正在将 csv 写入 php://output 并且回显也转到 php://output,所以这两个要同一个地方
-
fclose() 为文件写入函数关闭文件句柄,如fwrite()、fputcsv()等....但是php://output 也是用于回显、打印等的标准输出流......这相当于必须为同一个文件提供文件句柄,而您只需关闭其中一个
-
您不能在同一请求中同时发送 HTML 响应和 CSV(或任何其他文件类型)响应