2010-07-06 67 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

相關問題