gpt4 book ai didi

下载时 PHP 生成的 Excel 文件不同

转载 作者:行者123 更新时间:2023-12-01 14:01:52 24 4
gpt4 key购买 nike

我有一个 PHP 文件,它使用在 http://pear.php.net/package/Spreadsheet_Excel_Writer/ 中找到的模块生成 xls 文件

我可以很好地创建示例文档,当我打开它时,它看起来很好。

我的下一步是把它变成一个可下载的链接。为此,我这样做了:

    $mimeType = "application/vnd.ms-excel";
$file_name = "test.xls";
$file_path = "/tmp/".$file_name;
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Type: application/' . $mimeType);
header('Content-Length: '.$size);
header("Content-Disposition: attachment;filename=$file_name ");
header("Content-Transfer-Encoding: binary ");

// open the file in binary read-only mode
// display the error messages if the file can´t be opened
$file = & fopen($file_path, 'rb');

if ($file) {
// stream the file and exit the script when complete
fpassthru($file);
exit;

} else {
echo $err;
}

但是,当我下载该文件时,它在 Excel 和 OpenOffice 中都包含大量垃圾数据。 diff 表示/tmp 文件夹中的二进制文件和下载的文件彼此不同。我猜它与 header 或 fpassthru 有关,但我在调试问题时运气不佳。

关于问题是什么的任何想法?

最佳答案

多个 Content-Type header 是不必要的。您实际上是在说该文件同时是松饼、比萨饼和福特金牛座。您只需要 application/octet-stream 版本,除非您想提供准确的 mime 类型。

此外,您是否有任何理由尝试将 fopen() 返回的文件句柄转换为引用?

尝试更简单的方法:

<?php

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment;filename=$file_name");

readfile("/tmp/test.xls");

exit();
?>

看看这样做是否更好。

关于下载时 PHP 生成的 Excel 文件不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704340/

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