diff --git a/wp-content/plugins/staticize-reloaded.php b/wp-content/plugins/staticize-reloaded.php new file mode 100644 index 000000000..d0007cdb1 --- /dev/null +++ b/wp-content/plugins/staticize-reloaded.php @@ -0,0 +1,160 @@ +Bill Zeller. +Author: Matt Mullenweg +Author URI: http://photomatt.net/ +*/ + +$http = false; // This controls whether we send etag and last-modified headers or not +define(CACHE_PATH, trailingslashit( ABSPATH . 'wp-content/staticize-cache' ) ); + +if ( !file_exists(CACHE_PATH) ) : + if ( is_writable( dirname(CACHE_PATH) ) ) + $dir = mkdir( CACHE_PATH, 0777); + else + die("Your cache directory (" . CACHE_PATH . ") needs to be writable for this plugin to work. Double-check it. Deactivate the Staticize Reloaded plugin."); +endif; + +// Array of files that have 'wp-' but should still be cached +$acceptableFiles = array( + 'wp-atom.php', 'wp-comments-popup.php', 'wp-commentsrss2.php', + 'wp-links-opml.php', 'wp-locations.php', 'wp-rdf.php', + 'wp-rss.php', 'wp-rss2.php' +); + +$staticFileName = ''; + +function StaticizeInit() { + global $staticFileName, $acceptableFiles, $timestart, $http; + + $key = $_SERVER['REQUEST_URI'] . join($_COOKIE, ','); + $script = basename($_SERVER['SCRIPT_NAME']); + + if( strstr($_SERVER['SCRIPT_NAME'], 'wp-') && !in_array($script, $acceptableFiles) ) + return; + + $staticFileName = md5($key) . '.php'; + + if( is_file(CACHE_PATH . $staticFileName) ) { + + if ($http) staticize_header(); + + include(CACHE_PATH . $staticFileName); + + $timetotal = staticize_timer(); + + echo "\n"; + exit; + } + + ob_start('StaticizeCallback'); + register_shutdown_function('StaticizeEnd'); +} + + +function StaticizeCallback($buffer) { + global $staticFileName, $timestart; + + $timetotal = staticize_timer(); + + if ($timetotal < 0.05) : // Too fast to cache + $buffer .= "\n"; + return $buffer; + endif; + + $fr = fopen(CACHE_PATH . $staticFileName, 'a'); + chmod(CACHE_PATH . $staticFileName, 0666); + if (!$fr) + $buffer = "Couldn't write to: " . CACHE_PATH . $staticFileName; + + $buffer .= "\n"; + $return = $buffer; + + $buffer = preg_replace('|(.*?)|is', '', $buffer); + $buffer = preg_replace('|(.*?)|is', '', $buffer); + $buffer = str_replace('', $buffer); + fwrite($fr, $buffer); + fclose($fr); + + return $return; +} + +function StaticizeClean() { // TODO: only touch files that have been changed using post ID + if ( $handle = opendir( CACHE_PATH ) ) : + while ( false !== ( $file = readdir($handle) ) ) : + if ( '.' != $file && '..' != $file ) + unlink(CACHE_PATH . $file); + endwhile; + endif; + closedir($handle); +} + + +function StaticizeEnd() { + ob_end_clean(); +} + +function postChange($id) { + StaticizeClean(); + return $id; +} + +function staticize_timer() { + global $timestart; + $mtime = microtime(); + $mtime = explode(' ', $mtime); + $timeend = $mtime[1] + $mtime[0]; + return number_format($timeend - $timestart, 3); +} + +function staticize_header() { + $file_touched = filemtime(CACHE_PATH . $staticFileName); + $wp_last_modified = gmdate('D, d M Y H:i:s', $file_touched) . ' GMT'; + $wp_etag = '"'.md5($wp_last_modified).'"'; + header('Last-Modified: '.$wp_last_modified); + header('ETag: '.$wp_etag); + header ('X-Pingback: ' . get_settings('siteurl') . '/xmlrpc.php'); + header ('X-Staticize: ' . staticize_timer() ); + + // Support for Conditional GET + if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) $client_last_modified = $_SERVER['HTTP_IF_MODIFIED_SINCE']; + else $client_last_modified = false; + if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) $client_etag = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']); + else $client_etag = false; + + if ( ($client_last_modified && $client_etag) ? + (($client_last_modified == $wp_last_modified) && ($client_etag == $wp_etag)) : + (($client_last_modified == $wp_last_modified) || ($client_etag == $wp_etag)) ) { + if ( preg_match('/cgi/',php_sapi_name()) ) { + header('HTTP/1.1 304 Not Modified'); + echo "\r\n\r\n"; + exit; + } else { + header('HTTP/1.x 304 Not Modified'); + exit; + } + } +} + +if(function_exists('add_action')) { + StaticizeInit(); + + add_action('publish_post', 'postChange', 0); + add_action('edit_post', 'postChange', 0); + add_action('delete_post', 'postChange', 0); + add_action('comment_post', 'postChange', 0); + add_action('trackback_post', 'postChange', 0); + add_action('pingback_post', 'postChange', 0); + add_action('edit_comment', 'postChange', 0); + add_action('delete_comment', 'postChange', 0); + add_action('template_save', 'postChange', 0); +} + +if ( isset($_GET['staticize-flush']) ) { + StaticizeClean(); +} + +?> \ No newline at end of file