2013-11-04 19 views
0

我發現頭一場噩夢圍繞讓我的頭回顯到屏幕上,我有一個文件的用戶下載,工作正常。然而,我希望回顯屏幕上已發送xx文件;但是這個回聲只是放在發送的文件中。如何停止頭,所以我可以從相同的功能(PHP)

全部下載中心代碼如下:

function download() 
{ 
$orderNo = $_POST['orderNo']; 
$lines = file('F:/xamptest/htdocs/UniProject/upload/Amazon output.txt'); 
$lineCount = count($lines); 
if($orderNo>0&&$orderNo<=$lineCount) 
{ 
    $lineEx = explode("\t", $lines[($orderNo-1)]);  
    $file = fopen('Order.txt', 'w'); 
fwrite($file, $lineEx[8].PHP_EOL .$lineEx[17].PHP_EOL .$lineEx[18].PHP_EOL .$lineEx[19].PHP_EOL .$lineEx[20].PHP_EOL .$lineEx[21].PHP_EOL .$lineEx[22].PHP_EOL .$lineEx[23].PHP_EOL); 
fclose($file); 
$file = 'Order.txt'; 

ob_end_clean(); 
header("Cache-Control: private"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); 
header("Content-Type: application/zip"); 
header("Content-Transfer-Encoding: binary"); 
readfile($file); 
echo "Current order, number: ".$orderNo."<br> Has been downloaded"; 
} 
else 
{ 
echo "Please enter a valid Order Number between 1 and ".$lineCount; 
} 
} 

我似乎無法找到如何停止頭而不使用出口();這仍然意味着它不會顯示回顯,並且還會使用ob_end_clean();以任何其他方式導致發送的文件爲空。只有我能想到的其他東西是在它自己的函數中使用echo,但是它同時運行的頭文件仍將它放在文件中。

非常感謝您的幫助 - 湯姆。

+0

凡是輸出時發送的報頭將被包含在下載文件中。您不能用該文件發送另一條消息。所以你必須做的是假的。當你點擊這個文件的鏈接時,你仍然會在鏈接頁面上。您可以使用JavaScript來點擊鏈接,顯示一條消息。有幾個下載網站只是將您鏈接到一個頁面,顯示「您的下載很快就會開始」,他們將顯示該頁面並將您重定向到一個下載文件(或發送標題的腳本)。 –

回答

0

什麼你處理的是一個HTTP請求請求一個URL的HTTP請求的瀏覽器,服務器發送一個響應。點擊鏈接→瀏覽器發送請求→服務器發送HTML頁面作爲響應。使用Chrome瀏覽器,Safari或Firefox + Firebug,並使用其Web Inspector /開發工具中的Network選項卡進行遊戲,以便真正瞭解所發生的事情。

如果你想下載一個文件,它的工作方式相同。只有服務器通過HTTP頭告訴瀏覽器這個響應不是一個普通的HTML頁面,而是應該保存在磁盤上的文件。

正如您應該能夠看到的那樣,在一個響應中,無法同時用文件下載一個HTML頁面進行響應。沒有辦法做到這一點。您必須先輸出帶有該消息的HTML頁面,然後從那裏鏈接到文件下載。