nombre_bd = $conexion->getNombreBD(); $this->usuario = $usuario; } public function backupGlobal(){ if(!$this->usuario->tieneRol(1)){ $error = $this->locale['4042']; throw new Exception($error); return false; exit; } $consulta = "SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema='".$this->nombre_bd."'"; $bdB = new BDBackup(); $bd = new BD(); $db_tables = $bdB->arrayQuery($consulta, "TABLE_NAME"); if(count($db_tables)>0){ $crlf = "\n"; //ob_start(); //@ob_implicit_flush(0); $backup = "#----------------------------------------------------------".$crlf; $backup .= "# Intranet de Selfor SQL Data Dump".$crlf; $backup .= "# Fecha: `".date("d/m/Y H:i")."`".$crlf; $backup .= "#----------------------------------------------------------".$crlf; $backup .= $crlf."SET FOREIGN_KEY_CHECKS=0;".$crlf."#".$crlf; mysql_query('SET SQL_QUOTE_SHOW_CREATE=1'); foreach($db_tables as $table){ @set_time_limit(1200); mysql_query("OPTIMIZE TABLE $table"); $backup .= $crlf."#".$crlf."# Structure for Table `".$table."`".$crlf."#".$crlf; $backup .= "DROP TABLE IF EXISTS `$table`;$crlf"; $row=mysql_fetch_array($bd->execQuery("SHOW CREATE TABLE $table")); $backup .= $row[1].";".$crlf; $result=mysql_query("SELECT * FROM $table"); if($result&&mysql_num_rows($result)){ $backup .= $crlf."#".$crlf."# Table Data for `".$table."`".$crlf."#".$crlf; $column_list=""; $num_fields=mysql_num_fields($result); for($i=0;$i<$num_fields;$i++){ $column_list.=(($column_list!="")?", ":"")."`".mysql_field_name($result,$i)."`"; } } while($row=mysql_fetch_array($result)){ $dump="INSERT INTO `$table` ($column_list) VALUES ("; for($i=0;$i<$num_fields;$i++){ $dump.=($i>0)?", ":""; if(!isset($row[$i])){ $dump.="NULL"; }elseif($row[$i]=="0"||$row[$i]!=""){ $type=mysql_field_type($result,$i); if($type=="tinyint"||$type=="smallint"||$type=="mediumint"||$type=="int"||$type=="bigint"||$type=="timestamp"){ $dump.=$row[$i]; }else{ $search_array=array('\\','\'',"\x00","\x0a","\x0d","\x1a"); $replace_array=array('\\\\','\\\'','\0','\n','\r','\Z'); $row[$i]=str_replace($search_array,$replace_array,$row[$i]); $dump.="'$row[$i]'"; } }else{ $dump.="''"; } } $dump.=');'; $backup .= $dump.$crlf; } } $backup .= $crlf."SET FOREIGN_KEY_CHECKS=1;".$crlf."#".$crlf; $ruta = $this->backupMysql($backup); if($ruta != ""){ $aciertos = "Backup realizado"; return $ruta; }else{ $errores = "Fallo al realizar el backup"; return ""; } } } /* Descargar la base de datos en gzip (al máximo) y enviar por mail.*/ private function backupMysql($backup){ // Crear nombres de los ficheros backup $fecha=time(); // Fecha actual $archivo=gmstrftime("%y-%m-%d",$fecha); // Formato de la fecha para dar nombre al fichero $asunto = 'Base de datos '.$archivo; $ruta = constante("srcDocs")."/bdcopy/"; $ruta=$ruta.$archivo.'.sql'; // Archivo sql $archivo_gz=$ruta.$archivo.'.gz'; $resultado = $archivo.'.sql'.$archivo.'.gz'; $fp = fopen($ruta, "a"); $write = fputs($fp, $backup); fclose($fp); $tamano_archivo = $fp['size']; // Archivo sql.gz // Descarga de la base de datos if(file_exists($ruta)) // Si ha creado correctamente el backup { $comprimido=$this->comprimir($ruta,$archivo_gz); // Comprimirlo en gzip if($comprimido=='TRUE'){ //$this->enviarAdjunto ($archivo_gz, $asunto); // Envio de mail comprimido }else{ //$this->enviarAdjunto ($fp, $asunto); // Envio de mail sin comprimir } @unlink($ruta); //TODO ruta segura // Borrar fichero sql //@unlink($archivo_gz); // Borrar fichero sql.gz //return TRUE; // Regresa confirmado el backup return $resultado; } else // No ha podido crear el backup return ""; // Regresa denegando el backup } // Comprimir en gzip un archivo private function comprimir($archivo_original,$archivo_comprimido) { $fp=@gzopen($archivo_comprimido,'w9'); // Crear archivo comprimido if($fp!='FALSE') // Comprobar que zLib esta activo { $fp2=@fopen($archivo_original,'r'); // Abrir archivo original $buffer=@fread($fp2,filesize($archivo_original));// Leer archivo original @fclose($fp2); // Cerrar archivo original @gzwrite($fp,$buffer); // Escribir archivo comprimido @gzclose($fp); // Cerrar archivo comprimido return TRUE; // Regresa confirmado la compresión } else return FALSE; // Regresa sin comprimirlo } // // ENVIO DE CORREO CON ADJUNTO COMPRIMIDO // private function enviarAdjunto($archivo,$asunto) // { // global $mail_enviar; // // $buffer = implode("", file($archivo)); // Leer fichero // $buffer=chunk_split(base64_encode($buffer)); // Codificación en base64 y divido // // // Cabeceras // $cabecera = "MIME-version: 1.0\n"; // $cabecera .= "Content-type: multipart/mixed; "; // $cabecera .= "boundary=\"Message-Boundary\"\n"; // $cabecera .= "Content-transfer-encoding: 7BIT\n"; // $cabecera .= "X-attachments: $archivo"; // // // Mensaje // $mensaje = "--Message-Boundary\n"; // $mensaje .= "Content-type: text/plain; charset=ISO-8859-1\n"; // $mensaje .= "Content-transfer-encoding: 7BIT\n"; // $mensaje .= "Content-description: Mail message body\n\n"; // // // Adjuntar el fichero // $mensaje .= "\n\n--Message-Boundary\n"; // $mensaje .= "Content-type: Binary; name=\"$archivo\"\n"; // $mensaje .= "Content-Transfer-Encoding: BASE64\n"; // $mensaje .= "Content-disposition: attachment; filename=\"$archivo\"\n\n"; // $mensaje .= "$buffer\n"; // $mensaje .= "--Message-Boundary--\n"; // // @mail($mail_enviar,$asunto,$mensaje,$cabecera); // Envio de mail // } function getLink(){ if(!$this->usuario->tieneRol(1)){ $error = $this->locale['4042']; throw new Exception($error); return false; exit; } return $this->conexion->getlink(); } } ?>