Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo Marcelo_26862

Download String TXT - Sem html

Recommended Posts

Pessoal, boa tarde.

 

Estou com um script para fazer o download de uma string em um arquivo TXT.

Porém, quando rodo ele, no txt não aparece só a String, e sim todo o HTML da página!

 

Como salvar no txt SÓ o conteudo da string? Obrigado!

global $wpdb;	$filename = 'internet.txt';	$d = $wpdb->get_results("SELECT * FROM txt_gerado WHERE id = 1");	header('Content-type: text/plain; charset=iso-8859-1');	header("Content-Disposition: attachment; filename=\"" .$filename. "\"");	echo $d[0]->string_txt;

Lembrando que não posso criar uma página única para esse script!

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode manipular o buffer de saída ou postar o código completo da página para que eu veja melhor como é a situação.

 

Parece que está usando Wordpress, então dê uma lida nisso: http://codex.wordpress.org/Integrating_WordPress_with_Your_Website

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim André..estou usando wordpress.

 

Realmente, ainda não deu certo.

Complementando o que você falou e o que o hufersil ajudou, consegui eliminar fazer download só da string, utilizando antes do header o ob_clean(); e depois o exit;

 

Porém, meu problema continua..

Quando faço o download, antes da string ele insere uma linha em branco (quebra de linha - LF).

Foda que no bloco de notas não aparece, só em outros editores, como o notepad ++.

 

E o problema é que esse txt será importado para um arquivo em DOS, e ele não lê com essa quebra de linha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Manipule o buffer de saída novamente, com um left trim.

 

 

<?php
// Cabeçalho do site aqui.

ob_clean();

function ob_handler_callback( $buffer ) {
    return ltrim( $buffer );
}

ob_start( 'ob_handler_callback' );

//
// Teu código em questão aqui.
//

ob_end_flush();
exit();

Compartilhar este post


Link para o post
Compartilhar em outros sites

André, Obrigado pela ajuda.

Tentei essa solução, porém continua com a quebra de linha no arquivo.

Implementei corretamente?

 

function download_txt(){
	ob_clean();
	function ob_handler_callback( $buffer ) {
		
    	return ltrim( $buffer );
	}
	ob_start( 'ob_handler_callback' );
	
	global $wpdb;
	$filename = 'internet.txt';
	$d = $wpdb->get_results("SELECT * FROM txt_gerado WHERE id = 1");
	header('Content-type: text/plain; charset=iso-8859-1');
	header("Content-Disposition: attachment; filename=\"" .$filename. "\"");
	//ob_start();

	echo $d[0]->string_txt;
	
	ob_end_flush();
	exit();
	
	
}

 

 

 

Segue a imagem do erro:

 

 

 

 

http://imgur.com/RE3IYim

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está correta a implementação, o que eu achava era que a quebra de linha fosse um \n "interpretado" dentro da string, aí nesse caso o ltrim() resolveria. O teu problema é com a codificação de algum arquivo. Algo como: o teu arquivo .php que gera o .txt está em Unicode (UTF-8) e o .txt está sendo gerado em ISO. Tente manter a mesma codificação para tudo no projeto, incluindo arquivos e banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é..o problema é o caracter, que é uma quebra de linha.

Mas, eu não entendo como isso tá acontecendo.

se eu uso o ob_clean(); ele não deveria "excluir" tudo que foi escrito antes dele e só exibir o que é escrito após?

 

Sendo assim, esse caracter deveria estar DEPOIS do ob_clean..

Mas não está!

 

Muito estranho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se estou falando besteria, mas por que você não cria o arquivo txt com fopen e insere a string no arquivo, fecha o arquivo e força o download dele com headers.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Osmar, boa tarde!

Não é besteira nenhuma! Fiz isso também!

 

Eu crio o arquivo e abro por ftp, aparece certinho, sem o caracter.

Porém, quando eu forço o download, ele cria essa m***da de caracter!!

 

Acredito muito que o problema tá no header!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Pois é..o problema é o caracter, que é uma quebra de linha.

Mas, eu não entendo como isso tá acontecendo.

se eu uso o ob_clean(); ele não deveria "excluir" tudo que foi escrito antes dele e só exibir o que é escrito após?

 

Sendo assim, esse caracter deveria estar DEPOIS do ob_clean..

Mas não está!

 

Muito estranho

 

ob_clean() limpa o buffer efetuado desde a ultima chamada de ob_start().

 

Coloque um ob_start() na primeira linha após a abertura de bloco <?php, e certifique-se que entre esta abertura e inicio do arquivo não existam espaços em branco nem quebras de linha.

 

Verifique se o error reporting está habilitado, assim você verá os erros mais facilmente.

 

Para entender melhor, crie um arquivo somente com este conteudo:

 

<?php

echo 'antes do buffer',PHP_EOL;
ob_start();
echo 'antes do buffer 2',PHP_EOL;
ob_clean();
echo 'saida nova';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hufersil, segui seu exemplo..

Nesse arquivo eu não vejo o "antes do buffer 2".

 

Bom, seguindo essa logica, reestruturei , mas não deu certo..Porém, aprendi um pouco mais..

 

Olha como ficou, e comentei para verem se minha lógica está certa!

 

<?php 
	ob_clean(); // Chamo primeiro o ob_clean para "limpar" tudo, deixar o buffer do zero!
	
	

	$url = WP_CONTENT_DIR ."/themes/Pesca_E_CIA/extras/saga/internet.txt";
	global $wpdb;
	$d = $wpdb->get_results("SELECT * FROM txt_gerado WHERE id = 1");
	
	$texto = $d[0]->string_txt;
	$file = fopen($url,'w');
	
	fwrite($file,$texto);
	fclose($file);

	ob_start(); // Começo a gravar no buffer somente após aqui!
	header('Content-Description: File Transfer');
        header('Content-type: text/plain; charset=utf-8');
        header('Content-Disposition: attachment; filename=' . basename($url));
	readfile($url);
	
	exit;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

não...

não é o ob_clean() que você chama primeiro...

 

releia meu post anterior, por favor.

 

[]'s

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.