X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/cc7b1505cd9fafd87c3672f669e13e98b0c544f7..3e7fab96d7874067884348df10bbdcdefa4a89ad:/wp-includes/cache.php diff --git a/wp-includes/cache.php b/wp-includes/cache.php index 79a0566b..ce7184d9 100644 --- a/wp-includes/cache.php +++ b/wp-includes/cache.php @@ -1,6 +1,7 @@ add($key, $data, $flag, $expire); } @@ -8,6 +9,8 @@ function wp_cache_add($key, $data, $flag = '', $expire = 0) { function wp_cache_close() { global $wp_object_cache; + if ( ! isset($wp_object_cache) ) + return; return $wp_object_cache->save(); } @@ -30,19 +33,19 @@ function wp_cache_get($id, $flag = '') { } function wp_cache_init() { - global $wp_object_cache; - - $wp_object_cache = new WP_Object_Cache(); + $GLOBALS['wp_object_cache'] =& new WP_Object_Cache(); } function wp_cache_replace($key, $data, $flag = '', $expire = 0) { global $wp_object_cache; + $data = unserialize(serialize($data)); return $wp_object_cache->replace($key, $data, $flag, $expire); } function wp_cache_set($key, $data, $flag = '', $expire = 0) { global $wp_object_cache; + $data = unserialize(serialize($data)); return $wp_object_cache->set($key, $data, $flag, $expire); } @@ -60,6 +63,7 @@ class WP_Object_Cache { var $dirty_objects = array (); var $non_existant_objects = array (); var $global_groups = array ('users', 'userlogins', 'usermeta'); + var $non_persistent_groups = array('comment'); var $blog_id; var $cold_cache_hits = 0; var $warm_cache_hits = 0; @@ -67,7 +71,7 @@ class WP_Object_Cache { var $secret = ''; function acquire_lock() { - // Acquire a write lock. + // Acquire a write lock. $this->mutex = @fopen($this->cache_dir.$this->flock_filename, 'w'); if ( false == $this->mutex) return false; @@ -109,7 +113,7 @@ class WP_Object_Cache { $this->cache = array (); $this->dirty_objects = array (); $this->non_existant_objects = array (); - + $this->release_lock(); return true; @@ -183,39 +187,7 @@ class WP_Object_Cache { } function load_group_from_db($group) { - global $wpdb; - - if ('category' == $group) { - $this->cache['category'] = array (); - if ($dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories")) { - foreach ($dogs as $catt) - $this->cache['category'][$catt->cat_ID] = $catt; - - foreach ($this->cache['category'] as $catt) { - $curcat = $catt->cat_ID; - $fullpath = '/'.$this->cache['category'][$catt->cat_ID]->category_nicename; - while ($this->cache['category'][$curcat]->category_parent != 0) { - $curcat = $this->cache['category'][$curcat]->category_parent; - $fullpath = '/'.$this->cache['category'][$curcat]->category_nicename.$fullpath; - } - $this->cache['category'][$catt->cat_ID]->fullpath = $fullpath; - } - } - } else - if ('options' == $group) { - $wpdb->hide_errors(); - if (!$options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'")) { - $options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options"); - } - $wpdb->show_errors(); - - if ( ! $options ) - return; - - foreach ($options as $option) { - $this->cache['options'][$option->option_name] = $option->option_value; - } - } + return; } function make_group_dir($group, $perms) { @@ -249,15 +221,15 @@ class WP_Object_Cache { while ($index < count($stack)) { # Get indexed directory from stack $dir = $stack[$index]; - + $dh = @ opendir($dir); if (!$dh) return false; - + while (($file = @ readdir($dh)) !== false) { if ($file == '.' or $file == '..') continue; - + if (@ is_dir($dir . DIRECTORY_SEPARATOR . $file)) $stack[] = $dir . DIRECTORY_SEPARATOR . $file; else if (@ is_file($dir . DIRECTORY_SEPARATOR . $file)) @@ -337,6 +309,9 @@ class WP_Object_Cache { // Loop over dirty objects and save them. $errors = 0; foreach ($this->dirty_objects as $group => $ids) { + if ( in_array($group, $this->non_persistent_groups) ) + continue; + $group_dir = $this->make_group_dir($group, $dir_perms); $ids = array_unique($ids); @@ -360,10 +335,9 @@ class WP_Object_Cache { fputs($fd, $serial); fclose($fd); if (!@ rename($temp_file, $cache_file)) { - if (@ copy($temp_file, $cache_file)) - @ unlink($temp_file); - else - $errors++; + if (!@ copy($temp_file, $cache_file)) + $errors++; + @ unlink($temp_file); } @ chmod($cache_file, $file_perms); } @@ -372,7 +346,7 @@ class WP_Object_Cache { $this->dirty_objects = array(); $this->release_lock(); - + if ( $errors ) return false; @@ -381,14 +355,14 @@ class WP_Object_Cache { function stats() { echo "

"; - echo "Cold Cache Hits: {$this->cold_cache_hits}
"; - echo "Warm Cache Hits: {$this->warm_cache_hits}
"; - echo "Cache Misses: {$this->cache_misses}
"; + echo "Cold Cache Hits: {$this->cold_cache_hits}
"; + echo "Warm Cache Hits: {$this->warm_cache_hits}
"; + echo "Cache Misses: {$this->cache_misses}
"; echo "

"; foreach ($this->cache as $group => $cache) { echo "

"; - echo "Group: $group
"; + echo "Group: $group
"; echo "Cache:"; echo "

";
 			print_r($cache);
@@ -404,8 +378,14 @@ class WP_Object_Cache {
 	}
 
 	function WP_Object_Cache() {
+		return $this->__construct();
+	}
+
+	function __construct() {
 		global $blog_id;
 
+		register_shutdown_function(array(&$this, "__destruct"));
+
 		if (defined('DISABLE_CACHE'))
 			return;
 
@@ -440,5 +420,10 @@ class WP_Object_Cache {
 
 		$this->blog_id = $this->hash($blog_id);
 	}
+
+	function __destruct() {
+		$this->save();
+		return true;
+	}
 }
 ?>