WordPress.org

Make WordPress Core

Ticket #1103: crude_rss_cache_fix.patch

File crude_rss_cache_fix.patch, 3.8 KB (added by anonymousbugger, 13 years ago)
  • wp-includes/rss-functions.php

    ==== Patch <crude_rss_cache_fix> level 1
    Source: 81e510b7-0ff2-0310-ae0c-f70243c84fd4:/wordpress-branches/rss_cache:2470 [local]
    Target: 1a063a9b-81f0-0310-95a4-ce76da25c4cd:/trunk:2444 [mirrored]
            (http://svn.automattic.com/wordpress/trunk)
    Log:
    Merge rss_fix
    === wp-includes/rss-functions.php
    ==================================================================
     
    1010define('RSS', 'RSS');
    1111define('ATOM', 'Atom');
    1212define('MAGPIE_USER_AGENT', 'WordPress/' . $wp_version);
     13define('MAGPIE_CACHE_ON',true);
     14define('MAGPIE_CACHE_DIR',ABSPATH . "wp-content/cache");
     15define('MAGPIE_CACHE_AGE',86400);
    1316
    1417class MagpieRSS {
    1518        var $parser;
     
    664667               
    665668                update_option($cache_option, $rss);
    666669                update_option($cache_timestamp, time() );
    667                
    668                 return $cache_option;
     670                $cache_file = $this->file_name( $url );
     671                $fp = @fopen( $cache_file, 'w' );
     672                if ( ! $fp ) {
     673                        $this->error("Cache unable to open file for writing: $cache_file");
     674                        return 0;
     675                }
     676                $data = $this->serialize( $rss );                                                                     
     677                fwrite( $fp, $data );                                                                                 
     678                fclose( $fp );                                                                                             
     679                return $cache_file;
    669680        }
    670681       
    671682/*=======================================================================*\
     
    676687\*=======================================================================*/     
    677688        function get ($url) {
    678689                $this->ERROR = "";
    679                 $cache_option = 'rss_' . $this->file_name( $url );
    680                
    681                 if ( ! get_option( $cache_option ) ) {
    682                         $this->debug(
    683                                 "Cache doesn't contain: $url (cache option: $cache_option)"
    684                         );
    685                         return 0;
     690                $cache_file = $this->file_name( $url );
     691           
     692                if ( ! file_exists( $cache_file ) ) {
     693                    $this->debug("Cache doesn't contain: $url (cache file: $cache_file)");
     694                    return 0;
    686695                }
    687                
    688                 $rss = get_option( $cache_option );
    689                
     696           
     697                $fp = @fopen($cache_file, 'r');
     698                if ( ! $fp ) {
     699                    $this->error("Failed to open cache file for reading: $cache_file");
     700                    return 0;
     701                }
     702
     703                $data = fread( $fp, filesize($cache_file) );
     704                $rss = $this->unserialize( $data );
     705       
    690706                return $rss;
    691707        }
    692708
     
    701717                $this->ERROR = "";
    702718                $cache_option = $this->file_name( $url );
    703719                $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts';
     720                $filename = $this->file_name( $url );
    704721
    705                 if ( $mtime = get_option($cache_timestamp) ) {
    706                         // find how long ago the file was added to the cache
    707                         // and whether that is longer then MAX_AGE
    708                         $age = time() - $mtime;
    709                         if ( $this->MAX_AGE > $age ) {
    710                                 // object exists and is current
    711                                 return 'HIT';
    712                         }
    713                         else {
    714                                 // object exists but is old
    715                                 return 'STALE';
    716                         }
     722                if ( file_exists( $filename ) ) {
     723                    // find how long ago the file was added to the cache
     724                    // and whether that is longer then MAX_AGE
     725                    $mtime = filemtime( $filename );
     726                    $age = time() - $mtime;
     727                    if ( $this->MAX_AGE > $age ) {
     728                        // object exists and is current
     729                        return 'HIT';
     730                    }
     731                    else {
     732                        // object exists but is old
     733                        return 'STALE';
     734                    }
    717735                }
    718736                else {
    719                         // object does not exist
    720                         return 'MISS';
     737                    // object does not exist
     738                    return 'MISS';
    721739                }
    722740        }
    723741
     
    742760        Output:         a file name
    743761\*=======================================================================*/             
    744762        function file_name ($url) {
    745                 return md5( $url );
     763                $filename = md5( $url );
     764                return join( DIRECTORY_SEPARATOR, array( $this->BASE_CACHE, $filename ) );
    746765        }
    747766       
    748767/*=======================================================================*\
     
    847866                return false;
    848867        }
    849868}
    850 ?>
    851  No newline at end of file
     869?>