网站备份是网站管理中必不可少的一环,这不仅可以避免网站的数据丢失,也能够在网站遭遇入侵、攻击等情况时,进行快速恢复。本文将介绍如何使用PHP编写一个简单的网站备份程序,实现自动备份网站的核心数据,并存储至指定的位置。
我们先在主目录下新建一个文件夹,命名为backup,用来存储我们备份的文件。再在主目录下新建一个文件,命名为backup.php,用来编写备份程序的主体代码。
使用PHP内置的mysqli连接到MySQL数据库,获取所需备份数据。以下是连接数据库的示例代码:
//连接数据库
$mysqli = new mysqli('localhost', 'USERNAME', 'PASSWORD', 'DBNAME');
//检查连接是否成功
if($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
将需要备份的文件逐一读取,并将内容写入备份文件中。以下是备份文件的示例代码:
//定义需要备份的文件和目录
$files = array(
'index.php',
'js',
'img'
);
//备份文件
foreach($files as $file) {
if(is_dir($file)) {
backup_folder($file, $archive);
} else {
$archive->addFile($file);
}
}
//递归备份目录
function backup_folder($folder, $archive) {
$folder .= '/';
$files = glob($folder . '*', GLOB_MARK);
foreach($files as $file) {
if(is_dir($file)) {
backup_folder($file, $archive);
} else {
$archive->addFile($file);
}
}
}
使用PHP内置的ZipArchive库,将备份文件打包。以下是打包文件的示例代码:
//打包文件,将备份文件保存到backup文件夹
$filename = date('YmdHis').'.zip';
$zip = new ZipArchive();
if($zip->open('backup/'.$filename, ZIPARCHIVE::CREATE) !== TRUE) {
die("无法创建 $filename");
}
backup_folder('.', $zip);
$zip->close();
将当前备份信息记录到数据库中,以便日后查询和管理。以下是保存备份记录的示例代码:
//获取备份文件的完整路径
$filepath = realpath('backup/'.$filename);
//将备份记录写入数据库中
$backup_time = date('Y-m-d H:i:s');
$sql = "INSERT INTO backup (backup_file, backup_time) VALUES ('$filepath', '$backup_time')";
$mysqli->query($sql);
<?php
//连接数据库
$mysqli = new mysqli('localhost', 'USERNAME', 'PASSWORD', 'DBNAME');
if($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
//定义需要备份的文件和目录
$files = array(
'index.php',
'js',
'img'
);
//打包文件,将备份文件保存到backup文件夹
$filename = date('YmdHis').'.zip';
$zip = new ZipArchive();
if($zip->open('backup/'.$filename, ZIPARCHIVE::CREATE) !== TRUE) {
die("无法创建 $filename");
}
backup_folder('.', $zip);
$zip->close();
//获取备份文件的完整路径
$filepath = realpath('backup/'.$filename);
//将备份记录写入数据库中
$backup_time = date('Y-m-d H:i:s');
$sql = "INSERT INTO backup (backup_file, backup_time) VALUES ('$filepath', '$backup_time')";
$mysqli->query($sql);
echo "备份成功!";
//递归备份目录
function backup_folder($folder, $archive) {
$folder .= '/';
$files = glob($folder . '*', GLOB_MARK);
foreach($files as $file) {
if(is_dir($file)) {
backup_folder($file, $archive);
} else {
$archive->addFile($file);
}
}
}
?>