gpt4 book ai didi

php - 写入 PHP 输出缓冲区,然后从缓冲区下载 CSV

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:01:05 24 4
gpt4 key购买 nike

我需要将 CSV 文件写入 PHP 输出缓冲区,然后在写入完成后将该文件下载到客户端计算机。 (我只想把它写在服务器上,然后下载它,这是可行的,但事实证明我在生产服务器上没有写权限)。

我有以下 PHP 脚本:

$basic_info = fopen("php://output", 'w');
$basic_header = array(HEADER_ITEMS_IN_HERE);

@fputcsv($basic_info, $basic_header);

while($user_row = $get_users_stmt->fetch(PDO::FETCH_ASSOC)) {
@fputcsv($basic_info, $user_row);
}

@fclose($basic_info);

header('Content-Description: File Transfer');
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=test.csv');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize("php://output"));
ob_clean();
flush();
readfile("php://output");

我不知道该怎么办。 CSV 文件下载但不显示任何内容。我假设它与我的 ob_clean() 和 flush() 命令的排序有关,但我不确定对这些东西进行排序的最佳方式是什么。

感谢任何帮助。

最佳答案

你做的有点过分了。创建脚本的唯一目的是输出 CSV。只需将其直接打印到屏幕上即可。不要担心 header 或缓冲区或 php://output 或类似的东西。

一旦您确认您正在正确地将数据打印到屏幕上,只需在开头添加这些标题:

<?php
header("Content-disposition: attachment; filename=test.csv");
header("Content-Type: text/csv");
?>

...确认正确下载文件。然后您可以根据需要添加其他 header (我上面包含的 header 是我自己使用的 header ,没有任何额外的麻烦来使它正常工作,其他 header 基本上是为了提高效率和缓存控制,其中一些可能已经得到适当处理由您的服务器决定,对您的特定应用程序可能重要也可能不重要)。

如果需要,可以使用 ob_start()ob_get_clean() 的输出缓冲将输出内容转换为字符串,然后您可以使用该字符串填写 内容长度

关于php - 写入 PHP 输出缓冲区,然后从缓冲区下载 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15769732/

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