Annyh 4 Denunciar post Postado Junho 20, 2011 peguei um script de backup do laboratorio de script, é um script para gerar sql para backup de banco de dados, foi modificado por jnejunior, Andrey, Carlos, o script é muito bom, só gostaria de saber como compactar apenas o resultado gerado deste script, já que o resultado nem sempre esta em uma variável, no script vi que tem um printf()... este é o script de backup: <!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php $PDO = new PDO( 'mysql:host=localhost', 'root', '' ); $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); ?> <form method="GET"> Selecione o banco de dados: <select name="database" onchange="this.form.submit()"> <?php foreach( $PDO->query( 'SHOW DATABASES' )->fetchAll() as $index => $data ){ if( $_GET['database'] == $data['Database'] ){ echo '<option value="'.$data['Database'].'" selected>', $data['Database'], '</option>'; }else{ echo '<option value="'.$data['Database'].'">', $data['Database'], '</option>'; } } ?> </select><br /> </form> <form method="POST"> <?php if( !empty( $_GET['database'] ) ){ echo 'Selecione as tabelas: <br /> <select name="table[]" multiple="multiple">'; $Tables = $PDO->query( 'SHOW TABLES FROM `'.$_GET['database'].'`' )->fetchAll(); for( $i = 0; $i < sizeOf( $Tables ); ++$i ){ foreach( $Tables[ $i ] as $index => $data ){ echo '<option value="'.$data.'">'.$data.'</option>'; } } echo '</select><br />'; echo '<input type="submit" value="Fazer Backup" name="backup">'; } ?> </form> <?php echo '<pre>'; if( isset( $_POST['backup'] ) ){ $PDO->query( 'USE `'.$_GET['database'].'`' ); echo '<textarea cols="150" rows="60">'; foreach( $_POST['table'] as $index => $data ){ $create = $PDO->query( 'SHOW CREATE TABLE `'.$data.'`' )->fetchAll(); foreach( $create as $createTable){ echo $createTable[ 'Create Table' ], ";\n\n"; } $select = $PDO->query( 'SELECT * FROM `'.$data.'`' )->fetchAll(); 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 ); } printf( "INSERT INTO `%s`( %s ) \nVALUES \n%s;\n\n", $data, implode( ',', $fields ), implode( ", \n", $result ) ); unset( $result, $fields ); } echo '</textarea>'; } ?> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 21, 2011 Dei uma alterada para criar um arquivo com os dados comprimidos no formato gzip. Vai listar o SQL gerado e criar no mesmo diretório o arquivo .gz, depois você pode alterar para o diretório de sua escolha <!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php $PDO = new PDO( 'mysql:host=localhost', 'root', '' ); $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); ?> <form method="GET"> Selecione o banco de dados: <select name="database" onchange="this.form.submit()"> <?php foreach( $PDO->query( 'SHOW DATABASES' )->fetchAll() as $index => $data ){ if( $_GET['database'] == $data['Database'] ){ echo '<option value="'.$data['Database'].'" selected>', $data['Database'], '</option>'; }else{ echo '<option value="'.$data['Database'].'">', $data['Database'], '</option>'; } } ?> </select><br /> </form> <form method="POST"> <?php if( !empty( $_GET['database'] ) ){ echo 'Selecione as tabelas: <br /> <select name="table[]" multiple="multiple">'; $Tables = $PDO->query( 'SHOW TABLES FROM `'.$_GET['database'].'`' )->fetchAll(); for( $i = 0; $i < sizeOf( $Tables ); ++$i ){ foreach( $Tables[ $i ] as $index => $data ){ echo '<option value="'.$data.'">'.$data.'</option>'; } } echo '</select><br />'; echo '<input type="submit" value="Fazer Backup" name="backup">'; } ?> </form> <?php echo '<pre>'; if( isset( $_POST['backup'] ) ){ $PDO->query( 'USE `'.$_GET['database'].'`' ); echo '<textarea cols="150" rows="60">'; foreach( $_POST['table'] as $index => $data ){ $create = $PDO->query( 'SHOW CREATE TABLE `'.$data.'`' )->fetchAll(); foreach( $create as $createTable){ echo $Zlib[ ] = $createTable[ 'Create Table' ] . ";\n\n"; } $select = $PDO->query( 'SELECT * FROM `'.$data.'`' )->fetchAll(); 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 ); } echo $Zlib[ ] = sprintf( "INSERT INTO `%s`( %s ) \nVALUES \n%s;\n\n", $data, implode( ',', $fields ), implode( ", \n", $result ) ); unset( $result, $fields ); } echo '</textarea>'; $gzdata = gzencode( implode( '', $Zlib ), 9 ); $fp = fopen("backup_{$_GET['database']}.sql.gz", "w"); fwrite( $fp, $gzdata ); fclose( $fp ); } ?> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Annyh 4 Denunciar post Postado Junho 21, 2011 obrigada, Carlos, muito bom, muito bom mesmo... bjos Compartilhar este post Link para o post Compartilhar em outros sites