if ($result['meta_key'] == '_wp_attachment_metadata') { $data = unserialize($result['file']); foreach ($data['sizes'] as $size) { // Go through each sized thumbnail file. $mediaFiles[$size['file']] = array('modified' => $mediaFiles[$data['file']]['modified']); } } } } // end foreach $results. unset($results); return $mediaFiles; } // End backupbuddy_dbMediaSince(). // Get list of active plugins and remove BackupBuddy from it so we don't update any BackupBuddy files when deploying. Could cause issues with the API replacing files mid-deploy. $activePlugins = backupbuddy_api::getActivePlugins(); foreach ($activePlugins as $activePluginIndex => $activePlugin) { if (false !== strpos($activePlugin['name'], 'BackupBuddy')) { unset($activePlugins[$activePluginIndex]); } } $activePluginDirs = array(); foreach ($activePlugins as $activePluginDir => $activePlugin) { $activePluginDirs[] = dirname(WP_PLUGIN_DIR . '/' . $activePluginDir); } $allPluginDirs = glob(WP_PLUGIN_DIR . '/*', GLOB_ONLYDIR); $inactivePluginDirs = array_diff($allPluginDirs, $activePluginDirs); // Remove active plugins from directories of all plugins to get directories of inactive plugins to exclude later. $inactivePluginDirs[] = pb_backupbuddy::plugin_path(); // Also exclude BackupBuddy directory. // Calculate media files signatures.
$memory_limit = 32; } $root = get_template_directory(); $generate_sha1 = true; //echo 'mem:' . memory_get_usage(true) . '<br>'; $files = (array) pb_backupbuddy::$filesystem->deepglob($root); //echo 'mem:' . memory_get_usage(true) . '<br>'; $root_len = strlen($root); $hashedFiles = array(); foreach ($files as $file_id => &$file) { $stat = stat($file); if (FALSE === $stat) { pb_backupbuddy::status('error', 'Unable to read file `' . $file . '` stat.'); } $new_file = substr($file, $root_len); $sha1 = ''; if (true === $generate_sha1 && $stat['size'] < 1073741824) { // < 100mb $sha1 = sha1_file($file); } $hashedFiles[$new_file] = array('size' => $stat['size'], 'modified' => $stat['mtime'], 'sha1' => $sha1); unset($files[$file_id]); // Better to free memory or leave out for performance? } unset($files); //echo 'mem:' . memory_get_usage(true) . '<br>'; //echo 'filecount: ' . count( $new_files ) . '<br>'; //print_r( $new_files ); global $wp_version; return array('backupbuddyVersion' => pb_backupbuddy::settings('version'), 'wordpressVersion' => $wp_version, 'localTime' => time(), 'php' => array('upload_max_filesize' => $upload_max_filesize, 'max_execution_time' => $max_execution_time, 'memory_limit' => $memory_limit), 'abspath' => ABSPATH, 'siteurl' => site_url(), 'homeurl' => home_url(), 'activePlugins' => backupbuddy_api::getActivePlugins(), 'activeTheme' => get_template(), 'themeSignatures' => $hashedFiles, 'notifications' => array());
if (null === $results || false === $results) { pb_backupbuddy::status('error', 'Error #238933: Unable to calculate media with query `' . $sql . '`. Check database permissions or contact host.'); } foreach ((array) $results as $result) { if ($result['meta_key'] == '_wp_attached_file') { $mediaFiles[$result['file']] = array('modified' => $result['file_modified']); } if (true === $includeThumbs) { if ($result['meta_key'] == '_wp_attachment_metadata') { $data = unserialize($result['file']); foreach ($data['sizes'] as $size) { $mediaFiles[$size['file']] = array('modified' => $mediaFiles[$data['file']]['modified']); } } } } unset($results); return $mediaFiles; } $upload_dir = wp_upload_dir(); $excludes = array('/backupbuddy_backups', '/pb_backupbuddy', '/backupbuddy_temp'); $mediaSignatures = backupbuddy_hashGlob($upload_dir['basedir'], $sha = false, $excludes); //backupbuddy_dbMediaSince( $includeThumbs = true ); /* echo '<pre>'; print_r( $mediaSignatures ); echo '</pre>'; */ global $wp_version; return array('backupbuddyVersion' => pb_backupbuddy::settings('version'), 'wordpressVersion' => $wp_version, 'localTime' => time(), 'php' => array('upload_max_filesize' => $upload_max_filesize, 'max_execution_time' => $max_execution_time, 'memory_limit' => $memory_limit, 'max_post_size' => $max_post_size), 'abspath' => ABSPATH, 'siteurl' => site_url(), 'homeurl' => home_url(), 'tables' => $dbTables, 'dbPrefix' => $wpdb->prefix, 'activePlugins' => backupbuddy_api::getActivePlugins(), 'activeTheme' => get_template(), 'themeSignatures' => backupbuddy_hashGlob(get_template_directory()), 'mediaSignatures' => $mediaSignatures, 'mediaCount' => count($mediaSignatures), 'notifications' => array()); unset($mediaSignatures);
public static function files_init($state = array()) { $start_time = time(true); $state = array_merge(array('current_step' => 'media', 'step_start' => time(), 'sha1' => false), $state); /* STEPS * 1. Generate list of files, leaving stats blank. * 2. Loop through list. Skip anything set to delete. If scantime is too old, calculate filesize, mtime, and optional sha1. Compare with existing values & update them. If they changed then mark sent to false. * * array[filename] => { * size * mtime * sha1 * scantime * [sent] * [delete] * } * */ /***** MEDIA *****/ if ('1' != pb_backupbuddy::$options['live']['scan_media']) { pb_backupbuddy::status('details', 'Scanning media files disabled based on settings.'); } else { $upload_dir = wp_upload_dir(); $mediaExcludes = array('/backupbuddy_backups', '/pb_backupbuddy', '/backupbuddy_temp'); $mediaExcludes = array_merge($mediaExcludes, self::_getOption('media_excludes', true)); $scandir = $upload_dir['basedir']; pb_backupbuddy::status('details', 'Scanning directory `' . $scandir . '`.'); $mediaSignatures = backupbuddy_core::hashGlob($scandir, $state['sha1'], $mediaExcludes); self::_processSignatures($type = 'media', $mediaSignatures); unset($mediaSignatures); pb_backupbuddy::status('details', 'Time elapsed since files_init: `' . (time() - $start_time) . '` secs.'); } /***** THEMES & CHILDTHEMES *****/ if ('1' != pb_backupbuddy::$options['live']['scan_themes']) { pb_backupbuddy::status('details', 'Scanning theme files disabled based on settings.'); } else { $themeExcludes = self::_getOption('theme_excludes', true); $scandir = get_theme_root(); pb_backupbuddy::status('details', 'Scanning directory `' . $scandir . '`.'); $themeSignatures = backupbuddy_core::hashGlob($scandir, $state['sha1'], $themeExcludes); self::_processSignatures($type = 'theme', $themeSignatures); unset($themeSignatures); pb_backupbuddy::status('details', 'Time elapsed since files_init: `' . (time() - $start_time) . '` secs.'); } /***** CHILDTHEME *****/ /* $childThemeExcludes = self::_getOption( pb_backupbuddy::$options['live']['childtheme_excludes'] ); if ( get_stylesheet_directory() == get_template_directory() ) { // Theme & childtheme are same so do not send any childtheme files! $childThemeSignatures = array(); } else { $childThemeSignatures = backupbuddy_core::hashGlob( get_stylesheet_directory(), $sha1, $childThemeExcludes ); } self::_processSignatures( $type = 'childtheme', $childThemeSignatures ); unset( $childThemeSignatures ); pb_backupbuddy::status( 'details', 'Time elapsed since files_init: `' . ( time() - $start_time ) . '` secs.' ); */ /***** PLUGIN *****/ if ('1' != pb_backupbuddy::$options['live']['scan_plugins']) { pb_backupbuddy::status('details', 'Scanning plugin files disabled based on settings.'); } else { $activePlugins = backupbuddy_api::getActivePlugins(); foreach ($activePlugins as $activePluginIndex => $activePlugin) { if (false !== strpos($activePlugin['name'], 'BackupBuddy')) { unset($activePlugins[$activePluginIndex]); } } $activePluginDirs = array(); foreach ($activePlugins as $activePluginDir => $activePlugin) { $activePluginDirs[] = dirname(WP_PLUGIN_DIR . '/' . $activePluginDir); } $allPluginDirs = glob(WP_PLUGIN_DIR . '/*', GLOB_ONLYDIR); $inactivePluginDirs = array_diff($allPluginDirs, $activePluginDirs); // Remove active plugins from directories of all plugins to get directories of inactive plugins to exclude later. $pluginExcludes = array_merge($inactivePluginDirs, self::_getOption('plugin_excludes', true)); $scandir = WP_PLUGIN_DIR; pb_backupbuddy::status('details', 'Scanning directory `' . $scandir . '`.'); $pluginSignatures = backupbuddy_core::hashGlob($scandir, $state['sha1'], $pluginExcludes); self::_processSignatures($type = 'plugins', $pluginSignatures); unset($pluginSignatures); pb_backupbuddy::status('details', 'Time elapsed since files_init: `' . (time() - $start_time) . '` secs.'); } /***** CUSTOM *****/ if ('1' != pb_backupbuddy::$options['live']['scan_custom']) { pb_backupbuddy::status('details', 'Scanning custom additional directories disabled based on settings.'); } else { $customIncludes = self::_getOption('custom_includes', true); $customSignatures = array(); $abspath_len = strlen(ABSPATH); foreach ($customIncludes as $customInclude) { if ('' == $customInclude || substr($customInclude, 0, $abspath_len) !== ABSPATH) { // Not within ABSPATH. continue; } pb_backupbuddy::status('details', 'Scanning directory `' . $customInclude . '`.'); $customSignatures = array_merge($customSignatures, backupbuddy_core::hashGlob($customInclude, $state['sha1'])); } self::_processSignatures($type = 'custom', $customSignatures); unset($customSignatures); pb_backupbuddy::status('details', 'Time elapsed since files_init: `' . (time() - $start_time) . '` secs.'); } echo 'Total time: ' . (time() - $start_time); }