Créer un fichier XML DOM DOM et créer un lien / une invite de fichier de sauvegarde sans écrire le fichier sur le serveur lorsque les en-têtes ont déjà été envoyés

StackOverflow https://stackoverflow.com/questions/202305

  •  03-07-2019
  •  | 
  •  

Question

J'ai créé une pièce XML DOM PHP et je l'ai enregistrée dans une chaîne comme celle-ci:

<?php
  // create a new XML document 
  $doc = new DomDocument('1.0');
  ...  
  ...
  ...
  $xmldata = $doc->saveXML();
?>

Je ne peux plus utiliser les en-têtes pour envoyer une invite de téléchargement de fichier et je ne peux pas écrire le fichier sur le serveur, ou plutôt je ne veux pas que le fichier soit étendu dessus.

Quelque chose comme un lien de sauvegarde de fichier ou une invite de téléchargement serait bien. Comment je le fais?

Était-ce utile?

La solution

D'après les commentaires, vous constatez que vous travaillez dans le cadre d'un système de gestion de contenu et que vous ne pouvez pas empêcher le contenu de s'afficher avant l'emplacement de votre code.

Si le script dans lequel vous travaillez a déjà un contenu en sortie (hors de votre contrôle), vous ne pouvez pas faire ce que vous essayez d'atteindre avec un seul script.

Votre script peut envoyer des en-têtes indiquant & "le contenu suivant est HTML &"; puis envoyez le HTML ou envoyez des en-têtes en indiquant & "; le contenu suivant est XML, est une pièce jointe et a un nom de fichier spécifique &"; Vous ne pouvez pas faire les deux.

Vous pouvez générer du code HTML contenant un lien vers un script distinct permettant de télécharger un fichier XML ou émettre un téléchargement de fichier sans générer de code HTML.

Par conséquent, vous devrez ajouter un lien de téléchargement dans la sortie du script CMS que vous modifiez, puis gérer le téléchargement dans un script séparé.

J'ai créé un exemple de travail qui devrait aider. L'exemple inclut un simple document HTML contenant un lien de téléchargement et un script PHP qui gère ensuite le téléchargement.

Consultez le code ci-dessous ou consultez le exemple en direct .

HTML (fluff superflue supprimée, pas nécessairement valide)

<html>
<head>
<title>XML Download Example</title>
</head>

<body>

<a href="download.php">Download XML example</a>

</body>
</html>

PHP

<?php
// Populate XML document
    $doc = new DomDocument();
    // ... various modifications to the document are made

// Output headers
    header('Content-type: "text/xml"; charset="utf8"');
    header('Content-disposition: attachment; filename="example.xml"');

// Output content
    echo $doc->saveXML();
?>

Si vous êtes totalement incapable de gérer le téléchargement via un second script (vous ne pouvez peut-être pas accéder aux données pertinentes), vous devrez repenser le problème.

Autres conseils

Vous pourriez activer output_buffering dans votre php.ini, vous pourriez alors avoir quelques options avec les en-têtes d'envoi.

http://us.php.net/manual/en /function.headers-sent.php

La même chose a fonctionné pour moi. Mais je n'utilise pas XML DOM. J'utilise SimpleXML pour analyser mon xml.

  

$ xml = new   SimpleXMLElement (& Quot; & Lt; root & Gt; & Lt; / root & Gt; & Quot;);

Je souhaite attribuer à ma vue un fichier XML personnalisé, qui sera généré en fonction des données fournies via le formulaire. En soumettant le formulaire, ils reçoivent le fichier XML en téléchargement avec le nom de leur choix.

  

en-tête ('Type de contenu: " text / xml " ;;   charset = & "; utf8 &";);

     

en-tête ('Contenu-disposition:   attachement;   filename = " '. $ _ POST [' filename '].'. xml " ');

     

echo $ xml - > asXML ();

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top