67dcb2f77c
brought over all the files from the Jekyll version, fixed categories, reformatted for different markdown processor
4.4 KiB
4.4 KiB
layout | title | author | date | categories | tags | summary | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
post | A Handy PHP Backup Script | Daniel | 2008-03-28 23:06:37 |
|
|
A PHP script to create a zip archive and e-mail it |
I found a script over on the Lunarpages Forums about [using PHP to back up your site][forum]. I have taken it, modified it a little, beefed up the documentation a lot, and am now posting it here. You can copy and paste it from below to customize it for your own use.
{% codeblock backup.php lang:php %}
*/ // --- 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 //dev.mysql.com/doc/refman/4.1/en/password-security.html . For PostgreSQL, the file is ~/.pgpass, and it is detailed at //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); {% endcodeblock %} [forum]: //www.lunarforums.com/lunarpages_how_tos/site_and_mysql_backups_via_cron-t22118.0.html "Site and MySQL backups via cron - Lunarforums"