コード例 #1
0
    }
    //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);
コード例 #2
0
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;
}
コード例 #3
0
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();
}
コード例 #4
0
ファイル: wp_export.php プロジェクト: hscale/webento
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
}
コード例 #5
0
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);
    }
}
コード例 #6
0
ファイル: dest_ftp.php プロジェクト: hscale/webento
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']++;
}