2014-05-20 55 views
0

我有我從MySQL表中獲得的這些數據,並將它存儲在名爲$ arr的變量中。 我json_encoded它變成$ JSON變量:將PHP變量的內容下載到文件

$arr = array(); 
    while ($blah = mysqli_fetch_assoc(...)) { 
      $arr[key] = value; 
    } 
$json = json_encode($arr); 

,我試圖做的事情就是剛剛$ JSON變量的內容下載到一個以.json文件而不保存在服務器上。但是,當我嘗試這樣做,使用

 header('Content-Type: text/plain'); 
     header('Content-Disposition: attachment; filename='.$file.''); 
     header('Content-Transfer-Encoding: binary'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     echo $json; 

(其中$文件是一個生成的名稱已下載文件),我得到的是這樣的:

<!DOCTYPE html> 
<html> 
    <head> 
      .... 
    </head> 
    <body> 

<a ...>...</a>{"field":"value","field2":"ИзвеÑтиÑ","field3":"ÐОВ", ...} </body></html> 

或之外的整個PHP文件內容單詞......正如你所看到的那樣,編碼全部搞砸了。

你能幫我找出問題,並可能給我任何想法如何解決它。

任何幫助將非常感激:]

+0

如何,你可以創建一個文件,但不保存在服務器上? –

+0

您是否早先輸出已有數據/您是否將php文件包含在模板中?確保沒有輸出發送 – Stefan

+0

嗯,我的意思是獲取變量的內容並將它們寫入文件。就像 - 當用戶點擊下載時,他會得到一個提示,下載一個帶有變量$ json內容的.json文件。我希望你明白。 –

回答

2

這很可能是因爲你的echo $json前行輸出HTML中。 在header()函數之前,頁面上應該沒有任何內容打印。我通常有一個單獨的PHP文件(遠離頁面模板)來構建可下載的文件。

+0

是的,這是一種魅力......我想問題是我不太明白髮生了什麼。非常感謝:] –

0

建立在ThePav的答案上。

你不能在你的頭文件聲明之前有任何東西,I.E.如果您嘗試使用標題('location:something.html')重定向頁面;它不會工作,如果你在它之前回應任何東西。

我通常會建立一個「文件抓取器」的PHP文件,我可以傳遞一個ID哈希值,然後在我的下載鏈接上鍊接該PHP文件。

例如:

<a href="filegrabber.php?id=123345">Click here to download</a> 

此外,您可能希望通過對文檔的標題函數讀取,那裏有很多有用的信息出現。

http://www.php.net/manual/en/function.header.php

+0

也非常感謝。我會在未來的項目中記住這一點。 :] –

相關問題