本文整理汇总了PHP中BackWPup_Job::update_working_data方法的典型用法代码示例。如果您正苦于以下问题:PHP BackWPup_Job::update_working_data方法的具体用法?PHP BackWPup_Job::update_working_data怎么用?PHP BackWPup_Job::update_working_data使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BackWPup_Job
的用法示例。
在下文中一共展示了BackWPup_Job::update_working_data方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: job_run
/**
* @param $job_object
* @return bool
*/
public function job_run(BackWPup_Job $job_object)
{
global $wpdb, $post, $wp_query;
$wxr_version = '1.2';
if ($job_object->steps_data[$job_object->step_working]['SAVE_STEP_TRY'] != $job_object->steps_data[$job_object->step_working]['STEP_TRY']) {
$job_object->log(sprintf(__('%d. Trying to create a WordPress export to XML file …', 'backwpup'), $job_object->steps_data[$job_object->step_working]['STEP_TRY']));
$job_object->steps_data[$job_object->step_working]['wpexportfile'] = BackWPup::get_plugin_data('TEMP') . $job_object->generate_filename($job_object->job['wpexportfile'], 'xml', TRUE);
$job_object->steps_data[$job_object->step_working]['substep'] = 'header';
$job_object->steps_data[$job_object->step_working]['post_ids'] = array();
$job_object->substeps_todo = 10;
$job_object->substeps_done = 0;
}
add_filter('wxr_export_skip_postmeta', array($this, 'wxr_filter_postmeta'), 10, 2);
if ($job_object->steps_data[$job_object->step_working]['substep'] == 'header') {
if ('all' != $job_object->job['wpexportcontent'] && post_type_exists($job_object->job['wpexportcontent'])) {
$ptype = get_post_type_object($job_object->job['wpexportcontent']);
if (!$ptype->can_export) {
$job_object->log(sprintf(__('WP Export: Post type “%s” does not allow export.', 'backwpup'), $job_object->job['wpexportcontent']), E_USER_ERROR);
return FALSE;
}
$where = $wpdb->prepare("{$wpdb->posts}.post_type = %s", $job_object->job['wpexportcontent']);
} else {
$post_types = get_post_types(array('can_export' => true));
$esses = array_fill(0, count($post_types), '%s');
$where = $wpdb->prepare("{$wpdb->posts}.post_type IN (" . implode(',', $esses) . ')', $post_types);
$job_object->job['wpexportcontent'] = 'all';
}
$where .= " AND {$wpdb->posts}.post_status != 'auto-draft'";
// grab a snapshot of post IDs, just in case it changes during the export
$job_object->steps_data[$job_object->step_working]['post_ids'] = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE {$where}");
$job_object->substeps_todo = $job_object->substeps_todo + count($job_object->steps_data[$job_object->step_working]['post_ids']);
$header = '<?xml version="1.0" encoding="' . get_bloginfo('charset') . "\" ?>\n";
$header .= "<!-- This is a WordPress eXtended RSS file generated by the WordPress plugin BackWPup as an export of your site. -->\n";
$header .= "<!-- It contains information about your site's posts, pages, comments, categories, and other content. -->\n";
$header .= "<!-- You may use this file to transfer that content from one site to another. -->\n";
$header .= "<!-- This file is not intended to serve as a complete backup of your site. -->\n\n";
$header .= "<!-- To import this information into a WordPress site follow these steps: -->\n";
$header .= "<!-- 1. Log in to that site as an administrator. -->\n";
$header .= "<!-- 2. Go to Tools: Import in the WordPress admin panel. -->\n";
$header .= "<!-- 3. Install the \"WordPress\" importer from the list. -->\n";
$header .= "<!-- 4. Activate & Run Importer. -->\n";
$header .= "<!-- 5. Upload this file using the form provided on that page. -->\n";
$header .= "<!-- 6. You will first be asked to map the authors in this export file to users -->\n";
$header .= "<!-- on the site. For each author, you may choose to map to an -->\n";
$header .= "<!-- existing user on the site or to create a new user. -->\n";
$header .= "<!-- 7. WordPress will then import each of the posts, pages, comments, categories, etc. -->\n";
$header .= "<!-- contained in this file into your site. -->\n\n";
$header .= "<!-- generator=\"WordPress/" . get_bloginfo_rss('version') . "\" created=\"" . date('Y-m-d H:i') . "\" -->\n";
$header .= "<rss version=\"2.0\" xmlns:excerpt=\"http://wordpress.org/export/{$wxr_version}/excerpt/\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:wfw=\"http://wellformedweb.org/CommentAPI/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:wp=\"http://wordpress.org/export/{$wxr_version}/\">\n";
$header .= "<channel>\n";
$header .= "\t<title>" . get_bloginfo_rss('name') . "</title>\n";
$header .= "\t<link>" . get_bloginfo_rss('url') . "</link>\n";
$header .= "\t<description>" . get_bloginfo_rss('description') . "</description>\n";
$header .= "\t<pubDate>" . date('D, d M Y H:i:s +0000') . "</pubDate>\n";
$header .= "\t<language>" . get_bloginfo_rss('language') . "</language>\n";
$header .= "\t<wp:wxr_version>" . $wxr_version . "</wp:wxr_version>\n";
$header .= "\t<wp:base_site_url>" . $this->wxr_site_url() . "</wp:base_site_url>\n";
$header .= "\t<wp:base_blog_url>" . get_bloginfo_rss('url') . "</wp:base_blog_url>\n";
$written = file_put_contents($job_object->steps_data[$job_object->step_working]['wpexportfile'], $header, FILE_APPEND);
if ($written === FALSE) {
$job_object->log(__('WP Export file could not written.', 'backwpup'), E_USER_ERROR);
return FALSE;
}
unset($header);
$job_object->steps_data[$job_object->step_working]['substep'] = 'authors';
$job_object->substeps_done++;
$job_object->update_working_data();
$job_object->do_restart_time();
}
if ($job_object->steps_data[$job_object->step_working]['substep'] == 'authors') {
$written = file_put_contents($job_object->steps_data[$job_object->step_working]['wpexportfile'], $this->wxr_authors_list(), FILE_APPEND);
if ($written === FALSE) {
$job_object->log(__('WP Export file could not written.', 'backwpup'), E_USER_ERROR);
return FALSE;
}
$job_object->steps_data[$job_object->step_working]['substep'] = 'cats';
$job_object->substeps_done++;
$job_object->update_working_data();
$job_object->do_restart_time();
}
if ($job_object->steps_data[$job_object->step_working]['substep'] == 'cats') {
if ('all' == $job_object->job['wpexportcontent']) {
$cats = array();
$categories = (array) get_categories(array('get' => 'all'));
// put categories in order with no child going before its parent
while ($cat = array_shift($categories)) {
if ($cat->parent == 0 || isset($cats[$cat->parent])) {
$cats[$cat->term_id] = $cat;
} else {
$categories[] = $cat;
}
}
$cats_xml = '';
foreach ($cats as $c) {
$parent_slug = $c->parent ? $cats[$c->parent]->slug : '';
$cats_xml .= "\t<wp:category><wp:term_id>" . $c->term_id . "</wp:term_id><wp:category_nicename>" . $c->slug . "</wp:category_nicename><wp:category_parent>" . $parent_slug . "</wp:category_parent>" . $this->wxr_cat_name($c) . $this->wxr_category_description($c) . "</wp:category>\n";
//.........这里部分代码省略.........
示例2: job_run_archive
//.........这里部分代码省略.........
$current_ftp_dir = trailingslashit(ftp_pwd($ftp_conn_id));
if ($job_object->substeps_done == 0) {
$job_object->log(sprintf(__('FTP current folder is: %s', 'backwpup'), $current_ftp_dir), E_USER_NOTICE);
}
//get file size to resume upload
@clearstatcache();
$job_object->substeps_done = @ftp_size($ftp_conn_id, $job_object->job['ftpdir'] . $job_object->backup_file);
if ($job_object->substeps_done == -1) {
$job_object->substeps_done = 0;
}
//PASV
$job_object->log(sprintf(__('FTP client command: %s', 'backwpup'), 'PASV'), E_USER_NOTICE);
if ($job_object->job['ftppasv']) {
if (ftp_pasv($ftp_conn_id, TRUE)) {
$job_object->log(sprintf(__('FTP server reply: %s', 'backwpup'), __('Entering passive mode', 'backwpup')), E_USER_NOTICE);
} else {
$job_object->log(sprintf(__('FTP server reply: %s', 'backwpup'), __('Cannot enter passive mode', 'backwpup')), E_USER_WARNING);
}
} else {
if (ftp_pasv($ftp_conn_id, FALSE)) {
$job_object->log(sprintf(__('FTP server reply: %s', 'backwpup'), __('Entering normal mode', 'backwpup')), E_USER_NOTICE);
} else {
$job_object->log(sprintf(__('FTP server reply: %s', 'backwpup'), __('Cannot enter normal mode', 'backwpup')), E_USER_WARNING);
}
}
if ($job_object->substeps_done < $job_object->backup_filesize) {
$job_object->log(__('Starting upload to FTP  …', 'backwpup'), E_USER_NOTICE);
if ($fp = fopen($job_object->backup_folder . $job_object->backup_file, 'rb')) {
//go to actual file pos
fseek($fp, $job_object->substeps_done);
$ret = ftp_nb_fput($ftp_conn_id, $current_ftp_dir . $job_object->backup_file, $fp, FTP_BINARY, $job_object->substeps_done);
while ($ret == FTP_MOREDATA) {
$job_object->substeps_done = ftell($fp);
$job_object->update_working_data();
$job_object->do_restart_time();
$ret = ftp_nb_continue($ftp_conn_id);
}
if ($ret != FTP_FINISHED) {
$job_object->log(__('Cannot transfer backup to FTP server!', 'backwpup'), E_USER_ERROR);
return FALSE;
} else {
$job_object->substeps_done = $job_object->backup_filesize + 1;
$job_object->log(sprintf(__('Backup transferred to FTP server: %s', 'backwpup'), $current_ftp_dir . $job_object->backup_file), E_USER_NOTICE);
if (!empty($job_object->job['jobid'])) {
BackWPup_Option::update($job_object->job['jobid'], 'lastbackupdownloadurl', "ftp://" . $job_object->job['ftpuser'] . ":" . BackWPup_Encryption::decrypt($job_object->job['ftppass']) . "@" . $job_object->job['ftphost'] . ':' . $job_object->job['ftphostport'] . $current_ftp_dir . $job_object->backup_file);
}
}
fclose($fp);
} else {
$job_object->log(__('Can not open source file for transfer.', 'backwpup'), E_USER_ERROR);
return FALSE;
}
}
$backupfilelist = array();
$filecounter = 0;
$files = array();
if ($filelist = ftp_nlist($ftp_conn_id, '.')) {
foreach ($filelist as $file) {
if (basename($file) != '.' && basename($file) != '..') {
if ($job_object->is_backup_archive($file)) {
$time = ftp_mdtm($ftp_conn_id, $file);
if ($time != -1) {
$backupfilelist[$time] = basename($file);
} else {
$backupfilelist[] = basename($file);
}
示例3: job_run_archive
/**
* @param $job_object BAckWPup_Job
* @return bool
*/
public function job_run_archive(BackWPup_Job $job_object)
{
$job_object->substeps_todo = 2 + $job_object->backup_filesize;
if ($job_object->steps_data[$job_object->step_working]['SAVE_STEP_TRY'] != $job_object->steps_data[$job_object->step_working]['STEP_TRY']) {
$job_object->log(sprintf(__('%d. Trying to send backup file to S3 Service …', 'backwpup'), $job_object->steps_data[$job_object->step_working]['STEP_TRY']), E_USER_NOTICE);
}
try {
$s3 = Aws\S3\S3Client::factory(array('key' => $job_object->job['s3accesskey'], 'secret' => BackWPup_Encryption::decrypt($job_object->job['s3secretkey']), 'region' => $job_object->job['s3region'], 'base_url' => $this->get_s3_base_url($job_object->job['s3region'], $job_object->job['s3base_url']), 'scheme' => 'https', 'ssl.certificate_authority' => BackWPup::get_plugin_data('cacert')));
if ($job_object->steps_data[$job_object->step_working]['SAVE_STEP_TRY'] != $job_object->steps_data[$job_object->step_working]['STEP_TRY'] && $job_object->substeps_done < $job_object->backup_filesize) {
if ($s3->doesBucketExist($job_object->job['s3bucket'])) {
$bucketregion = $s3->getBucketLocation(array('Bucket' => $job_object->job['s3bucket']));
$job_object->log(sprintf(__('Connected to S3 Bucket "%1$s" in %2$s', 'backwpup'), $job_object->job['s3bucket'], $bucketregion->get('Location')), E_USER_NOTICE);
} else {
$job_object->log(sprintf(__('S3 Bucket "%s" does not exist!', 'backwpup'), $job_object->job['s3bucket']), E_USER_ERROR);
return TRUE;
}
if ($job_object->job['s3multipart'] && empty($job_object->steps_data[$job_object->step_working]['UploadId'])) {
//Check for aboded Multipart Uploads
$job_object->log(__('Checking for not aborted multipart Uploads …', 'backwpup'));
$multipart_uploads = $s3->listMultipartUploads(array('Bucket' => $job_object->job['s3bucket'], 'Prefix' => (string) $job_object->job['s3dir']));
$uploads = $multipart_uploads->get('Uploads');
if (!empty($uploads)) {
foreach ($uploads as $upload) {
$s3->abortMultipartUpload(array('Bucket' => $job_object->job['s3bucket'], 'Key' => $upload['Key'], 'UploadId' => $upload['UploadId']));
$job_object->log(sprintf(__('Upload for %s aborted.', 'backwpup'), $upload['Key']));
}
}
}
//transfer file to S3
$job_object->log(__('Starting upload to S3 Service …', 'backwpup'));
}
if (!$job_object->job['s3multipart'] || $job_object->backup_filesize < 1048576 * 6) {
//Prepare Upload
if (!($up_file_handle = fopen($job_object->backup_folder . $job_object->backup_file, 'rb'))) {
$job_object->log(__('Can not open source file for transfer.', 'backwpup'), E_USER_ERROR);
return FALSE;
}
$create_args = array();
$create_args['Bucket'] = $job_object->job['s3bucket'];
$create_args['ACL'] = 'private';
//encrxption
if (!empty($job_object->job['s3ssencrypt'])) {
$create_args['ServerSideEncryption'] = $job_object->job['s3ssencrypt'];
}
//Storage Class
if (!empty($job_object->job['s3storageclass'])) {
$create_args['StorageClass'] = $job_object->job['s3storageclass'];
}
$create_args['Metadata'] = array('BackupTime' => date('Y-m-d H:i:s', $job_object->start_time));
$create_args['Body'] = $up_file_handle;
$create_args['Key'] = $job_object->job['s3dir'] . $job_object->backup_file;
$create_args['ContentType'] = $job_object->get_mime_type($job_object->backup_folder . $job_object->backup_file);
try {
$s3->putObject($create_args);
} catch (Aws\Common\Exception\MultipartUploadException $e) {
$job_object->log(E_USER_ERROR, sprintf(__('S3 Service API: %s', 'backwpup'), $e->getMessage()), $e->getFile(), $e->getLine());
return FALSE;
}
} else {
//Prepare Upload
if ($file_handle = fopen($job_object->backup_folder . $job_object->backup_file, 'rb')) {
fseek($file_handle, $job_object->substeps_done);
try {
if (empty($job_object->steps_data[$job_object->step_working]['UploadId'])) {
$args = array('ACL' => 'private', 'Bucket' => $job_object->job['s3bucket'], 'ContentType' => $job_object->get_mime_type($job_object->backup_folder . $job_object->backup_file), 'Key' => $job_object->job['s3dir'] . $job_object->backup_file);
if (!empty($job_object->job['s3ssencrypt'])) {
$args['ServerSideEncryption'] = $job_object->job['s3ssencrypt'];
}
if (!empty($job_object->job['s3storageclass'])) {
$args['StorageClass'] = empty($job_object->job['s3storageclass']) ? '' : $job_object->job['s3storageclass'];
}
$upload = $s3->createMultipartUpload($args);
$job_object->steps_data[$job_object->step_working]['UploadId'] = $upload->get('UploadId');
$job_object->steps_data[$job_object->step_working]['Parts'] = array();
$job_object->steps_data[$job_object->step_working]['Part'] = 1;
}
while (!feof($file_handle)) {
$chunk_upload_start = microtime(TRUE);
$part_data = fread($file_handle, 1048576 * 5);
//5MB Minimum part size
$part = $s3->uploadPart(array('Bucket' => $job_object->job['s3bucket'], 'UploadId' => $job_object->steps_data[$job_object->step_working]['UploadId'], 'Key' => $job_object->job['s3dir'] . $job_object->backup_file, 'PartNumber' => $job_object->steps_data[$job_object->step_working]['Part'], 'Body' => $part_data));
$chunk_upload_time = microtime(TRUE) - $chunk_upload_start;
$job_object->substeps_done = $job_object->substeps_done + strlen($part_data);
$job_object->steps_data[$job_object->step_working]['Parts'][] = array('ETag' => $part->get('ETag'), 'PartNumber' => $job_object->steps_data[$job_object->step_working]['Part']);
$job_object->steps_data[$job_object->step_working]['Part']++;
$time_remaining = $job_object->do_restart_time();
if ($time_remaining < $chunk_upload_time) {
$job_object->do_restart_time(TRUE);
}
$job_object->update_working_data();
}
$s3->completeMultipartUpload(array('Bucket' => $job_object->job['s3bucket'], 'UploadId' => $job_object->steps_data[$job_object->step_working]['UploadId'], 'Key' => $job_object->job['s3dir'] . $job_object->backup_file, 'Parts' => $job_object->steps_data[$job_object->step_working]['Parts']));
} catch (Exception $e) {
$job_object->log(E_USER_ERROR, sprintf(__('S3 Service API: %s', 'backwpup'), $e->getMessage()), $e->getFile(), $e->getLine());
if (!empty($job_object->steps_data[$job_object->step_working]['uploadId'])) {
$s3->abortMultipartUpload(array('Bucket' => $job_object->job['s3bucket'], 'UploadId' => $job_object->steps_data[$job_object->step_working]['uploadId'], 'Key' => $job_object->job['s3dir'] . $job_object->backup_file));
//.........这里部分代码省略.........
示例4: job_run
/**
* Dumps the Database
*
* @param $job_object BackWPup_Job
*
* @return bool
*/
public function job_run(BackWPup_Job $job_object)
{
$job_object->substeps_todo = 1;
if ($job_object->steps_data[$job_object->step_working]['SAVE_STEP_TRY'] != $job_object->steps_data[$job_object->step_working]['STEP_TRY']) {
$job_object->log(sprintf(__('%d. Try to backup database …', 'backwpup'), $job_object->steps_data[$job_object->step_working]['STEP_TRY']));
}
//build filename
if (empty($job_object->steps_data[$job_object->step_working]['dbdumpfile'])) {
$job_object->steps_data[$job_object->step_working]['dbdumpfile'] = $job_object->generate_filename($job_object->job['dbdumpfile'], 'sql') . $job_object->job['dbdumpfilecompression'];
}
try {
//Connect to Database
$sql_dump = new BackWPup_MySQLDump(array('dumpfile' => BackWPup::get_plugin_data('TEMP') . $job_object->steps_data[$job_object->step_working]['dbdumpfile']));
if ($job_object->steps_data[$job_object->step_working]['SAVE_STEP_TRY'] != $job_object->steps_data[$job_object->step_working]['STEP_TRY']) {
$job_object->log(sprintf(__('Connected to database %1$s on %2$s', 'backwpup'), DB_NAME, DB_HOST));
}
//Exclude Tables
foreach ($sql_dump->tables_to_dump as $key => $table) {
if (in_array($table, $job_object->job['dbdumpexclude'], true)) {
unset($sql_dump->tables_to_dump[$key]);
}
}
//set steps must done
$job_object->substeps_todo = count($sql_dump->tables_to_dump);
if ($job_object->substeps_todo == 0) {
$job_object->log(__('No tables to backup.', 'backwpup'), E_USER_WARNING);
unset($sql_dump);
return TRUE;
}
//dump head
if (!isset($job_object->steps_data[$job_object->step_working]['is_head'])) {
$sql_dump->dump_head(TRUE);
$job_object->steps_data[$job_object->step_working]['is_head'] = TRUE;
}
//dump tables
$i = 0;
foreach ($sql_dump->tables_to_dump as $table) {
if ($i < $job_object->substeps_done) {
$i++;
continue;
}
if (empty($job_object->steps_data[$job_object->step_working]['tables'][$table])) {
$num_records = $sql_dump->dump_table_head($table);
$job_object->steps_data[$job_object->step_working]['tables'][$table] = array('start' => 0, 'length' => 1000);
if ($job_object->is_debug()) {
$job_object->log(sprintf(__('Backup database table "%s" with "%s" records', 'backwpup'), $table, $num_records));
}
}
$while = true;
while ($while) {
$dump_start_time = microtime(TRUE);
$done_records = $sql_dump->dump_table($table, $job_object->steps_data[$job_object->step_working]['tables'][$table]['start'], $job_object->steps_data[$job_object->step_working]['tables'][$table]['length']);
$dump_time = microtime(TRUE) - $dump_start_time;
if (empty($dump_time)) {
$dump_time = 0.01;
}
if ($done_records < $job_object->steps_data[$job_object->step_working]['tables'][$table]['length']) {
//that is the last chunk
$while = FALSE;
}
$job_object->steps_data[$job_object->step_working]['tables'][$table]['start'] = $job_object->steps_data[$job_object->step_working]['tables'][$table]['start'] + $done_records;
// dump time per record and set next length
$length = ceil($done_records / $dump_time * $job_object->get_restart_time());
if ($length > 25000 || 0 >= $job_object->get_restart_time()) {
$length = 25000;
}
if ($length < 1000) {
$length = 1000;
}
$job_object->steps_data[$job_object->step_working]['tables'][$table]['length'] = $length;
$job_object->do_restart_time();
}
$sql_dump->dump_table_footer($table);
$job_object->substeps_done++;
$i++;
$job_object->update_working_data();
}
//dump footer
$sql_dump->dump_footer();
unset($sql_dump);
} catch (Exception $e) {
$job_object->log($e->getMessage(), E_USER_ERROR, $e->getFile(), $e->getLine());
unset($sql_dump);
return FALSE;
}
$filesize = filesize(BackWPup::get_plugin_data('TEMP') . $job_object->steps_data[$job_object->step_working]['dbdumpfile']);
if (!is_file(BackWPup::get_plugin_data('TEMP') . $job_object->steps_data[$job_object->step_working]['dbdumpfile']) || $filesize < 1) {
$job_object->log(__('MySQL backup file not created', 'backwpup'), E_USER_ERROR);
return FALSE;
} else {
$job_object->additional_files_to_backup[] = BackWPup::get_plugin_data('TEMP') . $job_object->steps_data[$job_object->step_working]['dbdumpfile'];
$job_object->log(sprintf(__('Added database dump "%1$s" with %2$s to backup file list', 'backwpup'), $job_object->steps_data[$job_object->step_working]['dbdumpfile'], size_format($filesize, 2)));
}
//.........这里部分代码省略.........
示例5: job_run_archive
/**
* @param $job_object
* @return bool
*/
public function job_run_archive(BackWPup_Job $job_object)
{
$job_object->substeps_todo = $job_object->backup_filesize + 2;
if ($job_object->steps_data[$job_object->step_working]['SAVE_STEP_TRY'] != $job_object->steps_data[$job_object->step_working]['STEP_TRY']) {
$job_object->log(sprintf(__('%d. Try sending backup to a Microsoft Azure (Blob) …', 'backwpup'), $job_object->steps_data[$job_object->step_working]['STEP_TRY']), E_USER_NOTICE);
}
try {
set_include_path(get_include_path() . PATH_SEPARATOR . BackWPup::get_plugin_data('plugindir') . '/vendor/PEAR/');
/* @var $blobRestProxy WindowsAzure\Blob\BlobRestProxy */
//https causes an error SSL: Connection reset by peer that is why http
$blobRestProxy = WindowsAzure\Common\ServicesBuilder::getInstance()->createBlobService('DefaultEndpointsProtocol=http;AccountName=' . $job_object->job['msazureaccname'] . ';AccountKey=' . BackWPup_Encryption::decrypt($job_object->job['msazurekey']));
if ($job_object->steps_data[$job_object->step_working]['SAVE_STEP_TRY'] != $job_object->steps_data[$job_object->step_working]['STEP_TRY']) {
//test vor existing container
$containers = $blobRestProxy->listContainers()->getContainers();
$job_object->steps_data[$job_object->step_working]['container_url'] = '';
foreach ($containers as $container) {
if ($container->getName() == $job_object->job['msazurecontainer']) {
$job_object->steps_data[$job_object->step_working]['container_url'] = $container->getUrl();
break;
}
}
if (!$job_object->steps_data[$job_object->step_working]['container_url']) {
$job_object->log(sprintf(__('MS Azure container "%s" does not exist!', 'backwpup'), $job_object->job['msazurecontainer']), E_USER_ERROR);
return TRUE;
} else {
$job_object->log(sprintf(__('Connected to MS Azure container "%s".', 'backwpup'), $job_object->job['msazurecontainer']), E_USER_NOTICE);
}
$job_object->log(__('Starting upload to MS Azure …', 'backwpup'), E_USER_NOTICE);
}
//Prepare Upload
if ($file_handel = fopen($job_object->backup_folder . $job_object->backup_file, 'rb')) {
fseek($file_handel, $job_object->substeps_done);
if (empty($job_object->steps_data[$job_object->step_working]['BlockList'])) {
$job_object->steps_data[$job_object->step_working]['BlockList'] = array();
}
while (!feof($file_handel)) {
$data = fread($file_handel, 1048576 * 4);
//4MB
if (strlen($data) == 0) {
continue;
}
$chunk_upload_start = microtime(TRUE);
$block_count = count($job_object->steps_data[$job_object->step_working]['BlockList']) + 1;
$block_id = md5($data) . str_pad($block_count, 6, "0", STR_PAD_LEFT);
$blobRestProxy->createBlobBlock($job_object->job['msazurecontainer'], $job_object->job['msazuredir'] . $job_object->backup_file, $block_id, $data);
$job_object->steps_data[$job_object->step_working]['BlockList'][] = $block_id;
$chunk_upload_time = microtime(TRUE) - $chunk_upload_start;
$job_object->substeps_done = $job_object->substeps_done + strlen($data);
$time_remaining = $job_object->do_restart_time();
if ($time_remaining < $chunk_upload_time) {
$job_object->do_restart_time(TRUE);
}
$job_object->update_working_data();
}
fclose($file_handel);
} else {
$job_object->log(__('Can not open source file for transfer.', 'backwpup'), E_USER_ERROR);
return FALSE;
}
//crate blog list
$blocklist = new WindowsAzure\Blob\Models\BlockList();
foreach ($job_object->steps_data[$job_object->step_working]['BlockList'] as $block_id) {
$blocklist->addUncommittedEntry($block_id);
}
unset($job_object->steps_data[$job_object->step_working]['BlockList']);
//Commit Blocks
$blobRestProxy->commitBlobBlocks($job_object->job['msazurecontainer'], $job_object->job['msazuredir'] . $job_object->backup_file, $blocklist->getEntries());
$job_object->substeps_done++;
$job_object->log(sprintf(__('Backup transferred to %s', 'backwpup'), $job_object->steps_data[$job_object->step_working]['container_url'] . '/' . $job_object->job['msazuredir'] . $job_object->backup_file), E_USER_NOTICE);
if (!empty($job_object->job['jobid'])) {
BackWPup_Option::update($job_object->job['jobid'], 'lastbackupdownloadurl', network_admin_url('admin.php') . '?page=backwpupbackups&action=downloadmsazure&file=' . $job_object->job['msazuredir'] . $job_object->backup_file . '&jobid=' . $job_object->job['jobid']);
}
} catch (Exception $e) {
$job_object->log(E_USER_ERROR, sprintf(__('Microsoft Azure API: %s', 'backwpup'), $e->getMessage()), $e->getFile(), $e->getLine());
$job_object->substeps_done = 0;
unset($job_object->steps_data[$job_object->step_working]['BlockList']);
if (isset($file_handel) && is_resource($file_handel)) {
fclose($file_handel);
}
return FALSE;
}
try {
$backupfilelist = array();
$filecounter = 0;
$files = array();
$blob_options = new WindowsAzure\Blob\Models\ListBlobsOptions();
$blob_options->setPrefix($job_object->job['msazuredir']);
$blobs = $blobRestProxy->listBlobs($job_object->job['msazurecontainer'], $blob_options)->getBlobs();
if (is_array($blobs)) {
foreach ($blobs as $blob) {
$file = basename($blob->getName());
if ($job_object->is_backup_archive($file)) {
$backupfilelist[$blob->getProperties()->getLastModified()->getTimestamp()] = $file;
}
$files[$filecounter]['folder'] = $job_object->steps_data[$job_object->step_working]['container_url'] . "/" . dirname($blob->getName()) . "/";
$files[$filecounter]['file'] = $blob->getName();
//.........这里部分代码省略.........