2016-09-29 5 views
0

J'utilise angulaire pour faire une requête POST sur un clic en utilisant le code suivant dans mon contrôleur ...POST angulaire ne fonctionne pas comme prévu (PHP)

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

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

J'envoie les données à un fichier php appelé submit.php et tout fonctionne bien, submit.php reçoit les données. La prochaine chose que je fais avec les données écrire dans un fichier ...

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

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

Cela semble fonctionner, je reçois pas d'erreurs. Mais maintenant, la prochaine chose que je veux arriver est de télécharger le fichier dans le navigateur. Ce code devrait fonctionner, mais il ne pas télécharger le navigateur pour une raison quelconque ...

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

CODE COMPLET

<?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

Juste pour clarifier: vous voulez que la personne qui consulte votre site télécharge le fichier? Il n'y a pas vraiment moyen de forcer vos utilisateurs à télécharger quelque chose, car ce serait une grande faille de sécurité. – RobertAKARobin

+0

@RobertAKARobtenir quelque chose comme ça, vous appuyez sur le bouton de téléchargement, et je veux qu'il prenne la chaîne pour l'écrire dans un fichier, qui le télécharge ensuite sur l'ordinateur de l'utilisateur – Bolboa

+0

Que se passe-t-il maintenant? Le fichier (son contenu) est-il affiché dans le navigateur? – Jeff

Répondre

0

La seule chose que vous avez manqué est en fait sortie votre « fichier ».

<?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; 
?> 

Cela ne fonctionne que pour le texte/plaine.
Vous n'avez pas besoin d'enregistrer le contenu dans un fichier en premier.

NOTE
Vous ne pouvez jamais appliquer un navigateur pour « télécharger » un fichier. Certains navigateurs peuvent décider d'afficher ce fichier. Plus le fichier est "étranger", plus il est probable que l'utilisateur sera invité à télécharger.

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 
***********/ 

?> 

et en ajax succès, vous pouvez ouvrir ce fichier dans une nouvelle fenêtre en utilisant la fonction window.location.