Crie o arquivo PHP DOM XML e crie um link/prompt de arquivo salvar sem gravar o arquivo no servidor quando os cabeçalhos já enviados

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu criei uma peça PHP DOM XML e a salvei em uma corda como esta:

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

Agora, não posso usar os cabeçalhos para enviar um prompt de download de arquivo e não posso escrever o arquivo no servidor, ou melhor, não quero o arquivo.

Algo como um link salvar este arquivo ou um prompt de download seria bom. Como eu faço isso?

Foi útil?

Solução

Vejo pelos comentários que você está trabalhando em uma estrutura do CMS e não consegue impedir que o conteúdo seja produzido antes de onde estará seu código.

Se o script no qual você está trabalhando já tiver produzido conteúdo (além do seu controle), você não poderá fazer o que está tentando alcançar em apenas um script.

Seu script pode enviar cabeçalhos dizendo "O conteúdo a seguir é HTML", em seguida, a saída do HTML ou envie cabeçalhos dizendo "o conteúdo a seguir é XML, é um anexo e tem um certo nome de arquivo". Você não pode fazer as duas coisas.

Você pode emitir HTML contendo um link para um script separado para baixar um arquivo XML ou pode emitir um download de arquivo e produzir sem html.

Portanto, você precisará adicionar um link de download na saída do script CMS que você está modificando e, em seguida, lidar com o download em um script separado.

Fiz um exemplo de trabalho que deve ajudar. O exemplo inclui um documento HTML simples contendo um link de download e um script PHP que lida com o download.

Veja o código abaixo ou dê uma olhada no Exemplo ao vivo.

Html (fluff estranho removido, não necessariamente válido)

<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 você não conseguir lidar com o download por meio de um segundo script (talvez não consiga obter acesso aos dados relevantes), precisará repensar o problema.

Outras dicas

Você pode ativar o output_buffer em seu php.ini, então pode ter algumas opções com o envio de cabeçalhos.

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

A mesma coisa funcionou para mim. Mas não estou usando o XML DOM. Eu uso o simpxml para analisar meu xml.

$ xml = new SimpXMLELEMENT ("u003Croot>u003C/root> ");

Quero dar à minha opinião um XML personalizado que será gerado, dependendo dos dados que eles fornecem através do formulário. Ao enviar o formulário, eles recebem o XML como download com seu nome desejado.

cabeçalho ('conteúdo-tipo: "text/xml"; charset = "utf8"');

Cabeçalho ('Content-Disposição: Anexo; FileName = "'. $ _ Post ['nome do arquivo']. '. Xml"');

echo $ xml-> ASXML ();

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top