Ir para conteúdo

Arquivado

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

Maykel-ctba

Geração de arquivo via fopen e fwrite -> Download nunca termina

Recommended Posts

Fala galera!

 

Estou tendo um empecilho. Fiz um sistema que gera um arquivo HTML para meu cliente baixar e utilizar como bem preferir.

No meu ambiente local funciona perfeitamente. Porém, quando utilizo no servidor de produção, não dá erro nem nada, o download inicia mas nunca termina (Fica em Iniciando e nunca baixa).

 

O código é simples. Seguem alguns esclarecimentos:

  1. Incluo as classes de conexão ao banco de dados já no primeiro include.
  2. o Include.php contém funções básicas a todo o sistema.
  3. objRegistro traz o template do banco de dados.
  4. Se eu comento a linha header("Content-Disposition: attachment; filename=".$filename); ele funciona diretamente na tela, mas não baixa o arquivo.
  5. Setei permissões (tanto para o arquivo que gera o HTML - este abaixo - quanto a pasta que recebe o arquivo) 777 para diretórios e arquivos.
<?php

	include_once($_SERVER['DOCUMENT_ROOT']."/common/function/class.php");
	include_once($_SERVER['DOCUMENT_ROOT']."/common/function/include.php");

	$objRegistro = new Template();
	$objRegistro->Excluido('N');
	$objRegistro->ID($_GET['id']);
	
	$objRegistro->retornar();
	
	$filename = "../../upload/arquivoHTML/html".date("dmYHis").".html";
	
	$texto = $objRegistro->Conteudo();
	$fp = fopen($filename , "w");
	$fw = fwrite($fp, $texto);
	
	if($fw == strlen($texto)){
		header("Content-Type: text/html");
		header("Content-Length: ".filesize($filename)."\n\n");
		header("Content-Disposition: attachment; filename=".$filename);
		echo file_get_contents($filename);
	}
	else {
		alert('Falha ao gerar arquivo');
	}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Fala galera!

 

Estou tendo um empecilho. Fiz um sistema que gera um arquivo HTML para meu cliente baixar e utilizar como bem preferir.

No meu ambiente local funciona perfeitamente. Porém, quando utilizo no servidor de produção, não dá erro nem nada, o download inicia mas nunca termina (Fica em Iniciando e nunca baixa).

 

O código é simples. Seguem alguns esclarecimentos:

  1. Incluo as classes de conexão ao banco de dados já no primeiro include.
  2. o Include.php contém funções básicas a todo o sistema.
  3. objRegistro traz o template do banco de dados.
  4. Se eu comento a linha header("Content-Disposition: attachment; filename=".$filename); ele funciona diretamente na tela, mas não baixa o arquivo.
  5. Setei permissões (tanto para o arquivo que gera o HTML - este abaixo - quanto a pasta que recebe o arquivo) 777 para diretórios e arquivos.
<?php

	include_once($_SERVER['DOCUMENT_ROOT']."/common/function/class.php");
	include_once($_SERVER['DOCUMENT_ROOT']."/common/function/include.php");

	$objRegistro = new Template();
	$objRegistro->Excluido('N');
	$objRegistro->ID($_GET['id']);
	
	$objRegistro->retornar();
	
	$filename = "../../upload/arquivoHTML/html".date("dmYHis").".html";
	
	$texto = $objRegistro->Conteudo();
	$fp = fopen($filename , "w");
	$fw = fwrite($fp, $texto);
	
	if($fw == strlen($texto)){
		header("Content-Type: text/html");
		header("Content-Length: ".filesize($filename)."\n\n");
		header("Content-Disposition: attachment; filename=".$filename);
		echo file_get_contents($filename);
	}
	else {
		alert('Falha ao gerar arquivo');
	}

?>
<?php

	include_once($_SERVER['DOCUMENT_ROOT']."/common/function/class.php");
	include_once($_SERVER['DOCUMENT_ROOT']."/common/function/include.php");

	$objRegistro = new Template();
	$objRegistro->Excluido('N');
	$objRegistro->ID($_GET['id']);
	
	$objRegistro->retornar();
	
	$filename = "../../upload/arquivoHTML/html".date("dmYHis").".html";
	
	$texto = $objRegistro->Conteudo();
	$fp = fopen($filename , "w");
	$fw = fwrite($fp, $texto);
        $fc = fclose($filename);//faltou isso
	
	if($fw == strlen($texto) and $fc == true){
		header("Content-Type: text/html");
		header("Content-Length: ".filesize($filename)."\n\n");
		header("Content-Disposition: attachment; filename=".$filename);
		echo file_get_contents($filename);
	}
	else {
		alert('Falha ao gerar arquivo');
	}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... acho que não é isso.

 

Estranho porque, ao usar o fclose, ele não vê $filename como um parâmetro válido.

 

 

Warning: fclose() expects parameter 1 to be resource, string given in D:\Domains\meucliente.com.br\wwwroot\common\function\geraArquivo.php on line 17

 

Mas engraçado mesmo é que, após colocar esse comando, e tirar, funcionou.

 

Será uma instabilidade do server ao gerar arquivo? hehe

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.