2016-09-29 102 views
0

我使用的角度進行使用在我的控制器下面的代碼點擊一個POST請求......工作不正常(PHP)角度支柱

var request = $http({ 
    method: "post", 
    url: "../submit.php", 
    data: { 
     templateData: $scope.template 

    }, 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
}); 

我將數據發送到一個PHP文件名爲submit.php並且一切正常,submit.php接收數據。接下來我要處理的數據是寫入文件...

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

$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\""); 

全碼

<?php 

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

    $template = ""; 
    foreach ($request as $data) { 
     foreach ($data as $sub) { 
      for ($i = 0; $i < count($sub); $i++) { 
       $template .= $sub[$i]; 
      } 

     } 
    } 


$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\""); 

?> 
+0

只是爲了澄清:你希望查看你的網站的人下載文件?沒有辦法強制用戶下載某些內容,因爲這會是一個很大的安全漏洞。 – RobertAKARobin

+0

@RobertAKARobin類似的東西,你按下載按鈕,我希望它把字符串寫到一個文件,然後將它下載到用戶的計算機 – Bolboa

+0

現在發生了什麼?瀏覽器中顯示的是文件(它的內容)嗎? – Jeff

回答

0

你錯過的唯一的事情是實際輸出你的「文件」。

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

$template = ""; 
foreach ($request as $data) { 
    foreach ($data as $sub) { 
     for ($i = 0; $i < count($sub); $i++) { 
      $template .= $sub[$i]; 
     } 

    } 
} 

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\""); 

// here's the thing: 
echo $template; 
?> 

這隻適用於text/plain。
您不需要首先將內容保存到文件。

注意
你永遠不能強制瀏覽器「下載」文件。某些瀏覽器可能決定顯示該文件。文件的「陌生人」越有可能提示用戶下載。

0
<?php 

    $postdata = file_get_conteenter code herents("php://input"); 
    $request = json_decode($postdata); 

    $template = ""; 
    foreach ($request as $data) { 
     foreach ($data as $sub) { 
      for ($i = 0; $i < count($sub); $i++) { 
       $template .= $sub[$i]; 
      } 

     } 
    } 


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

/************ 
Return full path of text file in json 
***********/ 

?> 

並在ajax成功,您可以使用window.location函數在新窗口中打開該文件。