WordPress.org

Make WordPress Core

Ticket #4179: 4179.cache.expire.patch

File 4179.cache.expire.patch, 3.4 KB (added by DD32, 11 years ago)

cache expire patch

  • wp-includes/cache.php

     
    11<?php
    2 function wp_cache_add($key, $data, $flag = '', $expire = 0) {
     2function wp_cache_add($key, $data, $flag = '', $expire = '') {
    33        global $wp_object_cache;
    44        $data = unserialize(serialize($data));
    55
     
    3636        $GLOBALS['wp_object_cache'] =& new WP_Object_Cache();
    3737}
    3838
    39 function wp_cache_replace($key, $data, $flag = '', $expire = 0) {
     39function wp_cache_replace($key, $data, $flag = '', $expire = '') {
    4040        global $wp_object_cache;
    4141        $data = unserialize(serialize($data));
    4242
    4343        return $wp_object_cache->replace($key, $data, $flag, $expire);
    4444}
    4545
    46 function wp_cache_set($key, $data, $flag = '', $expire = 0) {
     46function wp_cache_set($key, $data, $flag = '', $expire = '') {
    4747        global $wp_object_cache;
    4848        $data = unserialize(serialize($data));
    4949
     
    5757        var $cache_dir;
    5858        var $cache_enabled = false;
    5959        var $expiration_time = 900;
     60        var $expire_in = array();
    6061        var $flock_filename = 'wp_object_cache.lock';
    6162        var $mutex;
    6263        var $cache = array ();
     
    146147                        return false;
    147148                }
    148149
    149                 $cache_file = $this->cache_dir.$this->get_group_dir($group)."/".$this->hash($id).'.php';
     150                $cache_file = $this->cache_dir . $this->get_group_dir($group) . DIRECTORY_SEPARATOR . $this->hash($id) . '.php';
    150151                if (!file_exists($cache_file)) {
    151152                        $this->non_existant_objects[$group][$id] = true;
    152153                        $this->cache_misses += 1;
     
    155156
    156157                // If the object has expired, remove it from the cache and return false to force
    157158                // a refresh.
    158                 $now = time();
    159                 if ((filemtime($cache_file) + $this->expiration_time) <= $now) {
     159                if ( filemtime($cache_file) <= time() ) {
    160160                        $this->cache_misses += 1;
    161161                        $this->delete($id, $group, true);
    162162                        return false;
     
    174174                if (false !== array_search($group, $this->global_groups))
    175175                        return $group;
    176176
    177                 return "{$this->blog_id}/$group";
     177                return $this->blog_id . DIRECTORY_SEPARATOR . $group;
    178178        }
    179179
    180180        function hash($data) {
     
    201201        function make_group_dir($group, $perms) {
    202202                $group_dir = $this->get_group_dir($group);
    203203                $make_dir = '';
    204                 foreach (split('/', $group_dir) as $subdir) {
    205                         $make_dir .= "$subdir/";
     204                foreach (explode(DIRECTORY_SEPARATOR, $group_dir) as $subdir) {
     205                        $make_dir .= $subdir . DIRECTORY_SEPARATOR;
    206206                        if (!file_exists($this->cache_dir.$make_dir)) {
    207207                                if (! @ mkdir($this->cache_dir.$make_dir))
    208208                                        break;
     
    216216                        }
    217217                }
    218218
    219                 return $this->cache_dir."$group_dir/";
     219                return $this->cache_dir . $group_dir . DIRECTORY_SEPARATOR;
    220220        }
    221221
    222222        function rm_cache_dir() {
     
    275275                if (empty ($group))
    276276                        $group = 'default';
    277277
     278                if( empty($expire) )
     279                        $expire = $this->expiration_time;
     280               
    278281                if (NULL == $data)
    279282                        $data = '';
    280283
    281284                $this->cache[$group][$id] = $data;
    282285                unset ($this->non_existant_objects[$group][$id]);
    283286                $this->dirty_objects[$group][] = $id;
     287                $this->expire_in[$group][$id] = $expire;
    284288
    285289                return true;
    286290        }
     
    345349                                        @ unlink($temp_file);
    346350                                }
    347351                                @ chmod($cache_file, $file_perms);
     352                                @ touch($cache_file, time() + $this->expire_in[$group][$id] );
    348353                        }
    349354                }
    350355
     
    377382                                echo "<pre>";
    378383                                print_r(array_unique($this->dirty_objects[$group]));
    379384                                echo "</pre>";
    380                                 echo "</p>";
    381385                        }
     386                        echo "</p>";
    382387                }
    383388        }
    384389