function booster_wp() { // Dump output buffer if ($out = ob_get_contents()) { // Check for right PHP version if (strnatcmp(phpversion(), '5.0.0') >= 0) { $booster_cache_dir = BOOSTER_CACHE_DIR; $js_plain = ''; $booster_out = ''; $booster_folder = explode('/', rtrim(str_replace('\\', '/', realpath(dirname(__FILE__))), '/')); $booster_folder = $booster_folder[count($booster_folder) - 1]; $booster = new Booster(); if (!is_dir($booster_cache_dir)) { @mkdir($booster_cache_dir, 0777); @chmod($booster_cache_dir, 0777); } if (is_dir($booster_cache_dir) && is_writable($booster_cache_dir) && substr(decoct(fileperms($booster_cache_dir)), 1) == "0777") { $booster_cache_reldir = $booster->getpath(str_replace('\\', '/', realpath($booster_cache_dir)), str_replace('\\', '/', dirname(__FILE__))); } else { $booster_cache_dir = rtrim(str_replace('\\', '/', dirname(__FILE__)), '/') . '/../../booster_cache'; $booster_cache_reldir = '../../booster_cache'; } $booster->booster_cachedir = $booster_cache_reldir; $booster->js_minify = FALSE; // Calculate relative path from root to Booster directory $root_to_booster_path = $booster->getpath(str_replace('\\', '/', dirname(__FILE__)), str_replace('\\', '/', dirname(realpath(ABSPATH)))); if (preg_match_all('/<head.*<\\/head>/ims', $out, $headtreffer, PREG_PATTERN_ORDER) > 0) { // Prevent processing of conditional comments $headtreffer[0][0] = preg_replace('/<!--\\[if.+?endif\\]-->/ims', '', $headtreffer[0][0]); // CSS part $css_rel_files = array(); // Start width inline-files preg_match_all('/<style[^>]*>(.*?)<\\/style>/ims', $headtreffer[0][0], $treffer, PREG_PATTERN_ORDER); for ($i = 0; $i < count($treffer[0]); $i++) { // Get media-type if (preg_match('/media=[\'"]*([^\'"]+)[\'"]*/ims', $treffer[0][$i], $mediatreffer)) { $media = preg_replace('/[^a-z]+/i', '', $mediatreffer[1]); if (trim($media) == '') { $media = 'all'; } } else { $media = 'all'; } // Save plain CSS to file to keep everything in line $filename = $booster_cache_dir . '/' . md5($treffer[1][$i]) . '_plain.css'; if (!file_exists($filename)) { file_put_contents($filename, $treffer[1][$i]); } if (file_exists($filename)) { @chmod($filename, 0777); // Calculate relative path from Booster to file $booster_to_file_path = $booster->getpath($booster_cache_dir . '/', str_replace('\\', '/', dirname(realpath(__FILE__))) . '/'); $linkhref = get_option('siteurl') . '/wp-content/plugins/' . $booster_folder . '/' . $booster_to_file_path . '/' . basename($filename); $booster_cache_dir = $booster_cache_dir; $linkcode = '<!-- Moved to file by Booster ' . $treffer[0][$i] . ' --><link rel="stylesheet" media="' . $media . '" href="' . $linkhref . '" />'; $headtreffer[0][0] = str_replace($treffer[0][$i], $linkcode, $headtreffer[0][0]); $out = str_replace($treffer[0][$i], $linkcode, $out); } else { $linkcode = '<!-- Failed to move inline-style to file ' . $filename . ' by Booster -->' . $treffer[0][$i]; $headtreffer[0][0] = str_replace($treffer[0][$i], $linkcode, $headtreffer[0][0]); $out = str_replace($treffer[0][$i], $linkcode, $out); } } // Continue with external files preg_match_all('/<link[^>]*?href=[\'"]*?([^\'"]+?\\.css)[\'"]*?[^>]*?>/ims', $headtreffer[0][0], $treffer, PREG_PATTERN_ORDER); for ($i = 0; $i < count($treffer[0]); $i++) { // Get media-type if (preg_match('/media=[\'"]*([^\'"]+)[\'"]*/ims', $treffer[0][$i], $mediatreffer)) { $media = preg_replace('/[^a-z]+/i', '', $mediatreffer[1]); if (trim($media) == '') { $media = 'all'; } } else { $media = 'all'; } // Get relation if (preg_match('/rel=[\'"]*([^\'"]+)[\'"]*/ims', $treffer[0][$i], $reltreffer)) { $rel = $reltreffer[1]; } else { $rel = 'stylesheet'; } // Convert file's URI into an absolute local path $filename = preg_replace('/^http:\\/\\/[^\\/]+/', rtrim($_SERVER['DOCUMENT_ROOT'], '/'), $treffer[1][$i]); // Remove any parameters from file's URI $filename = preg_replace('/\\?.*$/', '', $filename); // If file exists if (file_exists($filename)) { // If its a normal CSS-file if (substr($filename, strlen($filename) - 4, 4) == '.css' && file_exists($filename)) { // Put file-reference inside a comment $out = str_replace($treffer[0][$i], '<!-- Processed by Booster ' . $treffer[0][$i] . ' -->', $out); // Calculate relative path from Booster to file $booster_to_file_path = $booster->getpath(str_replace('\\', '/', dirname($filename)), str_replace('\\', '/', dirname(__FILE__))); $filename = $booster_to_file_path . '/' . basename($filename); // Create sub-arrays if not yet there if (!isset($css_rel_files[$media])) { $css_rel_files[$media] = array(); } if (!isset($css_abs_files[$media])) { $css_abs_files[$media] = array(); } if (!isset($css_rel_files[$media][$rel])) { $css_rel_files[$media][$rel] = array(); } if (!isset($css_abs_files[$media][$rel])) { $css_abs_files[$media][$rel] = array(); } // Enqueue file to respective array array_push($css_rel_files[$media][$rel], $filename); array_push($css_abs_files[$media][$rel], rtrim(str_replace('\\', '/', dirname(realpath(ABSPATH))), '/') . '/' . $root_to_booster_path . '/' . $filename); } else { $out = str_replace($treffer[0][$i], $treffer[0][$i] . '<!-- Booster skipped ' . $filename . ' -->', $out); } } else { $out = str_replace($treffer[0][$i], $treffer[0][$i] . '<!-- Booster had a problems finding ' . $filename . ' -->', $out); } } // Creating Booster markup for each media and relation seperately reset($css_rel_files); for ($i = 0; $i < count($css_rel_files); $i++) { $media_rel = $css_rel_files[key($css_rel_files)]; $media_abs = $css_abs_files[key($css_rel_files)]; reset($media_rel); for ($j = 0; $j < count($media_rel); $j++) { $booster->getfilestime($media_rel[key($media_rel)], 'css'); $media_rel[key($media_rel)] = implode(',', $media_rel[key($media_rel)]); $media_abs[key($media_rel)] = implode(',', $media_abs[key($media_rel)]); $link = '<link type="text/css" rel="' . key($media_rel) . '" media="' . key($css_rel_files) . '" href="' . get_option('siteurl') . '/wp-content/plugins/' . $booster_folder . '/booster_css.php/dir=' . htmlentities(str_replace('..', '%3E', $media_rel[key($media_rel)])) . '&cachedir=' . htmlentities(str_replace('..', '%3E', $booster_cache_reldir), ENT_QUOTES) . ($booster->debug ? '&debug=1' : '') . ($booster->librarydebug ? '&librarydebug=1' : '') . '&nocache=' . $booster->filestime . '" />'; if (key($css_rel_files) != 'print') { $booster_out .= $link . "\r\n"; } else { $booster_out .= '<noscript>' . $link . '</noscript>' . "\r\n"; $js_plain .= 'jQuery(document).ready(function () { jQuery("head").append("' . addslashes($link) . '"); }); '; } $booster_out .= "\r\n"; #$booster_out .= "\r\n<!-- ".$media_abs[key($media_rel)]." -->\r\n"; next($media_rel); } next($css_rel_files); } // Injecting the result $out = str_replace('</title>', "</title>\r\n<meta name=\"booster_cache_dir\" content=\"" . BOOSTER_CACHE_DIR . "\" />\r\n" . $booster_out, $out); $booster_out = ''; // JS-part $js_rel_files = array(); $js_abs_files = array(); preg_match_all('/<script[^>]*>(.*?)<\\/script>/ims', $headtreffer[0][0], $treffer, PREG_PATTERN_ORDER); for ($i = 0; $i < count($treffer[0]); $i++) { if (preg_match('/<script.*?src=[\'"]*([^\'"]+\\.js)[\'"]*.*?<\\/script>/ims', $treffer[0][$i], $srctreffer)) { // Get Domainname if (isset($_SERVER['SCRIPT_URI'])) { $host = parse_url($_SERVER['SCRIPT_URI'], PHP_URL_HOST); } else { $host = $_SERVER['HTTP_HOST']; } // Convert siteurl into a regex-safe expression $host = str_replace(array('/', '.'), array('\\/', '\\.'), $host); // Convert file's URI into an absolute local path $filename = preg_replace('/^http:\\/\\/' . $host . '[^\\/]*/', rtrim($_SERVER['DOCUMENT_ROOT'], '/'), $srctreffer[1]); // If file is external if (substr($filename, 0, 7) == 'http://') { $buffered_filename = $booster_cache_dir . '/' . md5($filename) . '_buffered.js'; $parsed_url = parse_url($filename); if (!file_exists($buffered_filename) || filemtime($buffered_filename) < time() - 1 * 24 * 60 * 60) { $host = $parsed_url['host']; $service_uri = $parsed_url['path']; $vars = $parsed_url['query']; // Compose HTTP request header $header = "Host: {$host}\r\n"; $header .= "User-Agent: CSS-JS-Booster\r\n"; $header .= "Connection: close\r\n\r\n"; $fp = fsockopen($host, 80, $errno, $errstr); if ($fp) { $body = ''; fputs($fp, "GET {$service_uri}?{$vars} HTTP/1.0\r\n"); fputs($fp, $header . $vars); while (!feof($fp)) { $body .= fgets($fp, 65000); } fclose($fp); $body = preg_replace('/HTTP.+[\\r\\n]{1}[\\r\\n]{1}/ims', '', $body); @file_put_contents($buffered_filename, $body); @chmod($filename, 0777); // Put file-reference inside a comment $out = str_replace($srctreffer[0], '<!-- Processed by Booster ' . $srctreffer[0] . ' -->', $out); // Enqueue file to array $booster_to_file_path = $booster->getpath(str_replace('\\', '/', dirname($buffered_filename)), str_replace('\\', '/', dirname(__FILE__))); array_push($js_rel_files, $booster_cache_reldir . '/' . md5($filename) . '_buffered.js'); array_push($js_abs_files, rtrim(str_replace('\\', '/', dirname(realpath(ABSPATH))), '/') . '/' . $buffered_filename); } else { $out = str_replace($srctreffer[0], $srctreffer[0] . '<!-- Booster had a problems retrieving ' . $filename . ' -->', $out); } } else { // Put file-reference inside a comment $out = str_replace($srctreffer[0], '<!-- Processed by Booster ' . $srctreffer[0] . ' -->', $out); // Enqueue file to array $booster_to_file_path = $booster->getpath(str_replace('\\', '/', dirname($buffered_filename)), str_replace('\\', '/', dirname(__FILE__))); array_push($js_rel_files, $booster_cache_reldir . '/' . md5($filename) . '_buffered.js'); array_push($js_abs_files, rtrim(str_replace('\\', '/', dirname(realpath(ABSPATH))), '/') . '/' . $buffered_filename); } } elseif (file_exists($filename)) { // If its a normal JavaScript-file if (substr($filename, strlen($filename) - 3, 3) == '.js') { // Remove any parameters from file's URI $filename = preg_replace('/\\?.*$/', '', $filename); // Put file-reference inside a comment $out = str_replace($srctreffer[0], '<!-- Processed by Booster ' . $srctreffer[0] . ' -->', $out); // Calculate relative path from Booster to file $booster_to_file_path = $booster->getpath(str_replace('\\', '/', dirname($filename)), str_replace('\\', '/', dirname(__FILE__))); $filename = $booster_to_file_path . '/' . basename($filename); // Enqueue file to array array_push($js_rel_files, $filename); array_push($js_abs_files, rtrim(str_replace('\\', '/', dirname(realpath(ABSPATH))), '/') . '/' . $root_to_booster_path . '/' . $filename); } else { $out = str_replace($srctreffer[0], $srctreffer[0] . '<!-- Booster skipped ' . $filename . ' -->', $out); } } else { $out = str_replace($srctreffer[0], $srctreffer[0] . '<!-- Booster had a problems finding ' . $filename . ' -->', $out); } } else { // Save plain JS to file to keep everything in line $filename = $booster_cache_dir . '/' . md5($treffer[1][$i]) . '_plain.js'; if (!file_exists($filename)) { @file_put_contents($filename, $treffer[1][$i]); } @chmod($filename, 0777); // Enqueue file to array $booster_to_file_path = $booster->getpath(str_replace('\\', '/', dirname($filename)), str_replace('\\', '/', dirname(__FILE__))); array_push($js_rel_files, $booster_cache_reldir . '/' . md5($treffer[1][$i]) . '_plain.js'); #array_push($js_rel_files,$booster_cache_reldir.'/'.md5($treffer[1][$i]).'_plain.js'); array_push($js_abs_files, rtrim(str_replace('\\', '/', dirname(realpath(ABSPATH))), '/') . '/' . $filename); //$js_plain .= "try{".$treffer[1][$i]; $out = str_replace($treffer[0][$i], '<!-- ' . $treffer[0][$i] . ' -->', $out); } } // Creating Booster markup $js_rel_files = implode(',', $js_rel_files); $js_abs_files = implode(',', $js_abs_files); $js_plain = preg_replace('/\\/\\*.*?\\*\\//ims', '', $js_plain); $js_plain .= 'try {document.execCommand("BackgroundImageCache", false, true);} catch(err) {} '; $booster_out .= '<script type="text/javascript" src="' . get_option('siteurl') . '/wp-content/plugins/' . $booster_folder . '/booster_js.php/dir=' . htmlentities(str_replace('..', '%3E', $js_rel_files)) . '&cachedir=' . htmlentities(str_replace('..', '%3E', $booster_cache_reldir), ENT_QUOTES) . ($booster->debug ? '&debug=1' : '') . (!$booster->js_minify ? '&js_minify=0' : '') . '&nocache=' . $booster->getfilestime($js_abs_files, 'js') . '"></script> <script type="text/javascript">' . $js_plain . '</script>'; $booster_out .= "\r\n"; #$booster_out .= "\r\n<!-- ".$js_abs_files." -->\r\n"; // Injecting the result $out = str_replace('</head>', $booster_out . '</head>', $out); } } else { $out = str_replace('<body', '<div style="display: block; padding: 1em; background-color: #FFF9D0; color: #912C2C; border: 1px solid #912C2C; font-family: Calibri, \'Lucida Grande\', Arial, Verdana, sans-serif; white-space: pre;">You need to upgrade to PHP 5 or higher to have CSS-JS-Booster work. You currently are running on PHP ' . phpversion() . '</div><body', $out); } // Recreate output buffer ob_end_clean(); if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('ob_gzhandler') && (!ini_get('zlib.output_compression') || intval(ini_get('zlib.output_compression')) <= 0) && !function_exists('wp_cache_ob_callback')) { @ob_start('ob_gzhandler'); } elseif (function_exists('wp_cache_ob_callback')) { @ob_start('wp_cache_ob_callback'); } else { @ob_start(); } // Output page echo $out; } }