Ir para conteúdo

POWERED BY:

Arquivado

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

AMON-HÁ

Forçar download TXT com quebra de linha

Recommended Posts

Pessoal,

 

Andei dando uma pesquisada no fórum e até achei algumas coisas interessantes, como a informação de que para arquivos na plataforma linux a quebra de linha é \n e para arquivos na plataforma windows é \r\n. No entanto, como eu NÃO estou trabalhando com a montagem de um arquivo txt e sim, apenas, com o download de um arquivo já existente, esse tipo de informação não resolve o meu problema.

 

No meu caso, tenho um arquivo txt no meu servidor com as seguintes caracteristicas:

linha1

linha2

linha3

 

Quando faço o download usando a rotina abaixo, ele aparece assim:

linha1linha2linha3

 

<?php
$file = "arquivo.txt";
header("Content-type: application/save");
header("Content-Length:" . filesize($file));
header('Content-Disposition: attachment; filename=' . $file);
header('Expires: 0');
header('Pragma: no-cache');

readfile("$file");
?>

E aí, como eu resolvo esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser que resolva seu problema sim.

Antes de produzir o download com o código, abra o TXT e substitua todos os "\n" por "\r\n".

 

Pode ser que exista uma função que faça isso automaticamente, mas eu não conheço.

 

Exemplo para substituição: preg_replace('/\\n/', '\r\n', $conteudoArquivo);

 

Não sei se funcionaria, mas poderia até tentar assim:

 

readfile("$file");

 

por:

 

echo preg_replace('/\\n/', '\r\n', file_get_contents($file));

Se não funcionar, primeiro substitua normalmente, salve o arquivo, e use o readfile para iniciar o download.

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser que resolva seu problema sim.

Antes de produzir o download com o código, abra o TXT e substitua todos os "\n" por "\r\n".

 

Pode ser que exista uma função que faça isso automaticamente, mas eu não conheço.

 

Exemplo para substituição: preg_replace('/\\n/', '\r\n', $conteudoArquivo);

 

Não sei se funcionaria, mas poderia até tentar assim:

 

readfile("$file");

 

por:

 

echo preg_replace('/\\n/', '\r\n', file_get_contents($file));

Se não funcionar, primeiro substitua normalmente, salve o arquivo, e use o readfile para iniciar o download.

 

Até mais.

 

tá saindo assim agora:

linha1\r\nlinha2\r\nlinha3

Compartilhar este post


Link para o post
Compartilhar em outros sites

echo preg_replace('/\\n/', "\r\n", file_get_contents($file));
Tente assim.

 

Opa... deu certo...

Mas diga uma coisa... ele não vai ficar deformado para usuário da plataforma linux não???

Vi alguma coisa sobre PHP_EOL que trata isso... como eu usaria???

Compartilhar este post


Link para o post
Compartilhar em outros sites

echo preg_replace('/(\\r)?\\n(\\r)?/', PHP_EOL, file_get_contents($file));

Tente assim. Não trabalho com essa constante, mas é basicamente para o tratamento de finais de linha com PHP. Até onde eu sei não funciona com expressões regulares.

Se não funcionar, mantenha dessa forma:

 

echo preg_replace('/(\\r)?\\n(\\r)?/', "\r\n", file_get_contents($file));

Acredito que ninguém terá problemas em abrir txts dessa forma no Linux.

Outra função que você pode experimentar é str_replace.

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

echo preg_replace('/(\\r)?\\n(\\r)?/', PHP_EOL, file_get_contents($file));

Tente assim. Não trabalho com essa constante, mas é basicamente para o tratamento de finais de linha com PHP. Até onde eu sei não funciona com expressões regulares.

Se não funcionar, mantenha dessa forma:

 

echo preg_replace('/(\\r)?\\n(\\r)?/', "\r\n", file_get_contents($file));

Acredito que ninguém terá problemas em abrir txts dessa forma no Linux.

Outra função que você pode experimentar é str_replace.

 

Até mais.

 

A primeira opção não funcionou nem no Windows...

Mas a segunda funcionou tanto no Windows quanto no Linux...

Vlw pela ajuda...

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.