martes, 21 de febrero de 2017

Exportar Base de Datos desde Aplicación Externa Realizada en PHP, Bootstrap, HTML5

En ocasiones necesitamos tener una aplicación externa para poder realizar la copia de seguridad de una base de datos o mas. En esta ocasión realizaremos para la base de datos MySql.



Realizar copias de bases de datos mediante un script de PHP puede ser útil si no tenemos acceso SSH al servidor o a un cpanel.

Al ejecutar este creará en la misma raíz del proyecto un archivo .zip en el cuál estará el archivo .sql.

link de descarga del proyecto: Proyecto Restore


 index.php
 <?php
  error_reporting( E_ALL & ~E_NOTICE );
 define( 'Str_VERS', "4.0.0" );
 define( 'Str_DATE', "21 de Febrero de 2016" );

  function query($conn, $query_string) {
    $query_id = mysqli_query($conn, $query_string);
    if( !$query_id) {
      problemas($conn, "Invalid SQL: ".$query_string);
    }
    return $query_id;
  }

  function free_result($query_id=-1) {
  if( $query_id!=-1) {
    $query_id=$query_id;
  }
  return @mysqli_free_result($query_id);
 }

  function strip_backticks(&$text) {
  return $text;
 }

  function query_first($conn, $query_string) {
    $res = query($conn,$query_string);
    $returnarray = fetch_array($res);
    free_result($res);
    return $returnarray;
  }

  function fetch_array($query_id=-1) {
  if( $query_id!=-1) {
   $query_id=$query_id;
  }
  $record = mysqli_fetch_array($query_id);
  return $record;
 }

  function fetch_table_dump_sql($conn, $table, $fp = 0) {
  $tabledump = "--\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);
  $tabledump = "-- Table structure for table `$table`\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);
  $tabledump = "--\n\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);

  $tabledump = query_first($conn, "SHOW CREATE TABLE $table");
  strip_backticks($tabledump['Create Table']);
  $tabledump = "DROP TABLE IF EXISTS $table;\n" . $tabledump['Create Table'] . ";\n\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);

  $tabledump = "--\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);
  $tabledump = "-- Dumping data for table `$table`\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);
  $tabledump = "--\n\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);

  $tabledump = "LOCK TABLES $table WRITE;\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);

  $rows = query($conn, "SELECT * FROM $table");
  $numfields= mysqli_num_fields($rows);
  while ($row = fetch_array($rows, DBARRAY_NUM)) {
    $tabledump = "INSERT INTO $table VALUES(";
    $fieldcounter = -1;
    $firstfield = 1;
    // campos
    while (++$fieldcounter < $numfields) {
      if( !$firstfield) {
        $tabledump .= ', ';
      }
      else {
        $firstfield = 0;
      }
      if( !isset($row["$fieldcounter"])) {
        $tabledump .= 'NULL';
      }
      else {
        $tabledump .= "'" . mysqli_real_escape_string ($conn, $row["$fieldcounter"]) . "'";
      }
    }
    $tabledump .= ");\n";
    if( !$hay_Zlib )
      fwrite($fp, $tabledump);
    else
      gzwrite($fp, $tabledump);
  }
  free_result($rows);
  $tabledump = "UNLOCK TABLES;\n";
  if( !$hay_Zlib )
    fwrite($fp, $tabledump);
  else
    gzwrite($fp, $tabledump);
}


 function problemas($conn, $msg) {
  $errdesc = mysqli_error($conn);
  $errno = mysqli_error($conn);
  $message  = "<br>";
  $message .= "- Ha habido un problema accediendo a la Base de Datos<br>";
  $message .= "- Error $appname: $msg<br>";
  $message .= "- Error mysql: $errdesc<br>";
  $message .= "- Error número mysql: $errno<br>";
  $message .= "- Script: ".getenv("REQUEST_URI")."<br>";
  $message .= "- Referer: ".getenv("HTTP_REFERER")."<br>";

   echo( "</strong><br><br><hr><center><small>" );
   setlocale( LC_TIME,"spanish" );
   echo strftime( "%A %d %B %Y&nbsp;-&nbsp;%H:%M:%S", time() );
   echo( "<br> 2017 <a href=\"mailto:info@cloudsrcsoft.com\">CloudSrcSoft</a><br>" );
   echo( "vers." . Str_VERS . "<br>" );
   echo( "</small></center>" );
   die("");
   }

  function validarHost($servername, $username, $password, $database){
    $conn = @mysqli_connect( $servername, $username, $password );
    $error = false;
    $tablas = 0;
    if($conn)
        $db = @mysqli_select_db($conn, $database);
    if( !$conn || !$db ) {
        echo( "<br> - La conexion con la Base de datos ha fallado: <br> ".mysqli_connect_error($conn)."" );
        $error = true;
    } else {
        echo( "<br> - Conexión establecida." );
        $error = false;
    }

    if( !@function_exists( 'gzopen' ) ) {
      $hay_Zlib = false;
      echo( "<br> - Ya que no está disponible Zlib, Guardaré la Base de Datos sin comprimir, como '$filename'" );
    }
    else {
      $filename = $database . ".sql.gz";
      $hay_Zlib = true;
      echo( "<br> - Ya que está disponible Zlib, Guardaré la Base de Datos comprimida, como '$filename'" );
    }


 if( !$error ) {
  //  MySQL versión
  $result = mysqli_query($conn, 'SELECT VERSION() AS version' );
  if( $result != FALSE && @mysqli_num_rows($result) > 0 ) {
   $row   = mysqli_fetch_array($result);
  } else {
   $result = @mysql_query( 'SHOW VARIABLES LIKE \'version\'' );
   if( $result != FALSE && @mysqli_num_rows($result) > 0 ){
    $row   = mysqli_fetch_row($result);
   }
  }
  if(! isset($row) ) {
   $row['version'] = '3.21.0';
  }
 }

  if( !$error ) {
  $el_path = getenv("REQUEST_URI");
  $el_path = substr($el_path, strpos($el_path, "/"), strrpos($el_path, "/"));

    $sql = "SHOW TABLES FROM $database";
    $result = mysqli_query($conn, $sql);



  if (!$result) {
      echo "DB Error, could not list tables\n";
      echo 'MySQL Error: ' . mysqli_error($conn);
      exit;
    }

  else {
   $t_start = time();

   if( !$hay_Zlib )
    $filehandle = fopen( $filename, 'w' );
   else
    $filehandle = gzopen( $filename, 'w6' ); //  nivel de compresión

   if( !$filehandle ) {
    $el_path = getenv("REQUEST_URI");
    $el_path = substr($el_path, strpos($el_path, "/"), strrpos($el_path, "/"));
    echo( "<br>" );
    echo( "- No he podido crear '$filename' en '$el_path/'. Por favor, asegúrese de<br>" );
    echo( "&nbsp;&nbsp;que dispone de privilegios de escritura.<br>" );
   }
   else {
    $tabledump = "-- Dump de la Base de Datos\n";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
      setlocale( LC_TIME,"spanish" );
    $tabledump = "-- Fecha: " . strftime( "%A %d %B %Y - %H:%M:%S", time() ) . "\n";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
    $tabledump = "--\n";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
    $tabledump = "-- Version: " . Str_VERS . ", del " . Str_DATE . ", insidephp@gmail.com\n";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
    $tabledump = "-- Soporte y Updaters: http://computersac.com/";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
    $tabledump = "--\n";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
    $tabledump = "-- Host: `$db_server`    Database: `$database`\n";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
    $tabledump = "-- ------------------------------------------------------\n";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
    $tabledump = "-- Server version ". $row['version'] . "\n\n";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );

    $result = query($conn, 'SHOW tables' );
    while( $currow = fetch_array($result, DBARRAY_NUM) ) {
     fetch_table_dump_sql($conn, $currow[0], $filehandle );
     fwrite( $filehandle, "\n" );
     if( !$hay_Zlib )
      fwrite( $filehandle, "\n" );
     else
      gzwrite( $filehandle, "\n" );
      $tablas++;
    }
    $tabledump = "\n-- Dump de la Base de Datos Completo.";
    if( !$hay_Zlib )
     fwrite( $filehandle, $tabledump );
    else
     gzwrite( $filehandle, $tabledump );
    if( !$hay_Zlib )
     fclose( $filehandle );
    else
     gzclose( $filehandle );

    $t_now = time();
    $t_delta = $t_now - $t_start;
    if( !$t_delta )
     $t_delta = 1;
    $t_delta = floor(($t_delta-(floor($t_delta/3600)*3600))/60)." minutos y "
    .floor($t_delta-(floor($t_delta/60))*60)." segundos.";
    echo( "<br> - He guardado las $tablas tablas en $t_delta<br>" );
    echo( "<br>" );
    echo( "- El Dump de la Base de Datos está completo.<br>" );
    echo( "- He guardado la Base de Datos en: $el_path/$filename<br>" );
    echo( "<br>" );
    echo( "- Puede bajársela directamente: </strong><a href=\"$filename\">$filename</a>" );
    $size = filesize($filename);
    $size = number_format( $size );
    $size = str_replace( ",",".",$size );
    echo( "&nbsp;&nbsp;&nbsp;<small>($size bytes)</small><br>" );
   }
  }
 }


  }
?>
 
para el código completo descarga el proyecto de mega.nz 
link de descarga del proyecto: Proyecto Restore 

También puedes compartir el proyecto a través del siguiente enlace vía facebook:

0 comentarios:

Publicar un comentario