} //Set next step if (!isset($WORKING[$step]['STEP_TRY']) or empty($WORKING[$step]['STEP_TRY'])) { $WORKING[$step]['STEP_TRY'] = 0; $WORKING['STEPDONE'] = 0; $WORKING['STEPTODO'] = 0; } //update running file update_working_file(true); //Run next step if (!in_array($step, $WORKING['STEPSDONE'])) { if (function_exists(strtolower($step))) { while ($WORKING[$step]['STEP_TRY'] < $STATIC['CFG']['jobstepretry']) { if (in_array($step, $WORKING['STEPSDONE'])) { break; } $WORKING[$step]['STEP_TRY']++; update_working_file(true); call_user_func(strtolower($step)); } if ($WORKING[$step]['STEP_TRY'] >= $STATIC['CFG']['jobstepretry']) { trigger_error(__('Step arborted has too many trys!', 'backwpup'), E_USER_ERROR); } } else { trigger_error(sprintf(__('Can not find job step function %s!', 'backwpup'), strtolower($step)), E_USER_ERROR); $WORKING['STEPSDONE'][] = $step; } } } //close mysql mysql_close($mysqlconlink);
function job_shutdown($signal = '') { global $WORKING, $STATIC; if (empty($STATIC['LOGFILE'])) { //nothing on empty return; } //Put last error to log if one $lasterror = error_get_last(); if (($lasterror['type'] == E_ERROR or $lasterror['type'] == E_PARSE or $lasterror['type'] == E_CORE_ERROR or $lasterror['type'] == E_COMPILE_ERROR or !empty($signal)) and is_writable($STATIC['LOGFILE'])) { if (!empty($signal)) { file_put_contents($STATIC['LOGFILE'], "<span class=\"timestamp\" title=\"[Line: " . __LINE__ . "|File: " . basename(__FILE__) . "|Mem: " . formatbytes(@memory_get_usage(true)) . "|Mem Max: " . formatbytes(@memory_get_peak_usage(true)) . "|Mem Limit: " . ini_get('memory_limit') . "|PID: " . getmypid() . "]\">" . date('Y/m/d H:i.s', time() + $STATIC['WP']['TIMEDIFF']) . ":</span> <span class=\"error\">[ERROR]" . sprintf(__('Signal %d send to script!', 'backwpup'), $signal) . "</span><br />\n", FILE_APPEND); } file_put_contents($STATIC['LOGFILE'], "<span class=\"timestamp\" title=\"[Line: " . $lasterror['line'] . "|File: " . basename($lasterror['file']) . "|Mem: " . formatbytes(@memory_get_usage(true)) . "|Mem Max: " . formatbytes(@memory_get_peak_usage(true)) . "|Mem Limit: " . ini_get('memory_limit') . "|PID: " . getmypid() . "]\">" . date('Y/m/d H:i.s', time() + $STATIC['WP']['TIMEDIFF']) . ":</span> <span class=\"error\">[ERROR]" . $lasterror['message'] . "</span><br />\n", FILE_APPEND); //write new log header $WORKING['ERROR']++; $fd = fopen($STATIC['LOGFILE'], 'r+'); while (!feof($fd)) { $line = fgets($fd); if (stripos($line, "<meta name=\"backwpup_errors\"") !== false) { fseek($fd, $filepos); fwrite($fd, str_pad("<meta name=\"backwpup_errors\" content=\"" . $WORKING['ERROR'] . "\" />", 100) . "\n"); break; } $filepos = ftell($fd); } fclose($fd); } //no more restarts $WORKING['RESTART']++; if ((!empty($STATIC['WP']['ALTERNATE_CRON']) or $WORKING['RESTART'] >= $STATIC['CFG']['jobscriptretry']) and is_file($STATIC['TEMPDIR'] . '.running') and is_writable($STATIC['LOGFILE'])) { //only x restarts allowed if (!empty($STATIC['WP']['ALTERNATE_CRON'])) { file_put_contents($STATIC['LOGFILE'], "<span class=\"timestamp\" title=\"[Line: " . __LINE__ . "|File: " . basename(__FILE__) . "\"|Mem: " . formatbytes(@memory_get_usage(true)) . "|Mem Max: " . formatbytes(@memory_get_peak_usage(true)) . "|Mem Limit: " . ini_get('memory_limit') . "|PID: " . getmypid() . "]>" . date('Y/m/d H:i.s', time() + $STATIC['WP']['TIMEDIFF']) . ":</span> <span class=\"error\">[ERROR]" . __('Can not restart on alternate cron....', 'backwpup') . "</span><br />\n", FILE_APPEND); } else { file_put_contents($STATIC['LOGFILE'], "<span class=\"timestamp\" title=\"[Line: " . __LINE__ . "|File: " . basename(__FILE__) . "\"|Mem: " . formatbytes(@memory_get_usage(true)) . "|Mem Max: " . formatbytes(@memory_get_peak_usage(true)) . "|Mem Limit: " . ini_get('memory_limit') . "|PID: " . getmypid() . "]>" . date('Y/m/d H:i.s', time() + $STATIC['WP']['TIMEDIFF']) . ":</span> <span class=\"error\">[ERROR]" . __('To many restarts....', 'backwpup') . "</span><br />\n", FILE_APPEND); } $WORKING['ERROR']++; $fd = fopen($STATIC['LOGFILE'], 'r+'); while (!feof($fd)) { $line = fgets($fd); if (stripos($line, "<meta name=\"backwpup_errors\"") !== false) { fseek($fd, $filepos); fwrite($fd, str_pad("<meta name=\"backwpup_errors\" content=\"" . $WORKING['ERROR'] . "\" />", 100) . "\n"); break; } $filepos = ftell($fd); } fclose($fd); job_end(); } //set PID to 0 $WORKING['PID'] = 0; //Excute jobrun again if (!is_file($STATIC['TEMPDIR'] . '.running')) { exit; } if (is_writable($STATIC['LOGFILE'])) { file_put_contents($STATIC['LOGFILE'], "<span class=\"timestamp\" title=\"[Line: " . __LINE__ . "|File: " . basename(__FILE__) . "|Mem: " . formatbytes(@memory_get_usage(true)) . "|Mem Max: " . formatbytes(@memory_get_peak_usage(true)) . "|Mem Limit: " . ini_get('memory_limit') . "|PID: " . getmypid() . "]\">" . date('Y/m/d H:i.s', time() + $STATIC['WP']['TIMEDIFF']) . ":</span> <span>" . $WORKING['RESTART'] . '. ' . __('Script stop! Will started again now!', 'backwpup') . "</span><br />\n", FILE_APPEND); } update_working_file(true); if (!empty($STATIC['JOBRUNURL'])) { if (function_exists('curl_exec')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $STATIC['JOBRUNURL']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, array('BackWPupJobTemp' => $STATIC['TEMPDIR'], 'nonce' => $WORKING['NONCE'], 'type' => 'restart')); curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'BackWPup'); if (!empty($STATIC['CFG']['httpauthuser']) and !empty($STATIC['CFG']['httpauthpassword'])) { curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD, $STATIC['CFG']['httpauthuser'] . ':' . base64_decode($STATIC['CFG']['httpauthpassword'])); } curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); curl_exec($ch); } else { //use fopen if no curl $urlParsed = parse_url($STATIC['JOBRUNURL']); if ($urlParsed['scheme'] == 'https') { $host = 'ssl://' . $urlParsed['host']; $port = !empty($urlParsed['port']) ? $urlParsed['port'] : 443; } else { $host = $urlParsed['host']; $port = !empty($urlParsed['port']) ? $urlParsed['port'] : 80; } $query = http_build_query(array('BackWPupJobTemp' => $STATIC['TEMPDIR'], 'nonce' => $WORKING['NONCE'], 'type' => 'restart')); $path = (isset($urlParsed['path']) ? $urlParsed['path'] : '/') . (isset($urlParsed['query']) ? '?' . $urlParsed['query'] : ''); $header = "POST " . $path . " HTTP/1.1\r\n"; $header .= "Host: " . $urlParsed['host'] . "\r\n"; $header .= "User-Agent: BackWPup\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($query) . "\r\n"; if (!empty($STATIC['CFG']['httpauthuser']) and !empty($STATIC['CFG']['httpauthpassword'])) { $header .= "Authorization: Basic " . base64_encode($STATIC['CFG']['httpauthuser'] . ':' . base64_decode($STATIC['CFG']['httpauthpassword'])) . "\r\n"; } $header .= "Connection: Close\r\n\r\n"; $header .= $query; $fp = fsockopen($host, $port, $errno, $errstr, 3); fwrite($fp, $header); fclose($fp); } } exit; }
function _pclzipPostAddCallBack($p_event, &$p_header) { global $WORKING, $STATIC; if ($p_header['status'] != 'ok') { trigger_error(sprintf(__('PCL ZIP Error "%1$s" on file %2$s!', 'backwpup'), $p_header['status'], $p_header['filename']), E_USER_ERROR); } $WORKING['STEPDONE']++; update_working_file(); }
function wp_export() { global $WORKING, $STATIC; $WORKING['STEPTODO'] = 1; trigger_error(sprintf(__('%d. try for wordpress export to XML file...', 'backwpup'), $WORKING['WP_EXPORT']['STEP_TRY']), E_USER_NOTICE); need_free_memory(10485760); //10MB free memory if (function_exists('curl_exec')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, substr($STATIC['JOBRUNURL'], 0, -11) . 'wp_export_generate.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, array('nonce' => $WORKING['NONCE'], 'type' => 'getxmlexport')); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'BackWPup'); if (defined('CURLOPT_PROGRESSFUNCTION')) { curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'curl_progresscallback'); curl_setopt($ch, CURLOPT_BUFFERSIZE, 1048576); } if (!empty($STATIC['CFG']['httpauthuser']) and !empty($STATIC['CFG']['httpauthpassword'])) { curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD, $STATIC['CFG']['httpauthuser'] . ':' . backwpup_base64($STATIC['CFG']['httpauthpassword'])); } curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); $return = curl_exec($ch); $status = curl_getinfo($ch); if ($status['http_code'] >= 300 or $status['http_code'] < 200 or curl_errno($ch) > 0) { if (0 != curl_errno($ch)) { trigger_error(__('cURL:', 'backwpup') . ' (' . curl_errno($ch) . ') ' . curl_error($ch), E_USER_ERROR); } else { trigger_error(__('cURL:', 'backwpup') . ' (' . $status['http_code'] . ') Invalid response.', E_USER_ERROR); } } else { file_put_contents($STATIC['TEMPDIR'] . preg_replace('/[^a-z0-9_\\-]/', '', strtolower($STATIC['WP']['BLOGNAME'])) . '.wordpress.' . date('Y-m-d') . '.xml', $return); } curl_close($ch); } else { //use fopen if no curl $urlParsed = parse_url(substr($STATIC['JOBRUNURL'], 0, -11) . 'wp_export_generate.php'); if ($urlParsed['scheme'] == 'https') { $host = 'ssl://' . $urlParsed['host']; $port = !empty($urlParsed['port']) ? $urlParsed['port'] : 443; } else { $host = $urlParsed['host']; $port = !empty($urlParsed['port']) ? $urlParsed['port'] : 80; } $query = http_build_query(array('nonce' => $WORKING['NONCE'], 'type' => 'getxmlexport')); $path = (isset($urlParsed['path']) ? $urlParsed['path'] : '/') . (isset($urlParsed['query']) ? '?' . $urlParsed['query'] : ''); $header = "POST " . $path . " HTTP/1.1\r\n"; $header .= "Host: " . $urlParsed['host'] . "\r\n"; $header .= "User-Agent: BackWPup\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($query) . "\r\n"; if (!empty($STATIC['CFG']['httpauthuser']) and !empty($STATIC['CFG']['httpauthpassword'])) { $header .= "Authorization: Basic " . base64_encode($STATIC['CFG']['httpauthuser'] . ':' . backwpup_base64($STATIC['CFG']['httpauthpassword'])) . "\r\n"; } $header .= "Connection: Close\r\n\r\n"; $header .= $query; $fp = fsockopen($host, $port, $errno, $errstr, 300); fwrite($fp, $header); $responseHeader = ''; do { $responseHeader .= fread($fp, 1); } while (!preg_match('/\\r\\n\\r\\n$/', $responseHeader)); while (!feof($fp)) { update_working_file(); file_put_contents($STATIC['TEMPDIR'] . preg_replace('/[^a-z0-9_\\-]/', '', strtolower($STATIC['WP']['BLOGNAME'])) . '.wordpress.' . date('Y-m-d') . '.xml', fgets($fp, 256), FILE_APPEND); } fclose($fp); } //add XML file to backupfiles if (is_readable($STATIC['TEMPDIR'] . preg_replace('/[^a-z0-9_\\-]/', '', strtolower($STATIC['WP']['BLOGNAME'])) . '.wordpress.' . date('Y-m-d') . '.xml')) { $filestat = stat($STATIC['TEMPDIR'] . preg_replace('/[^a-z0-9_\\-]/', '', strtolower($STATIC['WP']['BLOGNAME'])) . '.wordpress.' . date('Y-m-d') . '.xml'); trigger_error(sprintf(__('Add XML export "%1$s" to backup list with %2$s', 'backwpup'), preg_replace('/[^a-z0-9_\\-]/', '', strtolower($STATIC['WP']['BLOGNAME'])) . '.wordpress.' . date('Y-m-d') . '.xml', formatbytes($filestat['size'])), E_USER_NOTICE); $WORKING['ALLFILESIZE'] += $filestat['size']; add_file(array(array('FILE' => $STATIC['TEMPDIR'] . preg_replace('/[^a-z0-9_\\-]/', '', strtolower($STATIC['WP']['BLOGNAME'])) . '.wordpress.' . date('Y-m-d') . '.xml', 'OUTFILE' => preg_replace('/[^a-z0-9_\\-]/', '', strtolower($STATIC['WP']['BLOGNAME'])) . '.wordpress.' . date('Y-m-d') . '.xml', 'SIZE' => $filestat['size'], 'ATIME' => $filestat['atime'], 'MTIME' => $filestat['mtime'], 'CTIME' => $filestat['ctime'], 'UID' => $filestat['uid'], 'GID' => $filestat['gid'], 'MODE' => $filestat['mode']))); } $WORKING['STEPDONE'] = 1; $WORKING['STEPSDONE'][] = 'WP_EXPORT'; //set done }
function _file_list($folder = '', $levels = 100, $excludedirs = array()) { global $WORKING, $tempfilelist; if (empty($folder)) { return false; } if (!$levels) { return false; } if ($levels == 100 or $levels == 95) { update_working_file(); } $folder = rtrim($folder, '/') . '/'; if ($dir = @opendir($folder)) { while (($file = readdir($dir)) !== false) { if (in_array($file, array('.', '..', '.svn'))) { continue; } foreach ($WORKING['FILEEXCLUDES'] as $exclusion) { //exclude dirs and files $exclusion = trim($exclusion); if (false !== stripos($folder . $file, $exclusion) and !empty($exclusion) and $exclusion != '/') { continue 2; } } if (in_array(rtrim($folder . $file, '/') . '/', $excludedirs) and is_dir($folder . $file)) { continue; } if (!is_readable($folder . $file)) { trigger_error(sprintf(__('File or folder "%s" is not readable!', 'backwpup'), $folder . $file), E_USER_WARNING); } elseif (is_link($folder . $file)) { trigger_error(sprintf(__('Link "%s" not followed', 'backwpup'), $folder . $file), E_USER_WARNING); } elseif (is_dir($folder . $file)) { _file_list(rtrim($folder . $file, '/'), $levels - 1, $excludedirs); } elseif (is_file($folder . $file) or is_executable($folder . $file)) { //add file to filelist $tempfilelist[] = $folder . $file; } else { trigger_error(sprintf(__('"%s" is not a file or directory', 'backwpup'), $folder . $file), E_USER_WARNING); } } @closedir($dir); } }
function dest_ftp() { global $WORKING, $STATIC; if (empty($STATIC['JOB']['ftphost']) or empty($STATIC['JOB']['ftpuser']) or empty($STATIC['JOB']['ftppass'])) { $WORKING['STEPSDONE'][] = 'DEST_FTP'; //set done return; } $WORKING['STEPTODO'] = filesize($STATIC['JOB']['backupdir'] . $STATIC['backupfile']); trigger_error(sprintf(__('%d. try to sending backup file to a FTP Server...', 'backwpup'), $WORKING['DEST_FTP']['STEP_TRY']), E_USER_NOTICE); if ($STATIC['JOB']['ftpssl']) { //make SSL FTP connection if (function_exists('ftp_ssl_connect')) { $ftp_conn_id = ftp_ssl_connect($STATIC['JOB']['ftphost'], $STATIC['JOB']['ftphostport'], 10); if ($ftp_conn_id) { trigger_error(sprintf(__('Connected by SSL-FTP to Server: %s', 'backwpup'), $STATIC['JOB']['ftphost'] . ':' . $STATIC['JOB']['ftphostport']), E_USER_NOTICE); } else { trigger_error(sprintf(__('Can not connect by SSL-FTP to Server: %s', 'backwpup'), $STATIC['JOB']['ftphost'] . ':' . $STATIC['JOB']['ftphostport']), E_USER_ERROR); return false; } } else { trigger_error(__('PHP function to connect with SSL-FTP to server not exists!', 'backwpup'), E_USER_ERROR); return false; } } else { //make normal FTP connection if SSL not work $ftp_conn_id = ftp_connect($STATIC['JOB']['ftphost'], $STATIC['JOB']['ftphostport'], 10); if ($ftp_conn_id) { trigger_error(sprintf(__('Connected to FTP server: %s', 'backwpup'), $STATIC['JOB']['ftphost'] . ':' . $STATIC['JOB']['ftphostport']), E_USER_NOTICE); } else { trigger_error(sprintf(__('Can not connect to FTP server: %s', 'backwpup'), $STATIC['JOB']['ftphost'] . ':' . $STATIC['JOB']['ftphostport']), E_USER_ERROR); return false; } } //FTP Login $loginok = false; trigger_error(sprintf(__('FTP Client command: %s', 'backwpup'), ' USER ' . $STATIC['JOB']['ftpuser']), E_USER_NOTICE); if ($loginok = ftp_login($ftp_conn_id, $STATIC['JOB']['ftpuser'], backwpup_base64($STATIC['JOB']['ftppass']))) { trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), ' User ' . $STATIC['JOB']['ftpuser'] . ' logged in.'), E_USER_NOTICE); } else { //if PHP ftp login don't work use raw login $return = ftp_raw($ftp_conn_id, 'USER ' . $STATIC['JOB']['ftpuser']); trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), $return[0]), E_USER_NOTICE); if (substr(trim($return[0]), 0, 3) <= 400) { trigger_error(sprintf(__('FTP Client command: %s', 'backwpup'), ' PASS *******'), E_USER_NOTICE); $return = ftp_raw($ftp_conn_id, 'PASS ' . backwpup_base64($STATIC['JOB']['ftppass'])); trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), $return[0]), E_USER_NOTICE); if (substr(trim($return[0]), 0, 3) <= 400) { $loginok = true; } } } if (!$loginok) { return false; } //SYSTYPE trigger_error(sprintf(__('FTP Client command: %s', 'backwpup'), ' SYST'), E_USER_NOTICE); $systype = ftp_systype($ftp_conn_id); if ($systype) { trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), $systype), E_USER_NOTICE); } else { trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), __('Error getting SYSTYPE', 'backwpup')), E_USER_ERROR); } //test ftp dir and create it f not exists if ($STATIC['JOB']['ftpdir'] != '/' && $STATIC['JOB']['ftpdir'] != '') { $ftpdirs = explode("/", trim($STATIC['JOB']['ftpdir'], '/')); foreach ($ftpdirs as $ftpdir) { if (empty($ftpdir)) { continue; } if (!@ftp_chdir($ftp_conn_id, $ftpdir)) { if (@ftp_mkdir($ftp_conn_id, $ftpdir)) { trigger_error(sprintf(__('FTP folder "%s" created!', 'backwpup'), $ftpdir), E_USER_NOTICE); ftp_chdir($ftp_conn_id, $ftpdir); } else { trigger_error(sprintf(__('FTP folder "%s" can not created!', 'backwpup'), $ftpdir), E_USER_ERROR); return false; } } } } // Get the current working directory $currentftpdir = rtrim(ftp_pwd($ftp_conn_id), '/') . '/'; trigger_error(sprintf(__('FTP current folder is: %s', 'backwpup'), $currentftpdir), E_USER_NOTICE); //delete file on ftp if new try if ($WORKING['STEPDONE'] == 0) { @ftp_delete($ftp_conn_id, $currentftpdir . $STATIC['backupfile']); } //PASV trigger_error(sprintf(__('FTP Client command: %s', 'backwpup'), ' PASV'), E_USER_NOTICE); if ($STATIC['JOB']['ftppasv']) { if (ftp_pasv($ftp_conn_id, true)) { trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), __('Entering Passive Mode', 'backwpup')), E_USER_NOTICE); } else { trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), __('Can not Entering Passive Mode', 'backwpup')), E_USER_WARNING); } } else { if (ftp_pasv($ftp_conn_id, false)) { trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), __('Entering Normal Mode', 'backwpup')), E_USER_NOTICE); } else { trigger_error(sprintf(__('FTP Server reply: %s', 'backwpup'), __('Can not Entering Normal Mode', 'backwpup')), E_USER_WARNING); } } if ($WORKING['STEPDONE'] < $WORKING['STEPTODO']) { trigger_error(__('Upload to FTP now started ... ', 'backwpup'), E_USER_NOTICE); $fp = fopen($STATIC['JOB']['backupdir'] . $STATIC['backupfile'], 'r'); $ret = ftp_nb_fput($ftp_conn_id, $currentftpdir . $STATIC['backupfile'], $fp, FTP_BINARY, $WORKING['STEPDONE']); while ($ret == FTP_MOREDATA) { $WORKING['STEPDONE'] = ftell($fp); update_working_file(); $ret = ftp_nb_continue($ftp_conn_id); } if ($ret != FTP_FINISHED) { trigger_error(__('Can not transfer backup to FTP server!', 'backwpup'), E_USER_ERROR); return false; } else { $WORKING['STEPDONE'] = filesize($STATIC['JOB']['backupdir'] . $STATIC['backupfile']); trigger_error(sprintf(__('Backup transferred to FTP server: %s', 'backwpup'), $currentftpdir . $STATIC['backupfile']), E_USER_NOTICE); $STATIC['JOB']['lastbackupdownloadurl'] = "ftp://" . $STATIC['JOB']['ftpuser'] . ":" . backwpup_base64($STATIC['JOB']['ftppass']) . "@" . $STATIC['JOB']['ftphost'] . ':' . $STATIC['JOB']['ftphostport'] . $currentftpdir . $STATIC['backupfile']; $WORKING['STEPSDONE'][] = 'DEST_FTP'; //set done } fclose($fp); } if ($STATIC['JOB']['ftpmaxbackups'] > 0) { //Delete old backups $backupfilelist = array(); if ($filelist = ftp_nlist($ftp_conn_id, $currentftpdir)) { foreach ($filelist as $files) { if ($STATIC['JOB']['fileprefix'] == substr(basename($files), 0, strlen($STATIC['JOB']['fileprefix'])) and $STATIC['JOB']['fileformart'] == substr(basename($files), -strlen($STATIC['JOB']['fileformart']))) { $backupfilelist[] = basename($files); } } if (sizeof($backupfilelist) > 0) { rsort($backupfilelist); $numdeltefiles = 0; for ($i = $STATIC['JOB']['ftpmaxbackups']; $i < sizeof($backupfilelist); $i++) { if (ftp_delete($ftp_conn_id, $currentftpdir . $backupfilelist[$i])) { //delte files on ftp $numdeltefiles++; } else { trigger_error(sprintf(__('Can not delete "%s" on FTP server!', 'backwpup'), $currentftpdir . $backupfilelist[$i]), E_USER_ERROR); } } if ($numdeltefiles > 0) { trigger_error(sprintf(_n('One file deleted on FTP Server', '%d files deleted on FTP Server', $numdeltefiles, 'backwpup'), $numdeltefiles), E_USER_NOTICE); } } } } ftp_close($ftp_conn_id); $WORKING['STEPDONE']++; }