gpt4 book ai didi

php - 为什么 PHP 在 fclose() 之后继续输出到 CSV 文件?

转载 作者:行者123 更新时间:2023-12-03 20:30:31 25 4
gpt4 key购买 nike

在网页上,我使用以下代码将一些数据写入 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”在已经 fclose() 时进入 CSV 下载文件?我想输出要在浏览器中显示的页面的其余 HTML。我该怎么做?

最佳答案

在 1 个 HTTP 请求后跟随 1 个响应。您不能同时发送内容类型 text/csv 和内容类型 text/html (可能是 SPDY ,但不是纯 HTTP)。

fclose 关闭您的文件描述符,但不关闭浏览器的输出。

您还应该设置一个 Content-Length header 并输入文件大小。

Mark Ba​​ker 已经在评论中给出了最重要的一点:

echo 和写入 php://output 将内容放入同一流:STDOUT .其他选项是将 CSV 写入内存(但如果不使用它就毫无意义)或写入文件。阅读有关这些流的更多信息:http://www.php.net/manual/en/features.commandline.io-streams.php

可能的解决方案:

您需要 2 个 HTTP 请求。 1 用于下载,另一个用于您的 HTML。最流行的方式是首先使用 HTML 响应并放入类似内容

<meta http-equiv="refresh"
content="3; URL=http://yourserver.com/download.php?id=pdf&amp;id=123" />

这会在 3 秒后开始下载。

关于php - 为什么 PHP 在 fclose() 之后继续输出到 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com