Search code examples
phphttp-headersmime-typeskmlkmz

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


I've got a PHP page that composes a KMZ file for download. This KMZ contains a KML with a JPEG Overlay.

I assume that this file is correct because the KML can be opened by Google Earth without problem. This is the snippet that I use to generate KMZ from KML and JPEG Overlay:

$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);

The problem is that both in OS X and Windows the KMZ cannot be opened in Google Earth.

But if I unzip it in Windows, the resulting KML+JPEG are opened without problems.

In OSX, I can't unzip the KMZ because it results corrupted. I think that the problem could be in header or mime type.

Does someone have experience with this?


Solution

  • KMZ has a standard format which compresses doc.kml file. All the kml string should be written in doc.kml file.In PHP, I would do

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