2016-09-30 61 views
1

在我的主要PHP文件中,我將一個數組傳遞給客戶端,我正在使用angular。這就是我呼應......被稱爲迴音阻塞標頭功能

header('Content-Type: application/json'); 
echo json_encode($response); //array passed to client 

現在在我的角度控制,我通過GET請求採取此數據...

$http.get("../server.php").success(function(data) { 
    $scope.names = data; 
}); 

我在index.php有一個下載按鈕,點擊後中,控制器採用此數據並進行POST請求我的submit.php文件,發送所述數組寫入此文件...

$postdata = file_get_contents("php://input"); 
$request = json_decode($postdata); 

//array converted to a string called $template  

$contentFile = fopen("file.txt", "w"); 
fwrite($contentFile, $template); 
fclose($contentFile); 

陣列被轉換成字符串,然後令狀十個文件。到此爲止,一切正常。但最後一塊代碼是從來沒有被稱爲...

header('Pragma: anytextexeptno-cache', true); 
header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private", false); 
header("Content-Type: text/plain"); 
header("Content-Disposition: attachment; filename=\"file.txt\""); 

我試圖強制下載,但頭功能被忽略。我認爲這是由於上面代碼的第一段摘錄中最初的echo聲明。

我該如何解決這個問題?我怎樣才能防止echo語句取消標題功能?我需要重定向頁面嗎?

回答

1

記住,標題()必須被調用之前的任何實際的輸出是 發送,或者通過正常的HTML標記,空行的文件,或者從PHP。

PHP doc

的腳本不能產生對以header()調用任何輸出成功,並且標題行實際上被髮送到客戶端代理。

您不能「防止回聲消除標題」。標題必須在響應的主體之前,並且響應是身體的一部分。在你的情況下,echo json_encode($response);(和任何其他輸出)應在最後header()聲明。

+0

但是,如果我把它放在echo語句之前,強制下載將永遠不會被調用,因爲我需要將該數組回顯到角度,然後將其傳遞給創建文件並允許用戶下載文件的腳本。我認爲如果我把它放在echo語句之前,就沒有什麼可以下載的,只有一個空文件 – Bolboa