Je vois des commentaires que vous travaillez à partir d'un cadre de la CMS et sont incapables d'arrêter le contenu d'être sortie avant où votre code sera.
Si le script dans lequel vous travaillez a déjà généré du contenu (hors de votre contrôle), vous ne pouvez pas réaliser ce que vous essayez d'obtenir en un seul script. Votre script peut soit envoyer des en-têtes indiquant "le contenu suivant est HTML" puis afficher le HTML ou envoyer des en-têtes en disant "le contenu suivant est XML, est une pièce jointe et a un certain nom de fichier". Vous ne pouvez pas faire les deux.
Vous pouvez soit sortir du HTML contenant un lien vers un script séparé pour télécharger un fichier XML, soit lancer un téléchargement de fichier et sortir le 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 fait un exemple de travail qui devrait aider. L'exemple inclut un document HTML simple contenant un lien de téléchargement, et un script PHP qui gère ensuite le téléchargement.
Voir le code ci-dessous ou jeter un oeil à la live example.
HTML (duvet étranger enlevé, 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 (peut-être vous pouvez ne pas avoir accès aux données pertinentes), vous devrez repenser le problème.
Qu'est-ce qui vous empêche d'utiliser les en-têtes pour envoyer une invite de téléchargement de fichier? – Wayne
Mes en-têtes sont déjà écrits, je travaille depuis l'intérieur d'un framework CMS (Drupal). Ainsi, je suis limité à juste avoir un morceau de code dans la page exécutée et si je me souviens bien des choses, vous ne pouvez pas écrire de nouveaux en-têtes une fois qu'ils ont été écrits ou quelque chose a été sortie. –
Reed - pouvez-vous ajouter le commentaire clarifiant ci-dessus à la question? –