<?php
$dbhost = 'localhost'; // hostname usually localhost
$dbuser = '*replace*'; // username for MySQL database
$dbpass = '*replace*'; // Password for MySQL database
$dbname = '*replace*'; // MySQL Database Name
$use_gzip = 'yes'; // Change to 'no' if you don't want files gzipped
$remove_file = 'no'; // Change to 'yes' if you want to delete the backup file from your account after sending. Pick yes to save server space
$use_email = 'yes'; // Change to 'yes' if you want the backup to be sent through email. If you pick yes, fill out the next 3 lines
$send_to = '*replace*'; // email address for backup file
$send_from = '*replace*'; // email address sending the email, doesn't matter can be same as above
$subject = "MySQL Database ($dbname) Backup - " . date("j F Y"); // this is the subject of the email being sent to you
$use_ftp = 'no'; // Change to 'yes' if you want the backup file uploaded to a remote FTP server? If you pick yes, you must fill out the next 4 lines
$ftp_server = 'ftp.yourdomain.com'; // FTP address
$ftp_user_name = 'user'; // FTP username
$ftp_user_pass = 'xxxxxxxx'; // FTP password
$ftp_path = "/db_backups"; // Path to upload on FTP server
$echo_status = 'yes'; // Change to 'no' if you want the script to work silently (nothing will be sent to the screen)
# You probably don't need to edit below this line....
#-------------------------------------------------------------------------------
$db = mysql_connect("$dbhost","$dbuser","$dbpass");
mysql_select_db("$dbname",$db);
$path = make_dir();
if ($echo_status == 'yes') {
print "<html><head><title>MySQL Database Backup</title></head><body>";
print "<font face=Verdana size=2><h3>Starting Process...</h3><p>";
print "Backup dumpfile in progress<ul>";
}
$result = mysql_query("show tables from $dbname");
while (list($table) = mysql_fetch_row($result)) {
$newfile .= get_def($table);
$newfile .= "\n\n";
$newfile .= get_content($table);
$newfile .= "\n\n";
$i++;
if ($echo_status == 'yes') {
print "<li>Dumped table $table</li>";
}
}
$file_name = $dbname . "-" . date("Ymd-Hi") . ".sql";
$file_path = $path . $file_name;
if ($use_gzip == "yes") {
$file_name .= ".gz";
$file_path .= ".gz";
$zp = gzopen($file_path, "wb9");
gzwrite($zp,$newfile);
gzclose($zp);
if ($echo_status == 'yes') {
print "</ul>Gzip-file is created...<br>";
}
} else {
$fp = fopen($file_path, "w");
fwrite($fp, $newfile);
fclose($fp);
if ($echo_status == 'yes') {
print "<br>SQL-file is created...<br>";
}
}
if ($use_email == 'yes') {
$fileatt_type = filetype($file_path);
$headers = "From: $send_from";
// Read the file to be attached ('rb' = read binary)
$fp = fopen($file_path,'rb');
$data = fread($fp,filesize($file_path));
fclose($fp);
// Generate a boundary string
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// Add the headers for a file attachment
$headers .= "\nMIME-Version: 1.0\n" ."Content-Type: multipart/mixed;\n" ." boundary=\"{$mime_boundary}\"";
// Add a multipart boundary above the plain message
$message = "This is a multi-part message in MIME format.\n\n" ."--{$mime_boundary}\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";
// Base64 encode the file data
$data = chunk_split(base64_encode($data));
// Add file attachment to the message
$message .= "--{$mime_boundary}\n" ."Content-Type: {$fileatt_type};\n" ." name=\"{$file_name}\"\n" ."Content-Disposition: attachment;\n" ." filename=\"{$file_name}\"\n" ."Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" ."--{$mime_boundary}--\n";
// Send the message
$ok = @mail($send_to, $subject, $message, $headers);
if ($echo_status == 'yes') {
print "<br>Mail is sent...<br>";
}
}
if ($use_ftp == 'yes') {
if ($use_gzip == 'yes') {
$mode = FTP_BINARY;
} else {
$mode = FTP_ASCII;
}
$ftp_id = ftp_connect($ftp_server);
$login_result = ftp_login($ftp_id, $ftp_user_name, $ftp_user_pass);
$upload = ftp_put($ftp_id, $ftp_path . $file_name, $file_path, $mode);
ftp_close($ftp_id);
if ($echo_status == 'yes') {
print "<br>Backup is uploaded to FTP server<br>";
}
}
if ($remove_file == "yes") {
unlink($file_name);
if ($echo_status == 'yes') {
print "<br>File is deleted...<br>";
}
}
if ($echo_status == 'yes') {
print "<br>Back up done!<p>";
print "<br>� <a href=http://www.imbri.com>Imbri Web</a></font><p>";
print "</body></html>";
}
function make_dir() {
$page = split("/", getenv('SCRIPT_NAME'));
$n = count($page)-1;
$page = $page[$n];
$page = split("\.", $page, 2);
$extension = $page[1];
$page = $page[0];
$script = "$page.$extension";
$base_url = "http://".$_SERVER['SERVER_NAME'];
$directory = $_SERVER['PHP_SELF'];
$url_base = "$base_url$directory";
$url_base = ereg_replace("$script", '', "$_SERVER[PATH_TRANSLATED]");
$path = $url_base;
return $path;
}
function get_def($table) {
$def = "";
$def .= "DROP TABLE IF EXISTS $table;\n";
$def .= "CREATE TABLE $table (\n";
$result = mysql_query("SHOW FIELDS FROM $table") or die("Table $table not existing in database");
while($row = mysql_fetch_array($result)) {
$def .= " $row[Field] $row[Type]";
if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
if ($row["Null"] != "YES") $def .= " NOT NULL";
if ($row[Extra] != "") $def .= " $row[Extra]";
$def .= ",\n";
}
$def = ereg_replace(",\n$","", $def);
$result = mysql_query("SHOW KEYS FROM $table");
while($row = mysql_fetch_array($result)) {
$kname=$row[Key_name];
if(($kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname";
if(!isset($index[$kname])) $index[$kname] = array();
$index[$kname][] = $row[Column_name];
}
while(list($x, $columns) = @each($index)) {
$def .= ",\n";
if($x == "PRIMARY") $def .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
else if (substr($x,0,6) == "UNIQUE") $def .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
else $def .= " KEY $x (" . implode($columns, ", ") . ")";
}
$def .= "\n);";
return (stripslashes($def));
}
function get_content($table) {
$content="";
$result = mysql_query("SELECT * FROM $table");
while($row = mysql_fetch_row($result)) {
$insert = "INSERT INTO $table VALUES (";
for($j=0; $j<mysql_num_fields($result);$j++) {
if(!isset($row[$j])) $insert .= "NULL,";
else if($row[$j] != "") $insert .= "'".addslashes($row[$j])."',";
else $insert .= "'',";
}
$insert = ereg_replace(",$","",$insert);
$insert .= ");\n";
$content .= $insert;
}
return $content;
}
/* Changelog
Version 1.0 - August 15th, 2003
Added HTML & cleaned up comments.
*/
?>