2016-09-29 3 views
0

Я использую Угловая сделать запрос POST на мыши, используя следующий код в мой контроллер ...угловой 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; 
?> 

Это работает только для текста/равнины.
Вам не нужно сначала сохранять содержимое в файл.

ПРИМЕЧАНИЕ
Вы не можете применять браузер для «загрузки» файл. Некоторые браузеры могут решить отобразить этот файл. «Незнакомым» является файл, тем более вероятно, что пользователю будет предложено загрузить его.

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.

Смежные вопросы