Backups automáticos no cPanel

Backups é daquelas coisas às quais só se dá o justo valor depois do desastre e em geral a lição é dura. Qualquer pessoa responsável pela manutenção de um site ou qualquer outro projecto sério o sabe mas em geral o problema é mesmo manter a disciplina.
Não será novidade a funcionalidade do cPanel para fazer backup de parte ou da totalidade de uma conta. É também bom lembrar que a maior parte das SPs (em ambientes partilhados) não permite o restauro da totalidade de uma conta, tendo isso de passar pelo suporte técnico (não havendo impeditivo para backups parciais). Se isto já traz alguma segurança, o esquecimento pode ser fatal.
É então que surge uma solução simples para automatizar este processo, com base nas tarefas agendadas CRON.
O primeiro passo será criar e configurar o seguinte ficheiro numa pasta que não seja a public_html (com permissões 600):
<?php // script PHP para backup periódico e automático de uma conta cPanel. // Este ficheiro deve ter permissões 600 // Colocar fora do public_html // Crontab: 30 3 * * * /usr/local/bin/php /home/username/cpanel_backup.php // ********* Configuração ********* // Informação para acesso ao cPanel $cpuser = "usern5"; // Username do CPanel $cppass = "password"; // Password do CPanel $domain = "oteudominio.com"; // Domínio onde corre o cPanel $skin = "x"; // Skin do cPanel (ex: x, x2, x3) // Informação para acesso a servidor FTP // Se o servidor de destino for o mesmo estes valores devem ficar vazios $ftpuser = "username"; // Username para FTP $ftppass = "password"; // Password para FTP $ftphost = "ftp.oteudominio.com"; // Domínio ou IP do servidor FTP $ftpmode = "passiveftp"; // modo FTP ("ftp" para activo, "passiveftp" para passivo) // Informação para notificação $notifyemail = "tu@oteudominio.com"; // Email para receber os resultados // Modo seguro ou não $secure = 0; // 1 para SSL // 1 para mais resultados no 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&email=$notifyemail&server=$ftphost&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); ?>