xls文件php下载格式不同于文件扩展名指定的格式

我正在苦苦挣扎在PHP中的XML到XLS代码。
我有PHP代码,将MySql数据导出到XML,我有代码写入XML到XLS。
这一切工作正常,除了当我打开xls文件,我得到一个错误:

“试图打开的文件格式与文件扩展名不同,在打开文件之前,确认文件没有损坏,并且来自可靠的来源,你现在想打开文件吗?

我的代码:

<?php $file = 'filename'; $url = "$file.xml"; // from xml file header( "Content-Type: application/vnd.ms-excel" ); header( "Content-disposition: attachment; filename=$file.xls" ); // to xls file if (file_exists($url)) { $xml = simplexml_load_file($url); echo 'Voornaam'."\t" . 'Achternaam'."\t" . 'Geslacht'."\t" . 'Instrument'."\t\n"; foreach($xml->lid as $lid) { echo $lid->voornaam."\t" . $lid->achternaam."\t" . $lid->geslacht."\t" . $lid->instrument."\n"; } } ?> 

我发现它与MIME_Types有关
https://filext.com/faq/office_mime_types.php

header("Content-Type: application/vnd.ms-excel"); 适用于Excel的旧版本。 但是当我使用xlsxtypes时,文件根本不会打开。

就像我说的,这段代码运行良好,将xls格式的Excel文件下载到我的电脑中。 但是我怎样才能打开它没有错误?

我也想升级文件为xlsx格式,如果有人知道如何打开该格式的文件。

那么,你的头文件文件名都是“这是一个XLS文件” – 但它不是,它实际上是一个TSV文件(Tab-Separated Values)。 所以是的,信息是准确的:文件扩展名是误导性的。

要编写一个实际的,有效的XLS(或XLSX),最简单的方法是使用一个为你做这个的库 – 这两个格式都是复杂而棘手的。 我已经使用PhpExcel获得了最好的结果( 示例代码 )。

当Excel打开一个.xls文件时,它希望它是正常的旧的二进制Excel格式。 您似乎正在输出制表符分隔的文本(.tsv格式),Excel可以理解,但不希望打开时不发出警告。 我认为这个警告是在Excel 2007中引入的,而且早期的版本没有警告地打开。 不幸的是,我没有这方面的资源,只有个人的经验。