2010-07-06 34 views
2

只是一个快速 - 我最近编写了一个PHP脚本,它使用API​​ DOM动态创建XML文件。所以我用这个开头:为什么浏览器试图下载我的php脚本文件?

$dom = new DOMDocument('1.0', 'UTF-8'); 

和结束时它看起来像这样:

$server = $_SERVER['DOCUMENT_ROOT']; 
$path_to_xml = "$server/project/file.xml"; 
file_put_contents($path_to_xml, $dom->saveXML()); 

它做我想要的一切,但为什么浏览器尝试下载这个PHP脚本,而不是只是运行它?请有人可以帮我解决这个问题。我很确定这很容易。 // -----------------------------------编辑 感谢您的回复。是的,我正在发送自定义标题,因为它是我动态创建的Google地图kml文件。

header('Content-type:application/vnd.google-earth.kml');

// Creates the root KML element and appends it to the root document. 
$node = $dom->createElementNS('http://earth.google.com/kml/2.0', 'kml'); 
$parNode = $dom->appendChild($node); 

这可能是因为这个原因吗?

+0

你使用什么网络服务器?它是Apache吗? – Mike 2010-07-06 10:11:14

+0

您是否发送任何自定义标题?有其他PHP脚本之前工作正常吗?你可以发布其他代码吗? – xil3 2010-07-06 10:13:53

回答

0

如果文件扩展名为.php,并且您的Web服务器配置正确,它将运行它。

您指定一个application/xxx内容类型,以便大多数浏览器将强制下载并使用脚本的名称作为文件名。

如果要强制从你的PHP文件名使用不同的文件名:

header('Content-Disposition: attachment; filename=your_requested_file.kml'); 
+0

谢谢虚拟的答案,但这不是我想要的。事情是我不想在这里下载任何东西。我只是想在后台创建.kml文件并将它放在服务器上的文件夹中,就是这样 - 无需下载 – Pavel 2010-07-06 11:03:18

+1

那么,为什么你要通过header()指定一个Content-Type到USER BROWSER,你想要吗?你告诉浏览器你会发给他一个文件,他下载它,就像你发送给他一样简单,他会下载一个0k文件。如果你不想让他下载这个文件就不要发送这个头文件。 – 2010-07-06 14:59:00

6

因为您的Web服务器未正确配置为处理PHP脚本。

+1

感谢您的提示。你能否提供更详细的信息?我需要在服务器配置中更改哪些内容? – Pavel 2010-07-06 10:25:24

+0

@Pavel请首先回答评论问题。 PHP是否安装?你使用什么服务器? – 2010-07-06 10:26:28

+1

这是apache和php安装,因为我运行其他脚本没有任何问题。 – Pavel 2010-07-06 10:41:00

0

我曾经历过它发生是由于在.htaccess一些错误,它可能看起来荒谬的,因为我没有提到了在.htaccess中看到的任何内容。你应该仔细看看它。

1

如果浏览器正在尝试下载PHP源代码,那么这意味着Apache未配置为运行PHP解释器和/或,如果您使用Linux,Unix或Mac OS X操作系统,Apache没有权限执行PHP脚本。

您需要按照Manually Configure PHP5 and Apache2的说明操作,以确保您的httpd.conf是正确的。

如果,另外,你正在运行的Apache在Linux,Unix或Mac OS X,那么你需要打开一个终端,cd到包含你的PHP脚本的目录,然后:

chmod a+x SCRIPT.php 

其中SCRIPT.php是您的PHP脚本的名称。

0

您可能没有发送正确的头:

<?php header ("content-type: text/xml"); 
1

我假设该命令发送标题:

header('Content-type: application/vnd.google-earth.kml'); 

如果你在服务器上写入文件,而不是打算发送任何响应给客户端,你为什么要向客户端发送一个头文件?

如果你的PHP文件只是要在服务器上写文件而不做别的事情,不要发送头文件或其他任何东西到客户端。

如果这没有帮助,请尝试重新描述您的问题。到目前为止,您已收到各种不同问题的答复。

0

我的猜测是浏览器没有尝试下载PHP脚本,但IS试图下载KML文件。注释掉header()行,看看它是否有效。在本地保存文件时,您不需要包含header()

+0

又太慢了。马克第一。 – Joseph 2010-07-06 13:28:28

相关问题