WordPress.org

Make WordPress Core

Ticket #4179: 4179.cache.expire.2.patch

File 4179.cache.expire.2.patch, 3.7 KB (added by DD32, 8 years ago)
  • 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 
     
    401406                if ( ini_get('safe_mode') && ! defined('ENABLE_CACHE') ) 
    402407                        return; 
    403408 
     409                if ( ! defined( 'DIRECTORY_SEPARATOR' ) ) { 
     410                        if ( strpos( $_ENV[ 'OS' ], 'Win' ) !== false ) 
     411                                define( 'DIRECTORY_SEPARATOR', '\\' ); 
     412                        else  
     413                                define( 'DIRECTORY_SEPARATOR', '/' ); 
     414                } 
     415 
    404416                if (defined('CACHE_PATH')) 
    405417                        $this->cache_dir = CACHE_PATH; 
    406418                else