Backup de Banco Mysql - Zipando o Arquivo após o backup

Started by Magrinho Loko, 17 de February , 2007, 10:49:55 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Magrinho Loko

Primeiramente gostaria de agradecer ao usuário Fabyo do Fórum mysql por postar este maravilhoso script que salva a nossa vida em certas horas. =]

Bom, vamos ao codigo.

Backup.php

<?php

mysql_connect
("localhost""usuario""senha"); // Troque o usuario pelo login que dá acesso ao mysql, e a senha pela respectiva senha do mysql&#46;
mysql_select_db("banco"); // Troque o banco pelo nome do banco de dados que você quer baixar&#46;

set_time_limit(0);

function 
sqlAddslashes($str ''$is_like FALSE)
{
    if (
$is_like)
    {
        
$str str_replace('\\''\\\\\\\\'$str);
        }else{
        
$str str_replace('\\''\\\\'$str);
        }
        
$str str_replace('\'''\\\''$str);
        return 
$str;
}

function 
dumptb($table) {
    
$nline "\n";
    
$dp "CREATE TABLE $table ($nline";
    
$firstfield 1;
    
$fields_array mysql_query("SHOW FIELDS FROM $table");
    
    while (
$field mysql_fetch_array($fields_array))
    {
        if (!
$firstfield)
        {
            
$dp &#46;= ",\n";
        
}else{
            
$firstfield 0;
        }
        
$dp &#46;= "\t"&#46;$field["Field"&#93;&#46;" "&#46; $field["Type"&#93;;
        
if (isset($field['Default'&#93;) && $field['Default'&#93; != '')
        
{
                    
$dp &#46;= ' default \'' &#46; sqlAddslashes($field['Default'&#93;) &#46; '\'';
        
}
        if (
$field['Null'&#93; != 'YES')
        
{
            
$dp &#46;= ' NOT NULL ';
        
}
        if (!empty(
$field["Extra"&#93;))
        
{
            
$dp &#46;= $field["Extra"&#93;;
        
}
    }
    
mysql_free_result($fields_array);

    
$keysindex_array mysql_query("SHOW KEYS FROM $table");

    while (
$key mysql_fetch_array($keysindex_array))
    {
        
$kname $key['Key_name'&#93;;
        
if ($kname != "PRIMARY" and $key['Non_unique'&#93; == 0)
        
{
            
$kname "UNIQUE|$kname";
        }

        
$index[$kname&#93;[&#93; = $key['Column_name'&#93;;
    
}
    
mysql_free_result($keysindex_array);
    
    while(list(
$kname$columns) = @each($index))
    {
        
$dp &#46;= ",\n";
        
$colnames implode($columns,",");
        if(
$kname == 'PRIMARY')
        {
            
$dp &#46;= "\tPRIMARY KEY ($colnames)";
        
}else{
            if (
substr($kname,0,6) == 'UNIQUE')
            {
                
$kname substr($kname,7);
            }
            
$dp &#46;= "   KEY $kname ($colnames)";
        
}
    }
    
$dp &#46;= "\n);\n\n";
    
$rows mysql_query("SELECT * FROM $table");
    
$numfields=mysql_num_fields($rows);
    
    while (
$row mysql_fetch_array($rows))
    {
        
$dp &#46;= "INSERT INTO $table VALUES(";
        
$fieldcounter=-1;
        
$firstfield=1;
        while (++
$fieldcounter<$numfields)
        {
            if(!
$firstfield)
            {
                
$dp &#46;=' , ';
            
}else{
                
$firstfield=0;
            }
            if (!isset(
$row[$fieldcounter&#93;))
            
{
                
$dp &#46;= 'NULL';
            
}else{
                
$dp &#46;= "'"&#46;mysql_escape_string($row[$fieldcounter&#93;)&#46;"'";
            
}
        }
        
$dp &#46;= ");\n";
    
}
    
mysql_free_result($rows);
    return 
$dp;
}


$file_name date("d-m-Y")&#46;"&#46;txt";
$filehandle fopen($file_name,'w');
$result mysql_query("SHOW tables");
    while (
$row mysql_fetch_array($result))
    {
        
fwrite($filehandle,dumptb($row[0&#93;)&#46;"\n\n\n");
    
}
fclose($filehandle);


require(
"zip_lib&#46;php");

$zipfile = new zipfile(date("d-m-Y")&#46;"&#46;zip");

$zipfile->addFileAndRead($file_name);

echo 
$zipfile->file();    
  
?>


zip_lib.php

<?php

class zipfile{
    
     var 
$datasec = array();
     var 
$ctrl_dir = array();
     var 
$eof_ctrl_dir "\x50\x4b\x05\x06\x00\x00\x00\x00";
    
    
     function 
zipfile ($output_filename 'archive&#46;zip'){
        
         
header('Content-Type&#58; application/x-zip');
         
header('Content-Disposition&#58; inline; filename="' &#46; $output_filename &#46; '"');
         
header('Expires&#58; 0');
         
header('Cache-Control&#58; must-revalidate, post-check=0, pre-check=0');
         
header('Pragma&#58; public');
        
         }
    
     function 
read_File ($file){
        
         if (
is_file($file)){
            
             
$fp fopen ($file'rb');
             
$content fread ($fpfilesize($file));
             
fclose ($fp);
            
             return 
$content;
            
             }
        
         }
    
     function 
addFileAndRead ($file){
        
         if (
is_file($file))
             
$this -> addFile($this -> read_File($file), $file);
        
         }
    
     function 
unix2DosTime($unixtime 0){
        
         
$timearray = ($unixtime == 0) ? getdate() &#58; getdate($unixtime);
        
         
if ($timearray['year'&#93; < 1980){
            
             
$timearray['year'&#93; = 1980;
             
$timearray['mon'&#93; = 1;
             
$timearray['mday'&#93; = 1;
             
$timearray['hours'&#93; = 0;
             
$timearray['minutes'&#93; = 0;
             
$timearray['seconds'&#93; = 0;
            
             
}
        
         return ((
$timearray['year'&#93; - 1980) << 25) | ($timearray['mon'&#93; << 21) | ($timearray['mday'&#93; << 16) |
         
($timearray['hours'&#93; << 11) | ($timearray['minutes'&#93; << 5) | ($timearray['seconds'&#93; >> 1);
        
         
}
    
     function 
addFile($data$name$time 0){
        
         
$name str_replace('\\''/'$name);
        
         
$dtime dechex($this -> unix2DosTime($time));
         
$hexdtime '\x' &#46; $dtime[6&#93; &#46; $dtime[7&#93;
         
&#46; '\x' &#46; $dtime[4&#93; &#46; $dtime[5&#93;
         
&#46; '\x' &#46; $dtime[2&#93; &#46; $dtime[3&#93;
         
&#46; '\x' &#46; $dtime[0&#93; &#46; $dtime[1&#93;;
        
         
eval('$hexdtime = "' &#46; $hexdtime &#46; '";');
        
         
$fr "\x50\x4b\x03\x04";
         
$fr &#46;= "\x14\x00"; // ver needed to extract
         
$fr &#46;= "\x00\x00"; // gen purpose bit flag
         
$fr &#46;= "\x08\x00"; // compression method
         
$fr &#46;= $hexdtime; // last mod time and date
        
        
         
$unc_len strlen($data);
         
$crc crc32($data);
         
$zdata gzcompress($data);
         
$zdata substr(substr($zdata0strlen($zdata) - 4), 2); // fix crc bug
         
$c_len strlen($zdata);
         
$fr &#46;= pack('V', $crc); // crc32
         
$fr &#46;= pack('V', $c_len); // compressed filesize
         
$fr &#46;= pack('V', $unc_len); // uncompressed filesize
         
$fr &#46;= pack('v', strlen($name)); // length of filename
         
$fr &#46;= pack('v', 0); // extra field length
         
$fr &#46;= $name;
        
         
$fr &#46;= $zdata;
        
         
$fr &#46;= pack('V', $crc); // crc32
         
$fr &#46;= pack('V', $c_len); // compressed filesize
         
$fr &#46;= pack('V', $unc_len); // uncompressed filesize
        
        
         
$this -> datasec[&#93; = $fr;
         
$new_offset strlen(implode(''$this -> datasec));
        
         
$cdrec "\x50\x4b\x01\x02";
         
$cdrec &#46;= "\x00\x00"; // version made by
         
$cdrec &#46;= "\x14\x00"; // version needed to extract
         
$cdrec &#46;= "\x00\x00"; // gen purpose bit flag
         
$cdrec &#46;= "\x08\x00"; // compression method
         
$cdrec &#46;= $hexdtime; // last mod time & date
         
$cdrec &#46;= pack('V', $crc); // crc32
         
$cdrec &#46;= pack('V', $c_len); // compressed filesize
         
$cdrec &#46;= pack('V', $unc_len); // uncompressed filesize
         
$cdrec &#46;= pack('v', strlen($name)); // length of filename
         
$cdrec &#46;= pack('v', 0); // extra field length
         
$cdrec &#46;= pack('v', 0); // file comment length
         
$cdrec &#46;= pack('v', 0); // disk number start
         
$cdrec &#46;= pack('v', 0); // internal file attributes
         
$cdrec &#46;= pack('V', 32); // external file attributes - 'archive' bit set
        
        
         
$cdrec &#46;= pack('V', $this -> old_offset); // relative offset of local header
         
$this -> old_offset $new_offset;
        
         
$cdrec &#46;= $name;
        
         
$this -> ctrl_dir[&#93; = $cdrec;
        
         
}
    
     function 
file(){
        
         
$data implode(NULL$this -> datasec);
         
$ctrldir implode(NULL$this -> ctrl_dir);
        
         return 
$data &#46;
         
$ctrldir &#46;
         
$this -> eof_ctrl_dir &#46;
         
pack('v'sizeof($this -> ctrl_dir)) &#46; pack('v', sizeof($this -> ctrl_dir)) &#46; pack('V', strlen($ctrldir)) &#46; pack('V', strlen($data)) &#46; "\x00\x00"; // &#46;zip file comment length
         
}
    
    }

?>


Estudem php crianças, ele pode salvar vidas. =]
Saudades do antigo Darkers.

rog

nao se engana nao magrinho

o cara era um nulo e pelo jeito sempre vai ser

a classe de zip nao e dele e ele nem toca no assunto do outor

podia se integrar ela no script principal assim a aplicaçao seria standalone

o script nao vai funcionar em todos servidores porque um recurso de connexao ao sevidor mysql nao e global
assim nem sempre vai passar dentre de uma funçao

rog
realty.sys is corrupt :  reboot the universe (Y/N)