elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [SOLUCIONADO] Restaurar copia de seguridad
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Restaurar copia de seguridad  (Leído 3,302 veces)
Legnak

Desconectado Desconectado

Mensajes: 61


("Programador");


Ver Perfil
[SOLUCIONADO] Restaurar copia de seguridad
« en: 24 Junio 2014, 00:37 am »

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


« Última modificación: 24 Junio 2014, 04:26 am por Legnak » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Restaurar copia de seguridad
« Respuesta #1 en: 24 Junio 2014, 00:39 am »

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


En línea

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

Desconectado Desconectado

Mensajes: 61


("Programador");


Ver Perfil
Re: Restaurar copia de seguridad
« Respuesta #2 en: 24 Junio 2014, 00:56 am »

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í -.-)
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Restaurar copia de seguridad
« Respuesta #3 en: 24 Junio 2014, 01:04 am »

Citar
hermano 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...

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

En línea

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

Desconectado Desconectado

Mensajes: 61


("Programador");


Ver Perfil
Re: Restaurar copia de seguridad
« Respuesta #4 en: 24 Junio 2014, 01:45 am »

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
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Restaurar copia de seguridad
« Respuesta #5 en: 24 Junio 2014, 01:48 am »

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?
En línea

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

Desconectado Desconectado

Mensajes: 61


("Programador");


Ver Perfil
Re: Restaurar copia de seguridad
« Respuesta #6 en: 24 Junio 2014, 02:25 am »

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
  1. <?php
  2.  
  3. /**
  4.  * @author yas500('mohamedigm@gmail.com','mohamedigm@yahoo.com')
  5.  * @copyright 2009
  6.  * @Date 24 April
  7.  * @Phpversion 5.2.8
  8.  */
  9.  
  10. /** // // // // // // // // // // // // // // ||
  11.   // this class is used for backup and          ||
  12.   // restore mysql server databases or entire   ||
  13.   // server , can compress backup ,send         ||
  14.   // to ftp server ,restore from compress again ||
  15.   */
  16.  
  17.  
  18.  
  19.  
  20.  
  21. abstract class BackupRestore
  22. {
  23. protected $link;
  24. protected $db=array();
  25. protected $table=array();
  26. protected $text="";
  27. private $debug='0';
  28. private $msg=array();
  29.  
  30. /**
  31. function construct for logging to database server
  32. */
  33.  
  34. final public function __construct($host='localhost',$user='root',$pass='')
  35. {
  36. set_error_handler(array($this,'handleError'));
  37.  
  38. try{
  39. $this->connect($host,$user,$pass);
  40. }
  41. catch (exception $e){
  42. trigger_error($e->getMessage(),E_USER_ERROR);
  43. }
  44. }
  45.  
  46. final private function __destruct()
  47. {
  48. if ($this->msg){
  49. foreach ($era as $rr){
  50. echo "<b>Note</b>".$rr."<br>";
  51. }                          
  52. }
  53. else
  54. {
  55. echo "The mission successfully complete.";
  56. }
  57.            //SHOW ERROR NOTES TO USER AFTER END
  58. }
  59.  
  60. final public function handleError($errno,$errmsg,$errfile,$errline)
  61. {
  62.  
  63.  
  64.        if ($this->debug == '0'){
  65. switch ($errno){
  66. case E_USER_ERROR:
  67. case E_WARNING:
  68. echo $errmsg;
  69. exit();
  70. break;
  71.  
  72. case E_USER_WARNING:
  73. case E_USER_NOTICE:
  74. $this->msg[]=$errmsg;
  75. return true;
  76. break;
  77.  
  78. case E_NOTICE:
  79. case E_STRICT:
  80. return true;
  81. break;
  82.  
  83. default:
  84. echo "UNKNOWN ERROR OCCURED".$errmsg;
  85. exit();
  86. }
  87. }
  88.  
  89. if ($this->debug == '1'){
  90. $errmsg=(strpos($errmsg,'Mysql'))? mysql_error():$errmsg;
  91. echo "<b>".$errno."</b>: ".$errmsg." <b>LINE: ".$errline."</b>"."<br><b><i>In file</i></b> ".$errfile."<hr>";
  92. exit();
  93. }
  94. }
  95.  
  96.  
  97. final private function connect($host,$user,$pass)
  98. {
  99.  
  100. if (! $this->link= mysql_connect($host,$user,$pass))
  101. throw new exception ("Mysql:couldn't connect to database server or invalid inforamtion");
  102. }
  103.  
  104.  
  105. // if you have multiple dbs enter them in that sequence
  106. // $db1,$db2,..
  107. // or leave it and it will backup the entire server databases
  108.  
  109. final public function setDbs($db='*')
  110. {
  111. $db=trim($db);
  112. if (empty($db) || $db == '*'){
  113. $list=mysql_list_dbs($this->link);
  114. $rows=mysql_num_rows($list);
  115. if($rows == 0){
  116. trigger_error("Mysql:THERE IS NO DATABASES ON THE SERVER!!",E_USER_ERROR);
  117. }
  118. for($i=0;$i<$rows;$i++){
  119. $this->db[]=mysql_tablename($list,$i);
  120. }
  121. }
  122. else{
  123. $db=explode(",",$db);
  124. $this->db=$db;
  125. }
  126. }
  127.  
  128. /**
  129. // this method will be for selecting tables or ignore it and
  130. // it will backup all tables
  131. */
  132.  
  133. final public function selectTable($table='*')
  134. {
  135. $table=trim($table);
  136. if($table == '')
  137. $table='*';
  138. if (! $table=="*" && count($this->db) > '1'){
  139. trigger_error("you can't specify tables if you want more than one db",E_USER_ERROR);
  140. }
  141.  
  142. if ($table == "*"){
  143. foreach ($this->db as $name){
  144. $sql = "SHOW TABLES FROM $name";
  145. $list = mysql_query($sql, $this->link);
  146. //$list=mysql_list_tables($name);
  147. $rows=mysql_num_rows($list);
  148. for($i=0;$i<$rows;$i++){
  149. $this->table[$name][]=mysql_tablename($list,$i);
  150. }
  151. }
  152. }
  153. else{
  154. $table=explode(",",$table);
  155. foreach($table as $tb){
  156. $this->table[$this->db['0']][]=$tb;
  157. }
  158. }
  159.  
  160. }
  161.  
  162. /**
  163. // method for selecting the query required
  164.   // for backup
  165.   // this is ahabit for me to store all queries required in amethod and call it
  166. */
  167.  
  168. final protected function selectQuery($type)
  169. {
  170. $query=array(1=>"SHOW CREATE DATABASE ","SHOW CREATE TABLE ","INSERT INTO ","DROP DATABASE IF EXISTS ","DROP TABLE IF EXISTS ","SELECT * FROM ");
  171. return $query[$type];
  172. }
  173.  
  174. /**
  175. method for validate file before restore database
  176. */
  177.  
  178. final protected function getFile($file)
  179. {
  180.  
  181. $this->text="";
  182. switch ($file){
  183. case (!file_exists($file)):
  184. trigger_error("File doesn't exist!!".$file,E_USER_ERROR);
  185. return false;
  186. break;
  187. case (!is_readable($file)):
  188. trigger_error("Can't get access to the file!!",E_USER_ERROR);
  189. return false;
  190. break;
  191. default:
  192. if(preg_match("/\.gz$/",$file)){
  193. if(!$gz=gzopen($file,'rb'))
  194. trigger_error("couldn't open compressed file",E_USER_ERROR);
  195. gzrewind($gz);
  196. while(!gzeof($gz)){
  197. $this->text.=gzgets($gz);
  198. }
  199. gzclose($gz);
  200. }
  201. else
  202. {
  203. if(!$fp=fopen($file,'rb'))
  204. trigger_error("Couldn't read from the file",E_USER_ERROR);
  205. flock($fp,'1');;
  206. while(!feof($fp)){
  207. $this->text.=fgets($fp);
  208. }
  209. flock($fp,'3');
  210. fclose($fp);
  211.  
  212. }
  213. if($er=error_get_last()){
  214. trigger_error($er['type'].":".$er['message'],E_USER_WARNING);
  215. }
  216.  
  217. return true;
  218. }
  219.  
  220. }
  221.  
  222. /**
  223. this method is for prepare file that be backuped
  224. //
  225. */
  226.  
  227. final protected function setFile($txt,$cmp,$ftp,$fhost,$fuser,$fpass,$fport)
  228. {
  229. $recognize="";
  230. foreach ($this->db as $rec){
  231. $recognize.=$rec."_";
  232. }
  233. //aca
  234. $recognize=preg_replace("/_$/","",$recognize);   //for naming file backuped
  235.  
  236. // this the preferred for me format for naming files
  237. $file='backup@'.$recognize."@".date('Y-M-d',time()).'.sql';
  238. if(!$fp=fopen($file,'wb'))
  239. {
  240. trigger_error("You may have no enough rights on server",E_USER_ERROR);
  241. }
  242. flock($fp,'2');
  243. fwrite($fp,$txt);
  244. flock($fp,'3');
  245. fclose($fp);
  246.  
  247. if ($cmp == '1'){
  248. $file=$file.".gz";
  249. if(! $gz=gzopen($file,'wb'))
  250. trigger_error("Script failed to compress backuped file.",E_USER_NOTICE);
  251. gzwrite($gz,$txt);
  252. gzclose($gz);
  253. }
  254.  
  255. if($ftp == '1'){
  256. if(! $conn=ftp_connect($fhost,$fport))
  257. trigger_error("this is not avalid ftp server or make sure you type it well",E_USER_ERROR);
  258. $log=ftp_login($conn,$fuser,$fpass);
  259. if(!$log)trigger_error("Username or Password is not correct",E_USER_ERROR);
  260. $put=ftp_put($conn,$file,$file,FTP_BINARY);
  261. if(!$put){
  262. trigger_error("Couldn't upload file to remote server",E_USER_WARNING);
  263. }
  264. ftp_close($conn);
  265.  
  266. }
  267. else{
  268. $this->downBackup($file);
  269. }
  270. return true;
  271. }
  272.  
  273.  
  274. // download backuped file
  275.  
  276. final private function downBackup($file)
  277. {
  278. header("Content-Description:File Transfer");;
  279. header('Content-Transfer-Encoding: binary');
  280. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  281.   header('Pragma: public');
  282.   header('Content-Disposition: attachment; filename='.basename($file));
  283.   header('Content-Type: application/octet-stream');
  284.     header('Content-Length: ' . filesize($file));
  285.     ob_clean();
  286.     flush();
  287.     readfile($file);
  288. }
  289.  
  290. abstract protected function backupData($cmp='0',$ftp='0',$fhost='',$fpass='',$fport='21');
  291.  
  292. abstract protected function restoreSql($file);
  293.  
  294. }
  295.  
  296.  
  297.  
  298.  
  299. final class Backuprestoresql extends BackupRestore
  300. {
  301.  
  302. const HEADERS='***********************
  303. Y    A    S    5   0  0
  304. ***********************';               // mohamed ghareeb mohamed saeed signature
  305. const FIELDSEP=';';                 // seperate between queries
  306.  
  307.  
  308. /* this method for backup
  309. // you can specify more options like compression (0,1) , send through ftp to server (0,1)
  310. //
  311. */
  312.  
  313. public function backupData($cmp='0',$ftp='0',$fhost='',$fuser='anonymous',$fpass='mohamedigm@gmail.com',$fport='21')
  314. {
  315.  
  316. if($ftp == '1'){
  317. if (empty($fhost)){
  318. trigger_error("You must specify ftp host name as you select ftp option",E_USER_ERROR);
  319. }
  320. if(strpos($fhost,"ftp://")){
  321. str_replace("ftp://","",$fhost);
  322. }
  323. }
  324.  
  325. $this->text="";
  326. $this->text.=self::HEADERS;
  327.  
  328. /**
  329. this will begin save database to file
  330. */
  331. foreach($this->db as $key){
  332. $result=mysql_query($this->selectQuery('1')."$key",$this->link);
  333. while($row=mysql_fetch_row($result)){
  334. $this->text.="\r\n".$this->selectQuery('4')."$key".self::FIELDSEP.$row['1'];
  335. }
  336.  
  337. // this will save tables related to that database
  338. foreach($this->table[$key] as $select){
  339. if(! count($this->table[$key]) == '0'){
  340. $result=mysql_query($this->selectQuery('2').$select,$this->link);
  341. while($row=mysql_fetch_row($result)){
  342. $this->text.=self::FIELDSEP.$this->selectQuery('5').$select.self::FIELDSEP.$row['1'];
  343.  
  344. // fetch fields values in the tables
  345. $result2=mysql_query($this->selectQuery('6').$select,$this->link);
  346. while($row2=mysql_fetch_row($result2)){
  347. $txt="";
  348. foreach ($row2 as $val){
  349. $val=mysql_real_escape_string($val,$this->link);
  350. $txt.="'".$val."'".",";
  351. if($val == mysql_real_escape_string($row2[count($row2)-1])){
  352. //aca
  353.    $txt=preg_replace("/,$/","",$txt);
  354. }
  355. // save field values as insertion query
  356. }
  357. $this->text.=self::FIELDSEP.$this->selectQuery('3').$select." VALUES(".$txt.")";
  358. }
  359. @ mysql_free_result($result2);
  360. }
  361. }
  362.  
  363. }
  364.  
  365. //* finish database Dump *//
  366. $this->text.="\r\n### ".$key." DATABASE DUMP COMPLETED ###";
  367. }
  368. mysql_close($this->link);
  369.  
  370. if(!$this->setFile($this->text,$cmp,$ftp,$fhost,$fuser,$fpass,$fport))
  371. trigger_error("Something goes wrong with file creation",E_USER_ERROR);
  372.  
  373.  
  374. return true;               // all things is done correctly
  375. }
  376.  
  377. /**
  378. this method for restore server database
  379. //
  380. */
  381.  
  382. public function restoreSql($file)
  383. {
  384. if($this->getFile($file)){
  385. $this->text=str_replace(self::HEADERS,"",$this->text);   // ignore header
  386. $this->text=preg_replace("/###.* DATABASE DUMP COMPLETED ###/",self::FIELDSEP,$this->text);
  387. // ignore database dump complete message
  388.  
  389. foreach ($tt=explode(self::FIELDSEP,$this->text) as $query){
  390. if (empty($query))
  391. continue;
  392. $rs=mysql_query($query,$this->link);
  393. if(!$rs){
  394. trigger_error("Mysql:problem with aquery",E_USER_NOTICE);
  395. }
  396.  
  397. if (strstr($query,"CREATE DATABASE")){
  398. $seldb=substr($query,strpos($query,'`')+1,strlen($query));
  399. $seldb=substr($seldb,'0',strpos($seldb,"`"));
  400. mysql_select_db($seldb,$this->link);
  401. //**
  402. // could use query with "use database " and the name of database
  403. //**
  404. }
  405.  
  406. }
  407. }
  408. else
  409. exit();
  410. mysql_close($this->link);
  411. return true;
  412. }
  413.  
  414. }
  415.  
  416.  
  417.  
  418.  
  419.  
  420. //*****  EXAMPLES *****//
  421.  
  422. /** FOR BACKUP FILE  **/
  423. /**
  424.  || $obj=new Backuprestoresql()   // you can specify information of your server or make it
  425.    // default as localhost and user root with no pass
  426.  || $obj->setDbs()              // leave it blank or * and it will backup entire server
  427.    // or specify dbs "more one db1,db2,..."
  428.   // caution :: make sure you have rights to write on dbs you choose
  429.  || $obj->selectTable()         // leave it blank or * and it will backup all tables
  430.    // or specify tables "more one table1,table2,..."
  431.  || $obj->backupData()     // here will be the backup you can choose compression (0,1)
  432.    // ftp (0,1) if you specify ftp you must specify at least host
  433. */
  434.  
  435.  
  436.  
  437. /** FOR RESTORE FROM FILE  **/
  438. /**
  439.  || $obj=new Backuprestoresql()   // you can specify information of your server or make it
  440.    // default as localhost and user root with no pass
  441.  || $obj->restoreSql('file path') // specify location of your file accepted extension sql,gz,txt
  442. */
  443.  
  444.  
  445.  
  446.  
  447.  
  448. ?>
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Restaurar copia de seguridad
« Respuesta #7 en: 24 Junio 2014, 02:38 am »

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
En línea

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

Desconectado Desconectado

Mensajes: 61


("Programador");


Ver Perfil
Re: Restaurar copia de seguridad
« Respuesta #8 en: 24 Junio 2014, 03:54 am »

vale, gracias por todo hermano xD
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines