Erstellen Sie PHP DOM XML-Datei und erstellen Sie eine Datei speichern Link / prompt, ohne die Datei auf den Server zu schreiben, als Header bereits gesendet

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe ein PHP DOM xml Stück erstellt und gespeichert es in eine Zeichenfolge wie folgt aus:

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

Jetzt kann ich die Header nicht eine Datei herunterladen Aufforderung senden, und ich kann die Datei auf dem Server nicht schreiben, oder besser gesagt ich will nicht die Datei auf sie rumliegen.

So etwas wie ein diese Datei speichern oder eine Download-Aufforderung wäre gut. Wie mache ich das?

War es hilfreich?

Lösung

Ich sehe aus den Kommentaren, die Sie innerhalb eines CMS Framework arbeiten und sind nicht in der Lage Inhalte zu stoppen ausgegeben wird, bevor in dem der Code wird.

Wenn das Skript, in dem Sie arbeiten, bereits ausgegeben Inhalt hat (außerhalb Ihrer Kontrolle), dann können Sie nicht tun, was Sie versuchen, in nur einem Skript zu erreichen.

Das Skript kann entweder Header senden sagen: „der folgende Inhalt HTML ist“ -Ausgabe dann die HTML oder Header senden sagen: „der folgende Inhalt XML ist, eine Anlage und hat einen bestimmten Dateinamen“. Sie können nicht beides tun.

Sie können entweder die Ausgabe von HTML einen Link zu einem separaten Skript zum Herunterladen einer XML-Datei enthält, oder Sie können eine Datei herunterladen und Ausgang keine HTML-Ausgabe.

Daher werden Sie einen Download-Link in der Ausgabe des CMS-Skript hinzufügen, müssen Sie ändern und dann den Download in einem separaten Skript zu behandeln.

Ich habe ein funktionierendes Beispiel gemacht, die helfen sollen. Das Beispiel enthält ein einfaches HTML-Dokument einen Download-Link, und einen PHP-Skript enthält, die dann den Download behandelt.

Zeigen Sie den Code unten oder werfen Sie einen Blick auf die anschauliches Beispiel .

HTML (Fremd Flusen entfernt, die nicht unbedingt gültig)

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

Wenn Sie vollständig nicht in der Lage sind den Download über ein zweites Skript zu behandeln (vielleicht können Sie keinen Zugriff auf die relevanten Daten erhalten), müssen Sie, um das Problem neu zu denken.

Andere Tipps

Sie könnten output_buffering in der php.ini aktivieren, dann könnten Sie einige Optionen haben mit Header senden.

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

Das gleiche für mich gearbeitet. Aber ich bin mit nicht XML DOM. Ich benutze SimpleXML mein xml zu analysieren.

  

$ xml = new   SimpleXMLElement ( " ");

Ich mag meine Ansicht eine benutzerdefinierte XML geben, die in Abhängigkeit von den Daten erzeugt wurden, werden sie durch die Form geben. Auf submiting das Formular erhalten sie die xml als Download mit thier eigenen gewünschten Namen ein.

  

header ( 'Content-type: "text / xml";   charset = "UTF-8" ');

     

header ( 'Content-Disposition:   Anhang;   filename = "‘ [Dateiname ']. 'xml $ _ POST.'. "');

     

echo $ xml-> asXML ();

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top