How to backup website automatically using PHP
Posted: Sun Nov 29, 2009 4:45 am
Here is a php script that will create a compressed backup of your website files, creating a different file each day for a month (then start over) so you have 30 days of backups. It will email you with a backup confirmation. Run it every night using cron to kick it off. You should download the backup files from the server on a regular basis.
If you want to exclude a directory, add the --exclude parm to the tar command as shown in the example below (which will exlcude the public_html/audio directory):
Please note that this script is very resource intensive. Do not run it more than once a day, and do not run it at peak times. If you have a large site the script may timeout depending on the server settings, but the backup may still be created.
Code: Select all
<?php
$emailaddress = "[email protected]";
$path = "/full_server_path_to_file_goes_here"; // full server path to the directory where you want the backup files (no trailing slash)
// modify the above values to fit your environment
$target = $path . "/backup" . date(d) . ".tar.gz";
if (file_exists($target)) unlink($target);
system("tar --create --preserve --gzip --file=".$target." ~/public_html ~/mail",$result);
$size = filesize($target);
switch ($size) {
case ($size>=1048576): $size = round($size/1048576) . " MB"; break;
case ($size>=1024); $size = round($size/1024) . " KB"; break;
default: $size = $size . " bytes"; break;
}
$message = "The website backup has been run.\n\n";
$message .= "The return code was: " . $result . "\n\n";
$message .= "The file path is: " . $target . "\n\n";
$message .= "Size of the backup: " . $size . "\n\n";
$message .= "Server time of the backup: " . date(" F d h:ia") . "\n\n";
mail($emailaddress, "Website Backup Message" , $message, "From: Website <>");
?>
Code: Select all
system("tar --create --preserve --gzip --file=".$target." --exclude ~/public_html/audio ~/public_html ~/mail",$result);
- Before using cron, run the script from your browser to make sure it works as anticipated.
- Set a cron job to run the script once a day (at an odd time - like 4:23am - to minimize server load issues).
- This example backs up the public_html and mail directories.
- The backup file (named backup.XX.tar.gz) will be created in your root directory (above public_html).