Ir para conteúdo

POWERED BY:

Arquivado

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

kanizawa

[Resolvido] Download corrompe arquivo XML

Recommended Posts

Fala galera beleza? Esse é meu primeiro post aqui no fórum, e já começo com uma dúvida =/

 

Bom, pela pesquisa que eu fiz não encontrei nenhum tópico com o meu problema.

 

O caso é o seguinte:

 

Precisei desenvolver um sisteminha pra disponibilizar arquivos XML(NFe) para download. Fiz os sitema de paginação, login e tudo mais.

Até ai tudo bem.

 

Como XML é reconhecido pelos browsers, quando se clica no link para o arquivo XML ele não da opção de download já abre a visualização no browser.

Pesquisei e então encontrei várias formas de forçar o download desses tipos de arquivo. Todos scripts que encontrei funcionam.

 

Ai vai um que usei como base:

$pasta = "xml/";
$file = $pasta.$_GET['file']; // pega o endereço do arquivo
                       // ou o nome dele se o arquivo 
                       // estiver na mesma pagina!! 
 
header("Content-Type: application/save"); 
header('Content-Description: File Transfer');
//header('Content-Type: application/octet-stream'); 
header("Content-Length:".filesize($file)); 
header('Content-Disposition: attachment; filename="' . $file . '"'); 
header("Content-Transfer-Encoding: binary");
header('Expires: 0'); 
//header('Pragma: no-cache'); 

// nesse momento ele le o arquivo e envia

$fp = fopen("$file", "rb"); 
fpassthru($fp); 
fclose($fp);

Em localhost todos que eu testei funcionam. Mas quando hospedado no servidor(Locaweb - Hospedagem Linux) é feito o download, arquivos com o mesmo tamanho porém como é XML vem corrompido o final de sua estrutura.

 

Então percebi que sempre faltam os 3 últimos caracteres do arquivo, que seriam responsável por fechar a tag principal.

 

Já tentei alterar tudo quanto é HEADER, testei vários scripts e sempre o mesmo problema, em localhost funciona e quando hospedado não.

 

Após todas tentativas não consegui fazer com que ele faça o download do arquivo correto, então tive uma ideia :D

depois do READYFILE dei um echo "3ultimoscaracteres"; que faltavam para corrigir o arquivo.

 

E mais uma vez em localhost ele adicionou o que mandei escrever no echo e hospedado no locaweb ainda ele não escreve o echo =(

 

Alguém já enfrentou esse problema? pode ser algum header?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opá, eu tive o mesmo problema sim, resolvi da seguinte forma, usei esses 2 headers:

 

header('Content-type: application/xml');

header('Content-Disposition: attachment; filename="'.$file.'"');

readfile($file);

Vê ai se funfa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Mauro ... tentei esses headers e o mesmo erro persistia..

 

Resolvi da seguinte maneira:

 

Eu estava usando o seguinte header:

header('Content-Length: '. $size);

 

Percebi que estavam faltando os 3 últimos caracteres então peguei a variavel $size e adicionei +3 bytes(que equivalem aos 3 caracteres que faltam) antes de passar o valor para header, e pronto problema resolvido ^_^

 

Na Locaweb dessa maneira funciona.

Já em localhost da erro porque ele tenta trazer um arquivo 3bytes maior do que o arquivo existente..

 

Problemas da Locaweb <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde!

 

Embora você já tenha encontrado a solução, gostaria de partilhar o meu caso, para servir de exemplo também! Tive exatamente o mesmo problema, quando testava no localhost funcionava perfeitamente, porém no meu servidor web, ao fazer o download o arquivo se corrompia, pois bem a solução pra mim foi alterar o caminho do diretório do arquivo, por engano coloquei um "../" a mais, após corrigir o caminho o problema foi solucionado!

 

Att,

 

Josemar

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.