我想备份我的数据库并使用php将其邮寄到我的电子邮件ID。我找到了一个脚本来备份我的数据库并以邮政形式邮寄给我 但是当我尝试执行脚本时,它工作正常,但邮件不在我的收件箱中。 这是脚本:
<?php
$db_host="localhost"; //mysql host
$db_user="*******"; //databse user name
$db_pass="*******"; //database password
$db_name="******"; //database name
$tables="*"; // use * for all tables or use , to seperate table names
$email="*******"; //your email id
///////////////////////////////////////////////////////////////////////////////////////////
/////////don't need to change bellow //////
backup($db_host,$db_user,$db_pass,$db_name,$tables,$email);
function backup($db_host,$db_user,$db_pass,$db_name,$tables = '*',$email)
{
$con= mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name,$con);
//get all of the tables
if($tables == '*')
{
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result))
{
$tables[] = $row[0];
}
}
else
{
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
//cycle through
foreach($tables as $table)
{
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
$return.= 'DROP TABLE '.$table.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return.= "\n\n".$row2[1].";\n\n";
for ($i = 0; $i < $num_fields; $i++)
{
while($row = mysql_fetch_row($result))
{
$return.= 'INSERT INTO '.$table.' VALUES(';
for($j=0; $j<$num_fields; $j++)
{
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace("\n","\\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
$return.= ");\n";
}
}
$return.="\n\n\n";
}
//save file
$filename='db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql';
$handle = fopen($filename,'w+');
fwrite($handle,$return);
fclose($handle);
compress($filename);
send_mail($filename.".zip",$email);
}
function send_mail($filepath,$email)
{
$from = "Backup <cepheisys.com/mac>";
$subject = "Database backup";
$message="This attachment contains the backup of your database.";
$separator = md5(time());
// carriage return type (we use a PHP end of line constant)
$eol = PHP_EOL;
// attachment name
$filename = "backup.zip";
//$pdfdoc is PDF generated by FPDF
$attachment = chunk_split(base64_encode(file_get_contents($filepath)));
// main header
$headers = "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"";
// no more headers after this, we start the body! //
$body = "--".$separator.$eol;
$body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
$body .= "This is a MIME encoded message.".$eol;
// message
$body .= "--".$separator.$eol;
$body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
$body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$body .= $message.$eol;
// attachment
$body .= "--".$separator.$eol;
$body .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol;
$body .= "Content-Transfer-Encoding: base64".$eol;
$body .= "Content-Disposition: attachment".$eol.$eol;
$body .= $attachment.$eol;
$body .= "--".$separator."--";
// send message
if (mail($email, $subject, $body, $headers)) {
echo "Your backup sent to your email id";
header("refresh: 1; main.php");
} else {
echo "Oops mail can not be send";
}
}
function compress($filepath)
{
$zip = new ZipArchive();
$file=$filepath.".zip";
if($zip->open($file,1?ZIPARCHIVE::OVERWRITE:ZIPARCHIVE::CREATE)===TRUE)
{
// Add the files to the .zip file
$zip->addFile($filepath);
// Closing the zip file
$zip->close();
}
}
答案 0 :(得分:0)
我这样做是为了一个爱好,所以任何输入都是谦卑的。
$row[$j] = ereg_replace("\n","\\n",$row[$j]);
是折旧的,应该用以下内容替换:
$pattern = '/\\\n/';
$replacement = '\\\\\n';
$row[$j] = preg_replace($pattern, $replacement, $row[$j] );
我无法让您的代码有效地发送电子邮件,所以我只是通过电子邮件发送了自己的链接。我必须按照链接并通过ftp登录,但它就在那里。 LMK,如果你有任何意见。
我在代码上返回了路径,然后将文件位置添加到我的数据库::
function Add_BU_to_Database ($filename){
$conn = db_connect(); //connects to my db
$BU_Hist_num = General_Get_num('BU_History','BU_Hist_num'); //gets primary field
$now = time();
$BU_Add_Qry = $conn->query("insert into BU_History
(BU_Hist_num,BU_Path,BU_Time_Add,BU_Time_Del,BU_Status)
Values('".$BU_Hist_num."','".$filename."','".$now."','','Active')");
}//end function`
然后我更新了页面顶部的ini,这样就不会超时::
ini_set('memory_limit', '1G');
ini_set('max_execution_time', 300);
然后我写了剩下的代码来删除旧文件并在新的php文件上更新数据库::
<?php
ini_set('memory_limit', '1G');
ini_set('max_execution_time', 300);
$conn = db_connect();
$AweekAgo = time()-1209600;
$DBDeletionQry = $conn->query("select * from BU_History where BU_Status = 'Active' and BU_Time_Add < '$AweekAgo' ");
$DBD_rows = mysqli_num_rows($DBDeletionQry);
echo "Files older than two weeks: ".$DBD_rows."<br>";
$filesdeleted = 0;
for($i=0;$i<$DBD_rows;$i++){
//Finds each file path
$DBD_row = mysqli_fetch_assoc($DBDeletionQry);
$BU_Path = "".$DBD_row['BU_Path'];
$BU_Hist_num = $DBD_row['BU_Hist_num'];
//Shows Paths
echo $BU_Path."<br>";
//Delete's File
if(unlink($BU_Path)){$filesdeleted = $filesdeleted+1;}
//Updates the Database
$now = time();
$DBDUpdate = $conn->query("update BU_History set BU_Time_Del = '$now', BU_Status = 'Inactive' where BU_Hist_num = '$BU_Hist_num' ");
}//end for
echo "Files deleted: ".$filesdeleted."<br>";
?>
最后但并非最不重要的是,我使用我的cron管理器运行备份和删除备份.php文件。