A Handy PHP Backup Script
I found a script over on the Lunarpages Forums about using PHP to back up your site. I have taken it, modified it a little, beefed up the documentation a lot, and am now posting it here. You can download the source code for it, and it is also displayed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | <?php /** * Generic Backup Script. * * To configure this script for your purposes, just edit the parameters below. * Once you have the parameters set properly, when the script executes, it will * create an archive file, gzip it, and e-mail it to the address specified. It * can be executed through cron with the command * * php -q [name of script] * * You are free to use this, modify it, copy it, etc. However, neither DJS * Consulting nor Daniel J. Summers assume any responsibility for good or bad * things that happen when modifications of this script are run. * * @author Daniel J. Summers <daniel@djs-consulting.com> */ // --- SCRIPT PARAMETERS --- /* -- File Name -- This is the name of the file that you're backing up, and should contain no slashes. For example, if you're backing up a database, this might look something like... $sFilename = "backup-my_database_name-" . date("Y-m-d") . ".sql"; */ $sFilename = "backup-[whatever-it-is]-" . date("Y-m-d") . ".[extension]"; /* -- E-mail Address -- This is the e-mail address to which the message will be sent. */ $sEmailAddress = "[your e-mail address]"; /* -- E-mail Subject -- This is the subject that will be on the e-mail you receive. */ $sEmailSubject = "[something meaningful]"; /* -- E-mail Message -- This is the text of the message that will be sent. */ $sMessage = "Compressed database backup file $sFilename.gz attached."; /* -- Backup Command -- This is the command that does the work. A note on the database commands - your setup likely requires a password for these commands, and they each allow you to pass a password on the command line. However, this is very insecure, as anyone who runs "ps" can see your password! For MySQL, you can create a ~/.my.cnf file - it is detailed at http://dev.mysql.com/doc/refman/4.1/en/password-security.html . For PostgreSQL, the file is ~/.pgpass, and it is detailed at http://www.postgresql.org/docs/8.0/interactive/libpq-pgpass.html . Both of these files should be chmod-ded to 600, so that they can only be viewed by you, the creator. That being said, some common commands are... - Backing Up a MySQL Database $sBackupCommand = "mysqldump -u [user_name] [db_name] > $sFilename"; - Backing Up a PostgreSQL Database $sBackupCommand = "pg_dump [db_name] -h localhost -U [user_name] -d -O > $sFilename"; - Backing Up a set of files (tar and gzip) $sBackupCommand = "tar cvf $sFilename [directory]/*"; Whatever command you use, this script appends .gz to the filename after the command is executed. */ $sBackupCommand = "[a backup command]"; // --- END OF SCRIPT PARAMETERS --- // // Edit below at your own risk. :) // Do the backup. $sResult = passthru($sBackupCommand . "; gzip $sFilename"); $sFilename .= ".gz"; // Create the message. $sMessage = "Compressed database backup file $sFilename attached."; $sMimeBoundary = "<<<:" . md5(time()); $sData = chunk_split(base64_encode(implode("", file($sFilename)))); $sHeaders = "From: $sEmailAddress\r\n" . "MIME-Version: 1.0\r\n" . "Content-type: multipart/mixed;\r\n" . " boundary=\"$sMimeBoundary\"\r\n"; $sContent = "This is a multi-part message in MIME format.\r\n\r\n" . "--$sMimeBoundary\r\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n" . "Content-Transfer-Encoding: 7bit\r\n\r\n" . $sMessage."\r\n" . "--$sMimeBoundary\r\n" . "Content-Disposition: attachment;\r\n" . "Content-Type: Application/Octet-Stream; name=\"$sFilename\"\r\n" . "Content-Transfer-Encoding: base64\r\n\r\n" . $sData."\r\n" . "--$sMimeBoundary\r\n"; // Send the message. mail($sEmailAddress, $sEmailSubject, $sContent, $sHeaders); // Delete the file - we don't need it any more. unlink($sFilename); ?> |


PHP Coding School » Blog Archive » php code [2008-03-29 06:53:44] said,
March 29, 2008 at 1:03 am
[...] A Handy PHP Backup Script By Daniel I found a script over on the Lunarpages Forums about using PHP to back up your site. I have taken it, modified it a little, beefed up the documentation a lot, and am now posting it here. You can download the source code for it, … DJS Consulting Tech Blog – http://www.djs-consulting.com/linux/blog [...]
thet said,
October 30, 2008 at 2:01 am
thanks for your provided
aman said,
July 14, 2009 at 1:33 pm
$sFilename = “backup-my_database_name-” . date(“Y-m-d”) . “.sql”; */
$sFilename = “backup-[whatever-it-is]-” . date(“Y-m-d”) . “.[extension]“;
How do I specify my table here which has to backed up?
Daniel said,
July 15, 2009 at 5:46 am
Aman,
The part you quoted just creates the filename – the actual backup command for MySQL is on line 56, and for PostgreSQL on line 59. These sample commands will grab all the tables in the database. They work well – I’ve recently had some problems on my development machine, and had to set up another one. I used backups modeled after the script above, and was able to create new test databases pretty quickly.
That being said, if you’re using MySQL, add “–tables [list of tables]” after the [db_name] parameter to selectively dump certain tables – details on mysqldump can be found here. In a similar way, the “–table=[tablename]” option can be added to pgdump (and can also be qualified with a schema name using “–schema=[schemaname]) – more details on pgdump are here.
I hope that helps!
aman said,
July 15, 2009 at 11:31 am
Please can u give an example…
$sFilename = “backup-database-” . date(“Y-m-d”) . “.csv”;
$sBackupCommand = “mysqldump -u user database table111 > $sFilename”;
/*user – the main username
database – my database name
table111 – the table to be backed up
Is it correct? */
Daniel said,
July 21, 2009 at 6:54 am
(Sorry for the delay)
Aman, that looks like it should work. I can’t test it right now, as my main development machine is down, but the form follows the first example at the link I provided.
Terry said,
September 28, 2009 at 5:20 pm
Thanks for the post!
I decided to use the same basic framework to backup my website (substituting tar for mysqldump) but the resulting file is so big (about 20 meg) that the line
$sData = chunk_split(base64_encode(implode(“”, file($sFilename))));
throws an error. I’m working on fixing it, but any suggestions would be appreciated.
Thanks!
Terry
A Handy PHP Backup Script « DJS Consulting Tech Blog | Yoobz said,
March 5, 2010 at 11:58 pm
[...] more: A Handy PHP Backup Script « DJS Consulting Tech Blog Posteado por: yoobz on March 29, [...]
Gewinne said,
May 16, 2010 at 7:08 am
hola
i’m so pleased that i found this site. that post was so nice. thanks again i added the rss on this page.
are you planning to post similar posts?