Skip to content

Instantly share code, notes, and snippets.

@csmarwal
Forked from anja98/fullbackup.php
Created January 22, 2021 03:37
Show Gist options
  • Save csmarwal/370366ab6ac29afea1d6adf235a6ef05 to your computer and use it in GitHub Desktop.
Save csmarwal/370366ab6ac29afea1d6adf235a6ef05 to your computer and use it in GitHub Desktop.
Automatic cPanel Backups PHP script
<?php
/*
PHP script to allow periodic cPanel backups automatically, optionally to a remote FTP server.
This script contains passwords. It is important to keep access to this file secure (we would ask you to place it in your
home directory, not public_html)
To schedule the script to run regularly, add this script to run as a cron job in your cpanel.
You need create 'backups' folder in your home directory ( or any other folder that you would like to store your backups in ).
Reference: https://www.namecheap.com/support/knowledgebase/article.aspx/915
*/
// ********* THE FOLLOWING ITEMS NEED TO BE CONFIGURED *********
// Information required for cPanel access
$cpuser = "username"; // Username used to login to cPanel
$cppass = 'password'; // Password used to login to cPanel. NB! you could face some issues with the "$#&/" chars in the password, so if script does not work, please try to change the password.
$domain = "example.com";// Your main domain name
$skin = "x"; // Set to cPanel skin you use (script will not work if it does not match). Most people run the default "x" theme or "x3" theme
// Information required for FTP host
$ftpuser = "ftpusername"; // Username for FTP account
$ftppass = 'ftppassword'; // Password for FTP account NB! you could face some issues with the "$#&/" chars in the password, so if script does not work, please try to change the password.
$ftphost = "ip_address"; // IP address of your hosting account
$ftpmode = "passiveftp"; // FTP mode: homedir - Home Directory, ftp - Remote FTP Server, passiveftp - Remote FTP Server (passive mode transfer), scp - Secure Copy (SCP)
// Notification information $notifyemail = "[email protected]"; // 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 = 0;
$ftpport = "21";
$ftpdir = "/backups/"; // Directory where backups stored (make it in your /home/ directory). Or you can change 'backups' to the name of any other folder created for the backups;
// *********** NO CONFIGURATION ITEMS BELOW THIS LINE *********
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&email=$notifyemail&server=$ftphost&user=$ftpuser&pass=$ftppass&port=$ftpport&rdir=$ftpdir&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 do not do anything with it.
while (!feof($socket)) {
$response = fgets($socket,4096); if ($debug) echo $response;
}
fclose($socket);
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment