Cree un archivo XML DOM de PHP y cree un enlace / aviso para guardar el archivo sin escribir el archivo en el servidor cuando los encabezados ya se hayan enviado.

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Creé una pieza XML DOM de PHP y la guardé en una cadena como esta:

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

Ahora no puedo usar los encabezados para enviar un mensaje de descarga de archivos y no puedo escribir el archivo en el servidor, o mejor dicho, no quiero que el archivo esté ahí.

Algo como un enlace para guardar este archivo o una solicitud de descarga sería bueno. ¿Cómo lo hago?

¿Fue útil?

Solución

Veo por los comentarios que está trabajando desde un marco CMS y no puede evitar que el contenido se emita antes de dónde estará su código.

Si el script en el que está trabajando ya ha generado contenido (más allá de su control), entonces no puede hacer lo que está tratando de lograr en un solo script.

Su script puede enviar encabezados diciendo " el siguiente contenido es HTML " luego envíe el HTML o envíe encabezados que digan " el siguiente contenido es XML, es un archivo adjunto y tiene un cierto nombre de archivo " ;. No puedes hacer ambas cosas.

Puede generar HTML que contenga un enlace a un script separado para descargar un archivo XML o puede emitir una descarga de archivo y no generar HTML.

Por lo tanto, tendrá que agregar un enlace de descarga en la salida del script CMS que está modificando y luego manejar la descarga en un script separado.

He hecho un ejemplo de trabajo que debería ayudar. El ejemplo incluye un documento HTML simple que contiene un enlace de descarga y un script PHP que luego maneja la descarga.

Vea el código a continuación o eche un vistazo al ejemplo en vivo .

HTML (pelusa extraña eliminada, no necesariamente válida)

<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 no puede manejar completamente la descarga a través de una segunda secuencia de comandos (tal vez no pueda acceder a los datos relevantes), tendrá que repensar el problema.

Otros consejos

Puede habilitar output_buffering en su php.ini, luego puede tener algunas opciones para enviar encabezados.

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

Lo mismo funcionó para mí. Pero no estoy usando XML DOM. uso SimpleXML para analizar mi xml.

  

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

Quiero dar a mi vista un xml personalizado que se generará dependiendo de los datos que proporcionen a través del formulario. Al enviar el formulario, obtienen el xml como descarga con su propio nombre deseado.

  

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

     

encabezado ('Contenido-disposición:   adjunto archivo;   filename = " '. $ _ POST [' filename '].'. xml " ');

     

echo $ xml - > asXML ();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top