Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pyro_fire

Criar arquivo e forçar o download pelo usuário

Recommended Posts

Tenho uma página em PHP (versão 5.x) que gera um arquivo XML, até aqui está tudo funcionando bem, porém quando o usuário clicar no botão gerar, além de gerar o arquivo eu quero que o navegador automaticamente abra a janela de download com o meu arquivo, tipo o que é feito em gerenciadores de download.

Tem como ser implementado em PHP ou preciso recorrer ao JavaScript?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que só com JavaScript mesmo.

 

Provavelmente quando você clica no botão gerar arquivo ele direciona para uma página php.

 

Sendo assim, para que automaticamente, ao ser carregada a página php abra uma janela de Download, pelo menos ao meu conhecimento somente com javascript. algo como <body onLoad="funcao()">.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo #1 Download dialog

 

If you want the user to be prompted to save the data you are sending, such as a generated PDF file, you can use the » Content-Disposition header to supply a recommended filename and force the browser to display the save dialog.

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

 

fonte: http://www.php.net/manual/pt_BR/function.header.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução em PHP utilizando header() apesar de mais interessante iria causar alguns transtorno no meu script, então optei por fazer via JavaScript mesmo.

Porém ele abre o arquivo no browser (não abre a janela de download), será que é devido a extensão ser XML? Mudei de extensão e mesmo assim abre no browser.

 

Se alguém puder ajudar!

 

Flw

 

 

 

Exemplo #1 Download dialog

 

If you want the user to be prompted to save the data you are sending, such as a generated PDF file, you can use the » Content-Disposition header to supply a recommended filename and force the browser to display the save dialog.

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

 

fonte: http://www.php.net/m...tion.header.php

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

A solução em PHP utilizando header() apesar de mais interessante iria causar alguns transtorno no meu script, então optei por fazer via JavaScript mesmo.

Porém ele abre o arquivo no browser (não abre a janela de download), será que é devido a extensão ser XML? Mudei de extensão e mesmo assim abre no browser.

 

Se alguém puder ajudar!

 

Flw

 

 

Olá pyro_fire, beleza?

 

 

Acho que, talvez, não tenha entendido o espírito da coisa. Você pode usar o javascript para redirecionar para a página responsável pelo download etc., mas o que instrui o navegador que ele deve fazer um download do arquivo e não simplesmente exibí-lo na tela, é o cabeçalho HTTP, tal como o Beraldo falou.

 

Para tanto faça como no exemplo:

 


<?php

// Indica ao navegador que se trata de um documento xml
header('Content-type: application/xml');

// Indica ao navegador que é um arquivo para download e que deverá ser gravado com o nome que está em filename
//Ou seja, reescreva o nome do arquivo ou dê-lhe um novo nome, não se esquecendo da extensão é claro. 
header('Content-Disposition: attachment; filename="novo_nome.xml"');

// Use esta função para ler um arquivo que está dentro do servidor e enviá-lo
@readfile('arquivo_original.xml');

// Ou então, ecoe o arquivo assim
echo "<?xml version=\"1.0\" encoding=\"ISO-8859-15\" ?>
<teste>
<msg>blablabla</msg>
</teste>";

?>

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para implementar isso estou alterando meu script, pois utilizando header(), dava o erro de que não pode alterar o cabeçalho (provavelmente porque o cabeçalho já estava definido em algum lugar do meu script.

Vou alterar tudo aqui e tentar implementar de novo.

 

Vlw.

 

 

 

 

A solução em PHP utilizando header() apesar de mais interessante iria causar alguns transtorno no meu script, então optei por fazer via JavaScript mesmo.

Porém ele abre o arquivo no browser (não abre a janela de download), será que é devido a extensão ser XML? Mudei de extensão e mesmo assim abre no browser.

 

Se alguém puder ajudar!

 

Flw

 

 

Olá pyro_fire, beleza?

 

 

Acho que, talvez, não tenha entendido o espírito da coisa. Você pode usar o javascript para redirecionar para a página responsável pelo download etc., mas o que instrui o navegador que ele deve fazer um download do arquivo e não simplesmente exibí-lo na tela, é o cabeçalho HTTP, tal como o Beraldo falou.

 

Para tanto faça como no exemplo:

 

 
 <?php
 
 // Indica ao navegador que se trata de um documento xml
 header('Content-type: application/xml');
 
 // Indica ao navegador que é um arquivo para download e que deverá ser gravado com o nome que está em filename
 //Ou seja, reescreva o nome do arquivo ou dê-lhe um novo nome, não se esquecendo da extensão é claro. 
 header('Content-Disposition: attachment; filename="novo_nome.xml"');
 
 // Use esta função para ler um arquivo que está dentro do servidor e enviá-lo
 @readfile('arquivo_original.xml');
 
 // Ou então, ecoe o arquivo assim
 echo "<?xml version=\"1.0\" encoding=\"ISO-8859-15\" ?>
 <teste>
 <msg>blablabla</msg>
 </teste>";
 
 ?>
 

Até mais.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.