在 Apache 上为 PHP 中生成的 KMZ 文件更正 header 和配置

Correct header and configuration for KMZ files generated in PHP on Apache

我有一个 PHP 页面,它包含一个 KMZ 文件供下载。 此 KMZ 包含带有 JPEG 叠加层的 KML。

我认为此文件是正确的,因为 Google 地球可以毫无问题地打开 KML。这是我用来从 KML 和 JPEG 叠加生成 KMZ 的片段:

$zip = new ZipArchive();

$tmp_file = tempnam('.','');
$zip->open($tmp_file, ZipArchive::CREATE);

$download_file = file_get_contents($kml);
$zip->addFromString(basename($kml),$download_file);

$download_file = file_get_contents($jpeg);
$zip->addFromString("files/".basename($jpeg),$download_file);

$zip->close();

header('Content-disposition: attachment; filename=test.kmz');
header('Content-Type: application/vnd.google-earth.kmz .kmz');
readfile($tmp_file);

问题是在 OS X 和 Windows 中都无法在 Google 地球中打开 KMZ。

但如果我在 Windows 中解压缩,生成的 KML+JPEG 可以毫无问题地打开。

在 OSX 中,我无法解压缩 KMZ,因为它已损坏。 我认为问题可能出在 header 或 mime 类型上。

有人有这方面的经验吗?

KMZ 具有压缩 doc.kml 文件的标准格式。所有的kml字符串应该写成doc.kml file.In PHP,我会做

$zip->addFromString("doc.kml", $kmlString);