debug("Entering save_structure(".$filename.",".$root_directory.") method ..."); $dbdump = new DatabaseDump(dbserver, dbuser, dbpass); $dumpfile = $root_directory.'/'.$filename; $dbdump->save(dbname, $dumpfile) ; $log->debug("Exiting save_structure method ..."); } /** * DatabaseDump will save the dump of database to the file specified. * * The dump file contains series of SQL statements (with some meta information) * generated similar to mysqldump command. * * To restore back the dump you can use the 'source' command in sql. * Like: * mysql> create database dbname; * mysql> use dbname; * mysql> source sql_dump_file; * * @author Prasad */ class DatabaseDump { private $fhandle; function DatabaseDump($dbserver, $username, $password) { mysql_connect($dbserver, $username, $password); } function save($database, $filename) { // Connect to database $db = mysql_select_db($database); $db_charset = mysql_fetch_assoc(mysql_query("SHOW variables LIKe'character_set_database'")); if($db_charset['Value']=='utf8'){ mysql_query("SET NAMES 'utf8'"); } if(empty($db)) { return; } $this->file_open($filename); // Write some information regarding database dump and the time first. $this->writeln("SET NAMES 'utf8';"); $this->writeln("-- $database database dump"); $this->writeln("-- Date: " . date("D, M j, G:i:s T Y")); $this->writeln("-- ----------------------------------"); $this->writeln(""); // Meta information which helps to import into mysql database. $this->writeln("SET FOREIGN_KEY_CHECKS=0;"); $this->writeln("SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO';"); $this->writeln(""); // Get all table names from database $tcount = 0; $trs = mysql_list_tables($database); for($tindex = 0; $tindex < mysql_num_rows($trs); $tindex++) { $table = mysql_tablename($trs, $tindex); if(!empty($table)) { $tables[$tcount] = mysql_tablename($trs, $tindex); $tcount++; } } // List tables $dump = ''; for($tindex = 0; $tindex < count($tables); $tindex++) { // Table Name $table = $tables[$tindex]; $table_create_rs = mysql_query("SHOW CREATE TABLE `$table`"); $table_create_rows = mysql_fetch_array($table_create_rs); $table_create_sql = $table_create_rows[1]; // Our parser used for reading the dump file is very basic // hence we will need to remove the new lines $table_create_sql = str_replace("\n","",$table_create_sql); // Our parser used for reading the dump file is very basic // hence we will need to remove the new lines $table_create_sql = str_replace("\n","",$table_create_sql); // Write table create statement $this->writeln(""); $this->writeln("--"); $this->writeln("-- Table structure for table `$table` "); $this->writeln("--"); $this->writeln(""); $this->writeln("DROP TABLE IF EXISTS `$table`;"); $this->writeln($table_create_sql . ';'); $this->writeln(""); // Write data $this->writeln("--"); $this->writeln("-- Dumping data for table `$table` "); $this->writeln("--"); $this->writeln(""); $table_query = mysql_query("SELECT * FROM `$table`"); $num_fields = mysql_num_fields($table_query); while($fetch_row = mysql_fetch_array($table_query)) { $insert_sql = "INSERT INTO `$table` VALUES("; for($n = 1; $n <= $num_fields; $n++) { $m = $n -1; $field_value = $fetch_row[$m]; $field_value = str_replace('\"', '"', mysql_escape_string($field_value)); $insert_sql .= "'". $field_value . "', "; } $insert_sql = substr($insert_sql,0,-2); $insert_sql .= ");"; if($insert_sql != "") { $this->writeln($insert_sql); } } } // Meta information reset to original state. $this->writeln("SET FOREIGN_KEY_CHECKS=0;"); $this->file_close(); } function file_open($filename) { $this->fhandle = fopen($filename, "w+"); } function file_close() { fclose($this->fhandle); } function write($string) { fprintf($this->fhandle, "%s", $string); } function writeln($string) { fprintf($this->fhandle, "%s\r\n", $string); } }; class createZip { public $compressedData = array(); public $centralDirectory = array(); // central directory public $endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record public $oldOffset = 0; /** * Function to create the directory where the file(s) will be unzipped * * @param $directoryName string * */ public function addDirectory($directoryName) { $directoryName = str_replace("\\", "/", $directoryName); $feedArrayRow = "\x50\x4b\x03\x04"; $feedArrayRow .= "\x0a\x00"; $feedArrayRow .= "\x00\x00"; $feedArrayRow .= "\x00\x00"; $feedArrayRow .= "\x00\x00\x00\x00"; $feedArrayRow .= pack("V",0); $feedArrayRow .= pack("V",0); $feedArrayRow .= pack("V",0); $feedArrayRow .= pack("v", strlen($directoryName) ); $feedArrayRow .= pack("v", 0 ); $feedArrayRow .= $directoryName; $feedArrayRow .= pack("V",0); $feedArrayRow .= pack("V",0); $feedArrayRow .= pack("V",0); $this -> compressedData[] = $feedArrayRow; $newOffset = strlen(implode("", $this->compressedData)); $addCentralRecord = "\x50\x4b\x01\x02"; $addCentralRecord .="\x00\x00"; $addCentralRecord .="\x0a\x00"; $addCentralRecord .="\x00\x00"; $addCentralRecord .="\x00\x00"; $addCentralRecord .="\x00\x00\x00\x00"; $addCentralRecord .= pack("V",0); $addCentralRecord .= pack("V",0); $addCentralRecord .= pack("V",0); $addCentralRecord .= pack("v", strlen($directoryName) ); $addCentralRecord .= pack("v", 0 ); $addCentralRecord .= pack("v", 0 ); $addCentralRecord .= pack("v", 0 ); $addCentralRecord .= pack("v", 0 ); $ext = "\x00\x00\x10\x00"; $ext = "\xff\xff\xff\xff"; $addCentralRecord .= pack("V", 16 ); $addCentralRecord .= pack("V", $this -> oldOffset ); $this -> oldOffset = $newOffset; $addCentralRecord .= $directoryName; $this -> centralDirectory[] = $addCentralRecord; } /** * Function to add file(s) to the specified directory in the archive * * @param $directoryName string * */ public function addFile($data, $directoryName) { $directoryName = str_replace("\\", "/", $directoryName); $feedArrayRow = "\x50\x4b\x03\x04"; $feedArrayRow .= "\x14\x00"; $feedArrayRow .= "\x00\x00"; $feedArrayRow .= "\x08\x00"; $feedArrayRow .= "\x00\x00\x00\x00"; $uncompressedLength = strlen($data); $compression = crc32($data); $gzCompressedData = gzcompress($data); $gzCompressedData = substr( substr($gzCompressedData, 0, strlen($gzCompressedData) - 4), 2); $compressedLength = strlen($gzCompressedData); $feedArrayRow .= pack("V",$compression); $feedArrayRow .= pack("V",$compressedLength); $feedArrayRow .= pack("V",$uncompressedLength); $feedArrayRow .= pack("v", strlen($directoryName) ); $feedArrayRow .= pack("v", 0 ); $feedArrayRow .= $directoryName; $feedArrayRow .= $gzCompressedData; $feedArrayRow .= pack("V",$compression); $feedArrayRow .= pack("V",$compressedLength); $feedArrayRow .= pack("V",$uncompressedLength); $this -> compressedData[] = $feedArrayRow; $newOffset = strlen(implode("", $this->compressedData)); $addCentralRecord = "\x50\x4b\x01\x02"; $addCentralRecord .="\x00\x00"; $addCentralRecord .="\x14\x00"; $addCentralRecord .="\x00\x00"; $addCentralRecord .="\x08\x00"; $addCentralRecord .="\x00\x00\x00\x00"; $addCentralRecord .= pack("V",$compression); $addCentralRecord .= pack("V",$compressedLength); $addCentralRecord .= pack("V",$uncompressedLength); $addCentralRecord .= pack("v", strlen($directoryName) ); $addCentralRecord .= pack("v", 0 ); $addCentralRecord .= pack("v", 0 ); $addCentralRecord .= pack("v", 0 ); $addCentralRecord .= pack("v", 0 ); $addCentralRecord .= pack("V", 32 ); $addCentralRecord .= pack("V", $this -> oldOffset ); $this -> oldOffset = $newOffset; $addCentralRecord .= $directoryName; $this -> centralDirectory[] = $addCentralRecord; } /** * Fucntion to return the zip file * * @return zipfile (archive) */ public function getZippedfile() { $data = implode("", $this -> compressedData); $controlDirectory = implode("", $this -> centralDirectory); return $data. $controlDirectory. $this -> endOfCentralDirectory. pack("v", sizeof($this -> centralDirectory)). pack("v", sizeof($this -> centralDirectory)). pack("V", strlen($controlDirectory)). pack("V", strlen($data)). "\x00\x00"; } /** * * Function to force the download of the archive as soon as it is created * * @param archiveName string - name of the created archive file */ public function forceDownload($archiveName) { $headerInfo = ''; if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); } // Security checks if( $archiveName == "" ) { echo "