Originally from V-Nessa's site, I thought I would share the PHP script that I have now modified to include Secure Copy (SCP) support.
<?php
// PHP script to allow periodic cPanel backups automatically.
// Permissions on this file should be 600
// Place outside your public_html
// Crontab: 30 3 * * * /usr/local/bin/php /home/username/cpanel_backup.php
// ********* Configuration *********
// Info required for cPanel access
$cpuser = "username"; // Username used to login to CPanel
$cppass = "password"; // Password used to login to CPanel
$domain = "domain.com"; // Domain name where CPanel is run
$skin = "x3"; // Set to cPanel skin you use (script won't work if it doesn't match)
// Info required for SCP host
$ftpuser = "scpuser"; // Username for SCP account
$ftppass = "scppass"; // Password for SCP account
$ftphost = "scp.host.com"; // Full hostname or IP address for SCP host
$port = "22";
$ftpmode = "scp"; // FTP mode ("ftp" for active, "passiveftp" for passive, "scp" for scp)
$rdir = "/home/yourusername/Backup/";
// make sure this folder exists on the destination host
// Notification information
$notifyemail = "you@youremail.com"; // Email address to send results
// Secure or non-secure mode
$secure = 0; // Set to 1 for SSL (requires SSL support), otherwise will use standard HTTP
// Set to 1 to have web page result appear in your cron log
$debug = 1;
// *********** Don't Touch!! *********
if ($secure) {
$url = "ssl://".$domain;
$port = 2083;
} else {
$url = $domain;
$port = 2082;
}
$socket = fsockopen($url,$port);
if (!$socket) { echo "Failed to open socket connection... Bailing out!\n"; exit; }
// Encode authentication string
$authstr = $cpuser.":".$cppass;
$pass = base64_encode($authstr);
$params = "dest=$ftpmode&rdir=$rdir&email=$notifyemail&server=$ftphost&port=$port&user=$ftpuser&pass=$ftppass&submit=Generate Backup";
// Make POST to cPanel
fputs($socket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0\r\n");
fputs($socket,"Host: $domain\r\n");
fputs($socket,"Authorization: Basic $pass\r\n");
fputs($socket,"Connection: Close\r\n");
fputs($socket,"\r\n");
// Grab response even if we don't do anything with it.
while (!feof($socket)) {
$response = fgets($socket,4096);
if ($debug) echo $response;
}
fclose($socket);
?>
If you need help with usage, it's exactly the same as in V_Nessa's original post, so read there, but now supports copying to a remote host over SSH.