2014-04-23 38 views
0

我試圖通過PHP進行「強制下載」,但我得到的都是奇怪的符號。php頭文件不會下載

我嘗試添加

我已經得到了標題(「應用/ typeofmyfile」)和標題(「內容處置」)......以及從這裏許多其他後很多人,但沒有這樣的:

$f_location = "path/myfile.nl2pkg"; 
$f_name = "myfile.nl2pkg"; 


header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=".$f_name); //Here also tried basename($f_name) but nothing 
header("Content-Length: ".filesize($f_location));  
header("Content-Transfer-Encoding: binary"); 

我做它喜歡這樣,因爲當用戶點擊「下載」按鈕,使用Ajax我送他到頁面強制下載,把一些數據在數據庫中,然後刷新主頁面。

這是我第一次處理標題,而且我讀了什麼,不知道我是否做錯了什麼。

+1

你的代碼應該工作在一個乾淨的頁面..嘗試運行你的Ajax,做你必須做的,然後用該代碼打開一個新的空白頁面,它應該工作。 – rennyrocha

+0

使用header_sent檢查天氣或不檢查您的標題已發送http://de1.php.net/manual/en/function.headers-sent.php –

+0

好吧,爲了嘗試它,我在瀏覽器中添加了一個新選項卡,把所有的變量放在標題和下載工作。去做你問我的事,我會告訴你的。還要檢查那個頁面,謝謝。 – Cheshire

回答

0

你的頭文件看起來不錯。問題似乎在別的地方。

要調試您的代碼,請使用headers_sent來確定是否已經發送了標頭。您也可以使用headers_list查看已發送的標頭。

if (headers_sent()) { 
    var_dump(headers_list()); 
    die('Headers have already been sent'); 
    exit; 
} 

如果您在定義標題之前使用此權限,您可能會發現問題的根源。

+0

嗨,我已經完成了在發送標題之前,唯一顯示我的是「Powered By PhP」標題。正如我所說,第一次在他們身上工作。也嘗試做一個header_remove()但沒有,所以我決定讓它作爲renny告訴我,做一個頁面的Ajax添加到數據庫和另一個重定向後的AJAX到下載。我想在第一頁做出來,但是,如果你看到'Powered By PhP'頭部,這意味着你的頭文件已經發送,那麼這個工作在 – Cheshire

+0

那一刻起作用。嘗試搜索'?><?php'和類似的問題。看起來你似乎輸出了一些東西,即使這只是一些空白。如果你已經輸出了一些內容,'header_remove'將不會執行這項工作。 –

+0

謝謝,也許我得到的返回true或false的函數會導致問題? – Cheshire