ssl = false; $ftp->use_server_certs = $use_server_certs; $ftp->disable_verify = $disable_verify; if ($passive) $ftp->passive = true; return $ftp; } public function backup($backup_array) { global $updraftplus, $updraftplus_backup; $server = $updraftplus->get_job_option('updraft_server_address'); $user = $updraftplus->get_job_option('updraft_ftp_login'); $ftp = $this->getFTP( $server, $user, $updraftplus->get_job_option('updraft_ftp_pass'), $updraftplus->get_job_option('updraft_ssl_nossl'), $updraftplus->get_job_option('updraft_ssl_disableverify'), $updraftplus->get_job_option('updraft_ssl_useservercerts') ); if (!$ftp->connect()) { $updraftplus->log("FTP Failure: we did not successfully log in with those credentials."); $updraftplus->log(sprintf(__("%s login failure",'updraftplus'), 'FTP'), 'error'); return false; } //$ftp->make_dir(); we may need to recursively create dirs? TODO $updraft_dir = $updraftplus->backups_dir_location().'/'; $ftp_remote_path = trailingslashit($updraftplus->get_job_option('updraft_ftp_remote_path')); foreach($backup_array as $file) { $fullpath = $updraft_dir.$file; $updraftplus->log("FTP upload attempt: $file -> ftp://$user@$server/${ftp_remote_path}${file}"); $timer_start = microtime(true); $size_k = round(filesize($fullpath)/1024,1); # Note :Setting $resume to true unnecessarily is not meant to be a problem. Only ever (Feb 2014) seen one weird FTP server where calling SIZE on a non-existent file did create a problem. So, this code just helps that case. (the check for non-empty upload_status[p] is being cautious. $upload_status = $updraftplus->jobdata_get('uploading_substatus'); if (0 == $updraftplus->current_resumption|| (is_array($upload_status) && !empty($upload_status['p']) && $upload_status['p'] == 0)) { $resume = false; } else { $resume = true; } if ($ftp->put($fullpath, $ftp_remote_path.$file, FTP_BINARY, $resume, $updraftplus)) { $updraftplus->log("FTP upload attempt successful (".$size_k."Kb in ".(round(microtime(true)-$timer_start,2)).'s)'); $updraftplus->uploaded_file($file); } else { $updraftplus->log("ERROR: FTP upload failed" ); $updraftplus->log(sprintf(__("%s upload failed",'updraftplus'), 'FTP'), 'error'); } } return array('ftp_object' => $ftp, 'ftp_remote_path' => $ftp_remote_path); } public function delete($files, $ftparr = array()) { global $updraftplus; if (is_string($files)) $files=array($files); if (isset($ftparr['ftp_object'])) { $ftp = $ftparr['ftp_object']; } else { $server = $updraftplus->get_job_option('updraft_server_address'); $user = $updraftplus->get_job_option('updraft_ftp_login'); $ftp = $this->getFTP( $server, $user, $updraftplus->get_job_option('updraft_ftp_pass'), $updraftplus->get_job_option('updraft_ssl_nossl'), $updraftplus->get_job_option('updraft_ssl_disableverify'), $updraftplus->get_job_option('updraft_ssl_useservercerts') ); if (!$ftp->connect()) { $updraftplus->log("FTP Failure: we did not successfully log in with those credentials."); return false; } } $ftp_remote_path = isset($ftparr['ftp_remote_path']) ? $ftparr['ftp_remote_path'] : trailingslashit($updraftplus->get_job_option('updraft_ftp_remote_path')); $ret = true; foreach ($files as $file) { if (@$ftp->delete($ftp_remote_path.$file)) { $updraftplus->log("FTP delete: succeeded (${ftp_remote_path}${file})"); } else { $updraftplus->log("FTP delete: failed (${ftp_remote_path}${file})"); $ret = false; } } return $ret; } public function download($file) { if( !class_exists('UpdraftPlus_ftp_wrapper')) require_once(UPDRAFTPLUS_DIR.'/includes/ftp.class.php'); global $updraftplus; $ftp = $this->getFTP( $updraftplus->get_job_option('updraft_server_address'), $updraftplus->get_job_option('updraft_ftp_login'), $updraftplus->get_job_option('updraft_ftp_pass'), $updraftplus->get_job_option('updraft_ssl_nossl'), $updraftplus->get_job_option('updraft_ssl_disableverify'), $updraftplus->get_job_option('updraft_ssl_useservercerts') ); if (!$ftp->connect()) { $updraftplus->log("FTP Failure: we did not successfully log in with those credentials."); $updraftplus->log(sprintf(__("%s login failure",'updraftplus'), 'FTP'), 'error'); return false; } //$ftp->make_dir(); we may need to recursively create dirs? TODO $ftp_remote_path = trailingslashit($updraftplus->get_job_option('updraft_ftp_remote_path')); $fullpath = $updraftplus->backups_dir_location().'/'.$file; $resume = false; if (file_exists($fullpath)) { $resume = true; $updraftplus->log("File already exists locally; will resume: size: ".filesize($fullpath)); } return $ftp->get($fullpath, $ftp_remote_path.$file, FTP_BINARY, $resume, $updraftplus); } public function config_print_javascript_onready() { ?> jQuery('#updraft-ftp-test').click(function(){ jQuery('#updraft-ftp-test').html(''); var data = { action: 'updraft_ajax', subaction: 'credentials_test', method: 'ftp', nonce: '', server: jQuery('#updraft_server_address').val(), login: jQuery('#updraft_ftp_login').val(), pass: jQuery('#updraft_ftp_pass').val(), path: jQuery('#updraft_ftp_remote_path').val(), disableverify: (jQuery('#updraft_ssl_disableverify').is(':checked')) ? 1 : 0, useservercerts: (jQuery('#updraft_ssl_useservercerts').is(':checked')) ? 1 : 0, nossl: (jQuery('#updraft_ssl_nossl').is(':checked')) ? 1 : 0, }; jQuery.post(ajaxurl, data, function(response) { jQuery('#updraft-ftp-test').html(''); alert(' ' + response); }); }); ftp_possible(); if (is_array($possible)) { ?>