Ir para conteúdo
Fórum Script Brasil
  • 0

Backup em PHP + MySQL


Ilair dos Santos

Pergunta

Olá!
sou novo no fórum e no PHP, então gostaria de saber o que está errado no código a seguir:

<?php    $backup_file_format = "sql";    $backup='';   $tabelas=array();      $dbHost='localhost';   $dbName='altenhofen';   $dbUser='root';   $dbPass='02220769';      $PDO = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8", $dbUser, $dbPass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));   $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );   $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );   if( !empty( $_POST['database'])){       $Tables = $PDO->query( 'SHOW TABLES FROM `'.$_POST['database'].'`' )->fetchAll();       for( $i = 0; $i < sizeOf( $Tables ); ++$i ){            foreach( $Tables[ $i ] as $index => $data ){                                                 $tabelas[]=$data;             }       }   } foreach($tabelas as $index => $data1 ){}                   $erro=0;                                   if( isset( $_POST['submit'] ) ){                      $file = fopen($_POST['localbanco'].'backup_'.date("dmy", time()).'.'.$backup_file_format.'', "w+");                   } else {                     $file = fopen('c:/bkp_dados/backup_'.date("dmy", time()).'.'.$backup_file_format.'', "w+");                   }                    $lcmd='/*!40101 SET NAMES utf8 */;'.chr(13).chr(10);                   fwrite($file, $lcmd);                                 if( isset( $_POST['submit'] ) ){                     $PDO->query( 'USE `'.$_POST['database'].'`' );                     foreach( $tabelas as $index => $data ){                         $create = $PDO->query( 'SHOW CREATE TABLE `'.$data.'`' )->fetchAll();                         foreach( $create as $createTable){                             $fcreate=$createTable[ 'Create Table' ]. ";\n\n";                         }                         $select = $PDO->query( 'SELECT * FROM `'.$data.'`' )->fetchAll();                         if(sizeOf($select)>0)  { 
                           for( $i = 0; $i < sizeOf( $select ); ++$i ){                              foreach( $select[ $i ] as $field => $value ){                                  $fields[ $field ] = '`'.$field.'`';                                  if( !is_numeric( $value ) ){                                      $values[  ] = sprintf( "'%s'", $value );                                  }else{                                      $values[  ] = ( float ) $value;                                  }                              }                              $result[ ] = sprintf( '( %s )', implode( ', ', $values ) );                                
                            unset( $values );                           }                                                    $r=sprintf( "INSERT INTO `%s`( %s ) \nVALUES \n%s;    \n\n", $data, implode( ',', $fields ), implode( ", \n", $result ) );                         }                         $backup.=$fcreate.' '.$r;             unset( $result, $fields );                         unset($r, $fcreate);                    }                    fwrite($file, $backup);                    fclose($file);                    echo"<script language=javascript>alert('Geração do backup concluida com sucesso!')</script>";                      echo"<script language=javascript>location.href='../application.php'</script>";                    }                             ?>

Teoricamente é pra fazer backup, mas na realidade não está fazendo nada, até cria o arquivo, mas não tem nada dentro dele, gostaria de saber o que está errado, esse é um código de outra pessoa, assumi o sistema, e estou tentando ajustar isso.

Grato pela Atenção!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Fiz uma adaptação para usar aqui, usando o meu banco de dados, e fui tentando acompanhar a evolução do código com a ajuda do comando var_dump( ),  até chegar no núcleo do programa:

$file = fopen('c:/wamp64/www/astudy/backup_'.date("dmy", time()).'.'.$backup_file_format.'', "w+");
      $lcmd='/*!40101 SET NAMES utf8 */;'.chr(13).chr(10);
      fwrite($file, $lcmd);

esse comando deveria aparecer mais de uma vez para relacionar os outras informações que você esperava. Esse código que você passou está incompleto, ou o desenvolvedor abandonou o projeto por ver que é mais fácil usar o serviço do backup do PhpMyAdmin ou, no meu caso, do MySQL Workbench.

Aqui a listagem do que eu consegui alterar:

<?php
$backup_file_format = "sql";
$backup='';
$tabelas=array();
$dbhost='localhost';
$dbname='astudy';
$dbuser='root';
$dbpass='';
$PDO = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=utf8", $dbuser, $dbpass,
  array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
if( !empty($dbname)){
   $Tables = $PDO->query('SHOW TABLES')->fetchAll();
foreach( $Tables as $index => $data ){$tabelas[]=$data;}
  $erro=0;
  $file = fopen('c:/wamp64/www/astudy/backup_'.date("dmy", time()).'.'.$backup_file_format.'', "w+");
  $lcmd='/*!40101 SET NAMES utf8 */;'.chr(13).chr(10);
  fwrite($file, $lcmd);
  $PDO->query( 'USE `astudy`' );
  foreach( $tabelas as $index => $data ){ var_dump($tabelas);
  $create = $PDO->query( 'SHOW CREATE TABLE `'.$data.'`' )->fetchAll();
  foreach( $create as $createTable){
  $fcreate=$createTable['Create Table']. ";\n\n";}
  $select = $PDO->query( 'SELECT * FROM `'.$data.'`' )->fetchAll();
  if(sizeOf($select)>0)  {
  for( $i = 0; $i < sizeOf( $select ); ++$i ){
  foreach( $select[ $i ] as $field => $value ){
  $fields[ $field ] = '`'.$field.'`';
  if( !is_numeric( $value ) ){
  $values[  ] = sprintf( "'%s'", $value );} else {
  $values[  ] = ( float ) $value;} } 
  $result[ ] = sprintf( '( %s )', implode( ', ', $values ) );
  unset( $values );}}}}

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...