kanizawa 0 Denunciar post Postado Setembro 27, 2010 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
Mauro Speca 0 Denunciar post Postado Setembro 30, 2010 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
kanizawa 0 Denunciar post Postado Outubro 11, 2010 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
jmflausino 0 Denunciar post Postado Setembro 5, 2013 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