Crea il file xml PHP DOM e crea un collegamento / prompt per il salvataggio del file senza scrivere il file sul server quando le intestazioni sono già state inviate

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho creato un pezzo xml PHP DOM e l'ho salvato in una stringa come questa:

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

Ora non posso usare le intestazioni per inviare un prompt per il download dei file e non posso scrivere il file sul server, o meglio non voglio che il file sia posizionato su di esso.

Qualcosa come un collegamento per salvare questo file o una richiesta di download sarebbe buono. Come lo faccio?

È stato utile?

Soluzione

Vedo dai commenti che stai lavorando all'interno di un framework CMS e non riesci a fermare l'output del contenuto prima della posizione del tuo codice.

Se lo script in cui stai lavorando ha già prodotto contenuti (al di fuori del tuo controllo), non puoi fare ciò che stai cercando di ottenere in un solo script.

Il tuo script può inviare intestazioni con " il seguente contenuto è HTML " quindi genera l'HTML o invia le intestazioni dicendo " il seguente contenuto è XML, è un allegato e ha un certo nome file " ;. Non puoi fare entrambe le cose.

Puoi generare HTML contenente un collegamento a uno script separato per il download di un file XML oppure emettere un download di file e non generare HTML.

Pertanto, dovrai aggiungere un link per il download nell'output dello script CMS che stai modificando e quindi gestire il download in uno script separato.

Ho fatto un esempio funzionante che dovrebbe aiutare. L'esempio include un semplice documento HTML contenente un collegamento per il download e uno script PHP che quindi gestisce il download.

Visualizza il codice qui sotto o dai un'occhiata al esempio live .

HTML (lanugine estranea rimossa, non necessariamente valida)

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

Se non sei in grado di gestire il download tramite un secondo script (forse non riesci ad accedere ai dati pertinenti), dovrai ripensare il problema.

Altri suggerimenti

Potresti abilitare output_buffering nel tuo php.ini, quindi potresti avere alcune opzioni con l'invio di intestazioni.

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

La stessa cosa ha funzionato per me. Ma non sto usando XML DOM. io uso SimpleXML per analizzare il mio XML.

  

$ xml = nuovo   SimpleXMLElement (quot &; & Lt; radice gt &; & Lt; / radice gt &; Quot &;);

Voglio dare alla mia vista un file XML personalizzato che verrà generato in base ai dati forniti tramite il modulo. Inviando il modulo ottengono il file XML come download con il loro nome desiderato.

  

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

     

intestazione ( 'Content-Disposition:   allegato;   & Nomefile = quot;'[filename ']. 'Xml quot $ _ POST.'. &;');

     

echo $ xml - > asXML ();

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top