[SOLUCIONADO] Restaurar copia de seguridad

Iniciado por Legnak, 24 Junio 2014, 00:37 AM

0 Miembros y 2 Visitantes están viendo este tema.

Legnak

Hola, alguno de ustedes sabe como puedo hacer para restaurar copia de seguridad con PHP? lo del input type file queda descartado ya que no me da la dirección exacta de donde está realmente ubicada la copia de seguridad que selecciono D:
Saludos

engel lex

tendrás que dar más detalle, copia de seguridad de los archivos del servidor o del mysql? explayate con detalle para poder entender que quieres, que tienes, cual es tu problema y entender como resolverlo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Legnak

hermano yo tengo el archivo sql con la copia de seguridad, lo que quiero es restaurarla (se podría hacer fácilmente desde phpmyadmin pero a mi profesor no le sirve así -.-)

engel lex

Citarhermano yo tengo el archivo sql con la copia de seguridad

haber empezado por ahí... no respondas como molesto o a cucharadas, explicate ampliamente como sea necesario para entender tu problema especifico... hasta ahora lo único que se es que usas php y quieres restaurar mysql... pero basicamente más nada...

te di 3 pautas a seguir en la explicación, es más facil si lo haces así no somos adivinos para saber que sucede...

Citarexplayate con detalle para poder entender que quieres, que tienes, cual es tu problema

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Legnak

mil disculpas hermano, no quise ser grosero ni nada por el estilo, es que ando un poco desesperado, con decirte que no leí eso que me pusiste xD

Bueno, el sistema que tengo me genera una copia de seguridad, pero necesito que haya un módulo desde donde se pueda restaurar esa copia de seguridad, dándole la opción al usuario de que seleccione que copia desea restaurar.

En un principio pensé hacerlo con el input file, iba muy confiado hasta que noté que me daba la dirección "fake", ahora no tengo ni idea de como hacerlo

sorry si no me he explicado bien y gracias por comentar

engel lex

ok, supongo que no quieres usar el input porque no te da la direccion real de la maquina, antes de ir a algo más, que tiene que ver que no te dé la direccion, si lo que te importa es el respaldo? cuando tu le pasas el archivo, el lo sube y crea una copia temporal en el servidor, la cual tu puedes decidir descartar o recuperar... no te sirve tener solo el archivo del sql para hacer el respaldo?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Legnak

gracias por responder  :D... y bueno, ahora que lo mencionas, en realidad cuento con ese archivo jajaja, supongo que estoy haciendolo mal xD, a ver ¿tendría primero que mover el archivo que se ha subido para poder utilizarlo (ya que su formato es .tmp)  y luego validar que fuese de extension sql, utilizarlo y posteriormente borrarlo?
estoy usando esta clase :

Código (php) [Seleccionar]
<?php

/**
 * @author yas500('mohamedigm@gmail.com','mohamedigm@yahoo.com')
 * @copyright 2009
 * @Date 24 April
 * @Phpversion 5.2.8
 */
 
 
/** // // // // // // // // // // // // // // ||
  // this class is used for backup and          ||
  // restore mysql server databases or entire   ||
  // server , can compress backup ,send         ||
  // to ftp server ,restore from compress again ||
  */
 
 

set_time_limit('0');
error_reporting(E_ALL);


abstract class 
BackupRestore
{
protected $link;
protected $db=array();
protected $table=array();
protected $text="";
private $debug='0';
private $msg=array();

/**
function construct for logging to database server
*/

final public function __construct($host='localhost',$user='root',$pass='')
{
set_error_handler(array($this,'handleError'));

try{
$this->connect($host,$user,$pass);
}
catch (exception $e){
trigger_error($e->getMessage(),E_USER_ERROR);
}
}

final private function __destruct()
{
if ($this->msg){
foreach ($era as $rr){
echo "<b>Note</b>".$rr."<br>";
}                          
}
else
{
echo "The mission successfully complete.";
}
            //SHOW ERROR NOTES TO USER AFTER END
}

final public function handleError($errno,$errmsg,$errfile,$errline)
{
        

        if (
$this->debug == '0'){
switch ($errno){
case E_USER_ERROR:
case E_WARNING:
echo $errmsg;
exit();
break;

case E_USER_WARNING:
case E_USER_NOTICE:
$this->msg[]=$errmsg;
return true;
break;

case E_NOTICE:
case E_STRICT:
return true;
break;

default:
echo "UNKNOWN ERROR OCCURED".$errmsg;
exit();
}
}

if ($this->debug == '1'){
$errmsg=(strpos($errmsg,'Mysql'))? mysql_error():$errmsg;
echo "<b>".$errno."</b>: ".$errmsg." <b>LINE: ".$errline."</b>"."<br><b><i>In file</i></b> ".$errfile."<hr>";
exit();
}
}


final private function connect($host,$user,$pass)
{

if (! $this->linkmysql_connect($host,$user,$pass))
throw new exception ("Mysql:couldn't connect to database server or invalid inforamtion");
}


// if you have multiple dbs enter them in that sequence
// $db1,$db2,..
// or leave it and it will backup the entire server databases

final public function setDbs($db='*')
{
$db=trim($db);
if (empty($db) || $db == '*'){
$list=mysql_list_dbs($this->link);
$rows=mysql_num_rows($list);
if($rows == 0){
trigger_error("Mysql:THERE IS NO DATABASES ON THE SERVER!!",E_USER_ERROR);
}
for($i=0;$i<$rows;$i++){
$this->db[]=mysql_tablename($list,$i);
}
}
else{
$db=explode(",",$db);
$this->db=$db;
}
}

/**
// this method will be for selecting tables or ignore it and
// it will backup all tables
*/

final public function selectTable($table='*')
{
$table=trim($table);
if($table == '')
$table='*';
if (! $table=="*" && count($this->db) > '1'){
trigger_error("you can't specify tables if you want more than one db",E_USER_ERROR);
}

if ($table == "*"){
foreach ($this->db as $name){
$sql "SHOW TABLES FROM $name";
$list mysql_query($sql$this->link);
//$list=mysql_list_tables($name);
$rows=mysql_num_rows($list);
for($i=0;$i<$rows;$i++){
$this->table[$name][]=mysql_tablename($list,$i);
}
}
}
else{
$table=explode(",",$table);
foreach($table as $tb){
$this->table[$this->db['0']][]=$tb;
}
}

}

/**
// method for selecting the query required
  // for backup
  // this is ahabit for me to store all queries required in amethod and call it
*/

final protected function selectQuery($type)
{
$query=array(1=>"SHOW CREATE DATABASE ","SHOW CREATE TABLE ","INSERT INTO ","DROP DATABASE IF EXISTS ","DROP TABLE IF EXISTS ","SELECT * FROM ");
return $query[$type];
}

/**
method for validate file before restore database
*/

final protected function getFile($file)
{

$this->text="";
switch ($file){
case (!file_exists($file)):
trigger_error("File doesn't exist!!".$file,E_USER_ERROR);
return false;
break;
case (!is_readable($file)):
trigger_error("Can't get access to the file!!",E_USER_ERROR);
return false;
break;
default:
if(preg_match("/\.gz$/",$file)){
if(!$gz=gzopen($file,'rb'))
trigger_error("couldn't open compressed file",E_USER_ERROR);
gzrewind($gz);
while(!gzeof($gz)){
$this->text.=gzgets($gz);
}
gzclose($gz);
}
else
{
if(!$fp=fopen($file,'rb'))
trigger_error("Couldn't read from the file",E_USER_ERROR);
flock($fp,'1');;
while(!feof($fp)){
$this->text.=fgets($fp);
}
flock($fp,'3');
fclose($fp);

}
if($er=error_get_last()){
trigger_error($er['type'].":".$er['message'],E_USER_WARNING);
}

return true;
}

}

/**
this method is for prepare file that be backuped
//
*/

final protected function setFile($txt,$cmp,$ftp,$fhost,$fuser,$fpass,$fport)
{
$recognize="";
foreach ($this->db as $rec){
$recognize.=$rec."_";
}
//aca
$recognize=preg_replace("/_$/","",$recognize);   //for naming file backuped

// this the preferred for me format for naming files
$file='backup@'.$recognize."@".date('Y-M-d',time()).'.sql';
if(!$fp=fopen($file,'wb'))
{
trigger_error("You may have no enough rights on server",E_USER_ERROR);
}
flock($fp,'2');
fwrite($fp,$txt);
flock($fp,'3');
fclose($fp);

if ($cmp == '1'){
$file=$file.".gz";
if(! $gz=gzopen($file,'wb'))
trigger_error("Script failed to compress backuped file.",E_USER_NOTICE);
gzwrite($gz,$txt);
gzclose($gz);
}

if($ftp == '1'){
if(! $conn=ftp_connect($fhost,$fport))
trigger_error("this is not avalid ftp server or make sure you type it well",E_USER_ERROR);
$log=ftp_login($conn,$fuser,$fpass);
if(!$log)trigger_error("Username or Password is not correct",E_USER_ERROR);
$put=ftp_put($conn,$file,$file,FTP_BINARY);
if(!$put){
trigger_error("Couldn't upload file to remote server",E_USER_WARNING);
}
ftp_close($conn);

}
else{
$this->downBackup($file);
}
return true;
}


// download backuped file

final private function downBackup($file)
{
header("Content-Description:File Transfer");;
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
   
header('Pragma: public');
   
header('Content-Disposition: attachment; filename='.basename($file));
   
header('Content-Type: application/octet-stream');
    
header('Content-Length: ' filesize($file));
    
ob_clean();
    
flush();
    
readfile($file);
}

abstract protected function backupData($cmp='0',$ftp='0',$fhost='',$fpass='',$fport='21');

abstract protected function restoreSql($file);

}




final class 
Backuprestoresql extends BackupRestore
{

const HEADERS='***********************
Y    A    S    5   0  0 
***********************'
;               // mohamed ghareeb mohamed saeed signature
const FIELDSEP=';';                 // seperate between queries


/* this method for backup
// you can specify more options like compression (0,1) , send through ftp to server (0,1)
//
*/

public function backupData($cmp='0',$ftp='0',$fhost='',$fuser='anonymous',$fpass='mohamedigm@gmail.com',$fport='21')
{

if($ftp == '1'){
if (empty($fhost)){
trigger_error("You must specify ftp host name as you select ftp option",E_USER_ERROR);
}
if(strpos($fhost,"ftp://")){
str_replace("ftp://","",$fhost);
}
}

$this->text="";
$this->text.=self::HEADERS;

/**
this will begin save database to file
*/
foreach($this->db as $key){
$result=mysql_query($this->selectQuery('1')."$key",$this->link);
while($row=mysql_fetch_row($result)){
$this->text.="\r\n".$this->selectQuery('4')."$key".self::FIELDSEP.$row['1'];
}

// this will save tables related to that database
mysql_select_db($key);
foreach($this->table[$key] as $select){
if(! count($this->table[$key]) == '0'){
$result=mysql_query($this->selectQuery('2').$select,$this->link);
while($row=mysql_fetch_row($result)){
$this->text.=self::FIELDSEP.$this->selectQuery('5').$select.self::FIELDSEP.$row['1'];

// fetch fields values in the tables
$result2=mysql_query($this->selectQuery('6').$select,$this->link);
while($row2=mysql_fetch_row($result2)){
$txt="";
foreach ($row2 as $val){
$val=mysql_real_escape_string($val,$this->link);
$txt.="'".$val."'".",";
if($val == mysql_real_escape_string($row2[count($row2)-1])){
//aca
    $txt=preg_replace("/,$/","",$txt);
}
// save field values as insertion query 
}
$this->text.=self::FIELDSEP.$this->selectQuery('3').$select." VALUES(".$txt.")";
}
mysql_free_result($result2);
}
}

}

//* finish database Dump *//
$this->text.="\r\n### ".$key." DATABASE DUMP COMPLETED ###";
}
mysql_close($this->link);

if(!$this->setFile($this->text,$cmp,$ftp,$fhost,$fuser,$fpass,$fport))
trigger_error("Something goes wrong with file creation",E_USER_ERROR);


return true;               // all things is done correctly
}

/**
this method for restore server database
//
*/

public function restoreSql($file)
{
if($this->getFile($file)){
$this->text=str_replace(self::HEADERS,"",$this->text);   // ignore header
$this->text=preg_replace("/###.* DATABASE DUMP COMPLETED ###/",self::FIELDSEP,$this->text);
// ignore database dump complete message

foreach ($tt=explode(self::FIELDSEP,$this->text) as $query){
if (empty($query))
continue;
$rs=mysql_query($query,$this->link);
if(!$rs){
trigger_error("Mysql:problem with aquery",E_USER_NOTICE);
}

if (strstr($query,"CREATE DATABASE")){
$seldb=substr($query,strpos($query,'`')+1,strlen($query));
$seldb=substr($seldb,'0',strpos($seldb,"`"));
mysql_select_db($seldb,$this->link);
//**
// could use query with "use database " and the name of database
//**
}

}
}
else
exit();
mysql_close($this->link);
return true;
}

}





//*****  EXAMPLES *****//

/** FOR BACKUP FILE  **/
/**
 || $obj=new Backuprestoresql()   // you can specify information of your server or make it
    // default as localhost and user root with no pass
 || $obj->setDbs()              // leave it blank or * and it will backup entire server
    // or specify dbs "more one db1,db2,..."
  // caution :: make sure you have rights to write on dbs you choose
 || $obj->selectTable()         // leave it blank or * and it will backup all tables
    // or specify tables "more one table1,table2,..."
 || $obj->backupData()     // here will be the backup you can choose compression (0,1)
    // ftp (0,1) if you specify ftp you must specify at least host
*/



/** FOR RESTORE FROM FILE  **/
/**
 || $obj=new Backuprestoresql()   // you can specify information of your server or make it
    // default as localhost and user root with no pass
 || $obj->restoreSql('file path') // specify location of your file accepted extension sql,gz,txt
*/





?>

engel lex

veo que tienes todo para respaldar, pero no para subir el archivo

mirate estos ejemplos y la explicacion de la subida de archivo :P

http://www.w3schools.com/php/php_file_upload.asp

y si, cuando lo subes el guarda un .tmp por seguridad (aqui es cuando entra la funcion "move_uploaded_file")... si el archivo no es util no ignoras y listo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Legnak

vale, gracias por todo hermano xD