Jump to content


Photo

Erro No Nome Do Arquivo Enviado Em Anexo..


  • Faça o login para participar
8 replies to this topic

#1 umbu

umbu

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado

Posted 02/12/2005, 21:10

Pessoal peguei um codigo de backup de BD no phpbrasil vejam:

<?php

/* -----------------------------------------------------------------------------

+++++++++++++++++++++++++++++++++++++++++++
+::         LEIA COM ATENÇÃO!!!         ::+
+++++++++++++++++++++++++++++++++++++++++++

Eu alterei algumas coisas da v. 1.0 para torná-lo mais portável e para que funcionasse
da maneira que eu precisava em qualquer situação, ele agora efetua o backup e na
restauração nãodá erro se alguns dados já existirem, não exclui os dados existentes,
não inclui registrosonde alguma chave seria duplicada, o que causaria erro no script
SQL e pararia todo o processo, não dá mais erro se algum campo do BD contiver o caracter
" ' ", o script gerado é capaz de gerar também o banco de dados, embora não dê erro se
ele já existir, não perde a seleção do banco de dados quando executado por linha de comando
ou em um frontend como o mysqlfront (para windows) ou o myAdmin (PHP).

O que ele faz: Ele cria um arquivo de script SQL a partir de um banco de dados
que é capaz de recriar o banco com toda a sua estrutura e dados, ótimo para backup
de bancos de dados de tamanho médio.

Para restaurar o backup vc pode executar o arquivo em uma mysql_query(), linha de comando
ou a partir de um frontend para mysql.

Funcionamento: basta incluir esse arquivo no seu controle de backups e chamar
a função backupmysql de acordo com a sintaxe:

backupmysql ( nome_do_bd , local_relativo_destino_arquivo [, endereco_de_email, gzipado] );
onde:
- nome_do_bd =    nome do banco de dados que vc quer criar o backup

- local_relativo_destino =	local onde vc quer criar o arquivo de backup no
      	servidor deve ser um endereço relativo, "." para
      	o mesmo diretório do script, se você não quiser
      	criar um arquivo no servidor, informe esse campo
      	com um 0 (zero) apenas.

- endereco_de_email =  endereço de e-mail para onde vc quer enviar uma cópia
      	do arquivo se não for informado, não será enviado
      	e-mail e o arquivo ficará no servidor apenas.
      	
- gzipado =    	Informe 1 para que o arquivo seja gzipado, ou 0 para
      	não compactar (0 é default)
      	
retorno:
A função retornará "sucesso" se for executada com sucesso ou uma mensagem de erro string
sem formatação.

Exemplo de chamada desta função:
---------------------------------------
// Chamada da função armazenando o retorno em uma variável:
$bkpbd = backupmysql("clientes",".","j.fast@tutopia.com.br", 1);

// Verificação do retorno:
if($bkpbd != "sucesso")
	{
	// Impressão da mensagem de erro na tela:
	echo $bkpbd;
	}
else
	{
	echo "Backup criado com sucesso!";
	}
---------------------------------------

+++++++++++++++++++++++++++++++++++++++++++
+::   Script desenvolvido por:          ::+
+::   Juarez Fiuza Junior (12/11/03)    ::+
+::   j.fast@tutopia.com.br             ::+
+::                                     ::+ 
+::    Implementação do GZIP            ::+  
+::    Rodrigo Lopes (30/04/06)         ::+
+::    rvl@ufrj.br                      ::+
+++++++++++++++++++++++++++++++++++++++++++


Efetue a configuração para a sua conexão com o servidor mySQl abaixo
nas linhas 76 a 85:
----------------------------------------------------------------------------- */
//inclui a configuraçao do bd
include "config.php";

//Faz consulta no BD para pegar o nome e email da empresa
$consulta = "select * from $tabela_config";
$resultado = mysql_query($consulta);

while ($linha = mysql_fetch_row($resultado)) {
$nomefrom = "$linha[1]";
$emailfrom = "$linha[3]";
}

function backupmysql($dbname,$local,$email='',$gzipado=0)
	{
	
//inclui a configuraçao do bd
include "config.php";

//Faz consulta no BD para pegar o nome e email da empresa
$consulta = "select * from $tabela_config";
$resultado = mysql_query($consulta);

while ($linha = mysql_fetch_row($resultado)) {
$nomefrom = "$linha[1]";
$emailfrom = "$linha[3]";
}
	/* -----------------------------------------------------------------------------
	A partir daqui o script usa os dados acima e os passados na chamada da função
	para gerar o backup, não é necessário qualquer alteração.
	----------------------------------------------------------------------------- */
	$signerro = ";\n<br>Leia as instruções de uso desse script no arquivo bkpmysql.php.";
	if(!$dbname)
  {
  return "O nome do banco de dados precisa ser informado.".$signerro;
  }
	if(!$local and $local != 0)
  {
  return "O local onde o arquivo deve ser salvo precisa ser informado.".$signerro;
  }
	@$con = mysql_connect ($host,$usuario,$senha);
	if(!$con)
  {
  return "Erro ao conectar o servidor MySQL, é necessário configurar os dados de conexão no arquivo bkpmysql.php, linhas 76 a 79<br>;\nVerifique abaixo o erro reportado pelo servidor:<br>;\n".mysql_error();
  }
	
	@$sel = mysql_select_db($dbname);
	if(!$sel)
  {
  return "Erro ao selecionar o banco de dados: \"$dbname\"<br>;\nVerifique abaixo o erro reportado pelo servidor:<br>;\n".mysql_error();
  }
	
	$fcont = "# Criando banco de dados : $dbname;\n";
	$fcont .= "CREATE DATABASE IF NOT EXISTS $dbname;\n";

	@$res = mysql_list_tables($dbname); // Pega a lista de todas as tabelas
	if(!$res)
  {
  return "Não foi possível obter a lista de tabelas no banco de dados, verifique suas permissões no servidor MySQL.;\n<br>Verifique abaixo o erro gerado pelo servidor:;\n<br>".mysql_error().$signerro;
  }
	while($row = mysql_fetch_row($res))
  {
  $table = $row[0]; // cada uma das tabelas
  @$res2 = mysql_query("SHOW CREATE TABLE $table");
  if(!$res2)
  	{
  	return "Não foi possível obter a estrutura das tabelas no banco de dados, verifique suas permissões no servidor MySQL.;\n<br>Verifique abaixo o erro gerado pelo servidor:;\n<br>".mysql_error().$signerro;
  	}
  while($lin = mysql_fetch_row($res2))
  	{ // Para cada tabela
  	$fcont .= "# Criando tabela: $table;\n";
  	$create_table = str_replace("`","",$lin[1]);
  	$comando = substr($create_table,0,13);
  	$comando .= "IF NOT EXISTS ".$dbname.".".substr($create_table,13,strlen($create_table));
  	$fcont .= "$comando;\n# Dump de Dados;\n";
  	@$res3 = mysql_query("SELECT * FROM $table");
  	if(!$res3)
    {
    return "Não foi possível selecionar os dados da tabela $table.;\n<br>Verifique abaixo o erro gerado pelo servidor:;\n<br>".mysql_error().$signerro;
    }
  	while($r=mysql_fetch_row($res3))
    { // Dump de todos os dados das tabelas
    $ct = count($r);
    for($i = 0;$i < $ct;$i ++)
    	{
    	$r[$i] = addslashes($r[$i]);
    	}
    $sql="INSERT IGNORE INTO $dbname.$table VALUES ('";
    $sql .= implode("','",$r);
    $sql .= "');\n";
    $fcont .= $sql;
    }
  	}
  }
	
	// Criação do arquivo no servidor (se informado um endereço na chamada
	// da função no 2º parâmetro diferente de 0
	if($local != "0")
	{
  if ($gzipado) 
  {
  	$arquivo = $local."/$dbname.sql.gz";
  	@$back = gzopen($arquivo, "w"); // Abre com compressão máxima
  	if(!$back)
  	{
    return "Ocorreu um erro ao criar o arquivo de backup dos dados no servidor, verifique o local informado e as permissões para esse diretório.".$signerro;
  	}
  	@$escreve = gzwrite($back,$fcont);
  	if(!$escreve)
  	{
    return "Não foi possível escrever no arquivo de backup no servidor.;\n<br>Possíveis causas para isso incluem problemas com o servidor ou com o script.;\n<br>Tente novamente e se o problema persistir, contate o administrador.";
  	}
  	gzclose($back);
  	
  	// Calibrar $fcont com o conteúdo zipado
  	$fp = fopen($arquivo,"r");
  	$fcont = fread($fp, filesize($arquivo));
  	fclose($fp);
  	$fcont = imap_binary($fcont);
  	
  }
  
  else 
  {
  
  	$arquivo = $local."/$dbname.sql";
  	@$back = fopen($arquivo,"w");
  	if(!$back)
  	{
    return "Ocorreu um erro ao criar o arquivo de backup dos dados no servidor, verifique o local informado e as permissões para esse diretório.".$signerro;
  	}
  	@$escreve = fwrite($back,$fcont);
  	if(!$escreve)
  	{
    return "Não foi possível escrever no arquivo de backup no servidor.;\n<br>Possíveis causas para isso incluem problemas com o servidor ou com o script.;\n<br>Tente novamente e se o problema persistir, contate o administrador.";
  	}
  	fclose($back);
  }
  
  $nome_do_arquivo = ($gzipado) ? "$dbname.sql.gz" : "$dbname.sql";
	}
	
	// Verifica o endereço de e-mail
	if($email)
  {
  if(!(ereg("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$",$email)))
  	{
  	return "O endereço de e-mail informado é inválido, o arquivo de backup foi gerado e está localizado no servidor.".$signerro;
  	}
  
  $boundary = "XYZ-" . date(dmyhms) . "-ZYX";
  
  $message = "--".$boundary."\n";
  $message .= "Content-Transfer-Encoding: 8bits\n";
  $message .= "Content-Type: text/html; charset=iso-8859-1\n\n";
  $message .= "<font face='verdana' size=2 color=#000000>";
  $message .= "Backup do banco de dados $dbname em arquivo anexo.<br><br>";
  $message .= "Para restaurar o backup, acesse o LW HostManager e siga as instruções da sessão Utilitários - Backup.";
  $message .= "\r\n\r\n";

  $subject = "Backup do banco de dados $dbname";
 
  $message .= "--".$boundary."\n";
  $message .= "Content-Type: ". (($gzipado) ? 'application/x-gzip;' : 'text/plain;') ."\n";
  $message .= "name=\"$nome_do_arquivo\"\n";
  $message .= "Content-Transfer-Encoding:". (($gzipado) ? 'base64' : '8bits') ."\n";
  $message .= "Content-Disposition: attachment; filename=\"$nome_do_arquivo\" \n\n";
  $message .= $fcont."\n";
  $message .= "\n--".$boundary."--\r\n";

  $to = $email;
    
  $headers = "MIME-Version: 1.0\r\n";
  $headers .= "From: $nomefrom <$emailfrom>\r\n";
  $headers .= "Reply-to: <$emailfrom>\r\n";
  $headers .= "Return-path: <$emailfrom>\r\n";
  $headers .= "X-Sender: <$emailfrom>\r\n";
  $headers .= "X-Mailer: Proj/PHP\r\n";
  $headers .= "X-Priority: 3\r\n";
  $headers .= "Content-type: multipart/mixed; boundary=\"".$boundary."\"\r\n";

  if(!(mail($to, $subject, $message, $headers)))
  	{
  	return "Ocorreu um erro ao tentar enviar o e-mail, se um local foi informado o arquivo de backup foi gerado e está localizado no servidor.".$signerro;
  	}
  }
	return "sucesso";
	}
/* -----------------------------------------------------------------------------
Fim do Script
+++++++++++++++++++++++++++++++++++++++++++
+::   Script desenvolvido por:          ::+
+::   Juarez Fiuza Junior (12/11/03)    ::+
+::   j.fast@tutopia.com.br             ::+
+::                                     ::+ 
+::    Implementação do GZIP            ::+  
+::    Rodrigo Lopes (30/04/06)         ::+
+::    rvl@ufrj.br                      ::+
+++++++++++++++++++++++++++++++++++++++++++
----------------------------------------------------------------------------- */


?>

Meu problema é o seguinte, quando o email chega, o arquivo em anexo nao fica com o nome do BD e sim com algo parecido com isso: 4390e22449729.tmp
Porem o conteudo fica certo...
Isso no UebiMiau ai no outlook aparece isso: ATT00010.txt

O que pode estar havendo ?

Edição feita por: umbu, 02/12/2005, 21:11.

Eu apoio a Ong Desapareceu!
Apoie você também.
http://forum.wmonlin...howtopic=130640

#2 thiagorp

thiagorp

    http://www.portalct.com

  • Usuários
  • 147 posts
  • Sexo:Masculino

Posted 02/12/2005, 23:07

as vezes você ta chamando a função com o nome do arquivo, acho que no exemplo seria $gzipado, num lembro, assim: $_FILES["nome"]["tmp_name"], faz assim $_FILES["nome"]["name"] só para o nome do arquivo, quando for dar o arquivo que via ser enviado tem que ser o tmp_name msm, mas quando for o nome que o arquivo vai ser mandado tem que ser só name.
http://www.portalct.com - Sua comunidade universitara da we

#3 umbu

umbu

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado

Posted 03/12/2005, 08:54

Não entendi muito bem sua resposta.

Tipo este script gera o backup(nao é upload) e estou usando sem a opçao de gravar no servidor e sem compactar entao ele deveria me dar este nome: lwhm2_lwhm.sql
Eu apoio a Ong Desapareceu!
Apoie você também.
http://forum.wmonlin...howtopic=130640

#4 thiagorp

thiagorp

    http://www.portalct.com

  • Usuários
  • 147 posts
  • Sexo:Masculino

Posted 03/12/2005, 10:01

mas você usa um campo file para selecionar o arquivo num é??

me mostra o código que chama esta função...
http://www.portalct.com - Sua comunidade universitara da we

#5 umbu

umbu

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado

Posted 03/12/2005, 16:55

Como disse eu nao faço upload... isso ae é um codigo para gerar o backup do mysql e mandar o arq. por email.

eu chamo assim:

// Chamada da função armazenando o retorno em uma variável:
$bkpbd = backupmysql("user_clientes","0","j.fast@tutopia.com.br", 0);

// Verificação do retorno:
if($bkpbd != "sucesso")
{
// Impressão da mensagem de erro na tela:
echo $bkpbd;
}
else
{
echo "Backup criado com sucesso!";
}
Eu apoio a Ong Desapareceu!
Apoie você também.
http://forum.wmonlin...howtopic=130640

#6 umbu

umbu

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado

Posted 04/12/2005, 21:52

Alguem pode me ajudar?
Eu apoio a Ong Desapareceu!
Apoie você também.
http://forum.wmonlin...howtopic=130640

#7 thiagorp

thiagorp

    http://www.portalct.com

  • Usuários
  • 147 posts
  • Sexo:Masculino

Posted 04/12/2005, 23:22

eu não entendi o código, tem muito comentario, embola muito
http://www.portalct.com - Sua comunidade universitara da we

#8 umbu

umbu

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado

Posted 05/12/2005, 08:22

Ola.
Ja consegui!
Só precisei mudar uma variavel de $nome_do_arquivo para $dbname.sql

$message .= "Content-Disposition: attachment; filename=\"$dbname.sql\" \n\n";

vlw'z
Eu apoio a Ong Desapareceu!
Apoie você também.
http://forum.wmonlin...howtopic=130640

#9 thiagorp

thiagorp

    http://www.portalct.com

  • Usuários
  • 147 posts
  • Sexo:Masculino

Posted 05/12/2005, 08:43

:P
http://www.portalct.com - Sua comunidade universitara da we




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq