I have some KML files with client information in them, and want to make them accessible only by logged on users - then delivering them to google maps. So, the KML files are in a secure folder and as you'll see below I use readfile to send them out. Through various web browsers, I can open the link (google earth is configured, starts, and works great), giving that same link to google maps fails with a file not found error.
The minimalist [unsecured] version for debugging this "f.php" script -
<?php
$t = "test.kml";
header("Content-Type: application/vnd.google-earth.kml+xml");
header("Content-Length: " . filesize($t));
readfile($t);
?>
this allows a: http://www.mysite.com/f.php and b: http://www.mysite.com/test.kml
dropping a into http://maps.google.com/ fails and
dropping b into http://maps.google.com/ works fine.
I've read and worked it from a "header" perspective and am very sure I'm not introducing characters ahead of the header. I can in fact download the file just fine (saving or launching into Google Earth), but google maps is not accepting it.
The PHP script
Header from the PHP delivered version:
==============
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Sat, 23 Jan 2010 15:55:18 GMT
X-Powered-By: ASP.NET
X-Powered-By: PHP/5.2.11
Content-Type: application/vnd.google-earth.kml+xml
Content-Length: 390080
<?xml version="1.0" encoding="UTF-8"?>
... the rest of the file streams from here ...
==============
and direct from the IIS delivered version it looks like this:
==============
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
X-Powered-By: ASP.NET
Date: Sat, 23 Jan 2010 15:56:53 GMT
Content-Type: application/vnd.google-earth.kml+xml
Accept-Ranges: bytes
Last-Modified: Mon, 18 Jan 2010 20:57:57 GMT
ETag: "104b82e98098ca1:dd1"
Content-Length: 390080
<?xml version="1.0" encoding="UTF-8"?>
==============
I've tried various modifications to the headers, within the constraints of PHP control, but have been unsuccessful. For example, adding -
header("Accept-Ranges: bytes");
header("Last-Modified: Mon, 18 Jan 2010 20:57:57 GMT");
results in
==============
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Sat, 23 Jan 2010 16:03:47 GMT
X-Powered-By: ASP.NET
X-Powered-By: PHP/5.2.11
Accept-Ranges: bytes
Last-Modified: Mon, 18 Jan 2010 20:57:57 GMT
Content-Type: application/vnd.google-earth.kml+xml
Content-Length: 390080
<?xml version="1.0" encoding="UTF-8"?>
==============
I've looked at timing aspects, and the server response to either query is within a fraction of a second - the php being about 1/4 second slower.
An easy recommendation might be to post this into a google maps forum too, and I'm seeking out the right one to do so.