$text, 'output_info' => 'compiled_code',//($returnErrors ? 'errors' : 'compiled_code'), 'output_format' => 'text', 'compilation_level' => 'SIMPLE_OPTIMIZATIONS',//'ADVANCED_OPTIMIZATIONS',//'SIMPLE_OPTIMIZATIONS' ), null, '&'); $URL = 'http://closure-compiler.appspot.com/compile'; $allowUrlFopen = preg_match('/1|yes|on|true/i', ini_get('allow_url_fopen')); if($allowUrlFopen){ $contents = file_get_contents($URL, false, stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $post_text, 'max_redirects' => 0, 'timeout' => 15, ) ))); }elseif(defined('CURLOPT_POST')) { $ch = curl_init($URL); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/x-www-form-urlencoded')); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_text); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); $contents = curl_exec($ch); curl_close($ch); } else { //"Could not make HTTP request: allow_url_open is false and cURL not available" $contents = $text; } if($contents==false || (trim($contents)=='' && $text!='') || strtolower(substr(trim($contents),0,5))=='error' || strlen($contents)<=50){ //No HTTP response from server or empty response or error $contents = $text; } } if(trim($contents)!=''){ $contents = trim($contents); $f = fopen($file_cache, 'w'); fwrite($f, $contents); fclose($f); } } else { touch($file_cache); //in the future I will add a timetout to the cache $contents = file_get_contents($file_cache); } return $contents; } static function minify_html($text){ if(isset($_GET['no_mini'])){ return $text; } $file_cache = strtolower(md5($text)); $folder = TMPPATH.'tmp_files'.DIRECTORY_SEPARATOR.substr($file_cache,0,2).DIRECTORY_SEPARATOR; if(!is_dir($folder)) @mkdir($folder, 0766, true); if(!is_dir($folder)){ echo 'Impossible to create the cache folder:'.$folder; return 1; } $file_cache = $folder.$file_cache.'_content.html'; if(!file_exists($file_cache)){ //get CSS and save it $search_css = '/<\s*style\b[^>]*>(.*?)<\s*\/style>/is'; $ret = preg_match_all($search_css, $text, $tmps); $t_css = array(); if($ret!==false && $ret>0){ foreach($tmps as $k=>$v){ if($k>0){ foreach($v as $kk=>$vv){ $t_css[] = $vv; } } } } $css = format::minify_css(implode('\n', $t_css)); /* //get external JS and save it $search_js_ext = '/<\s*script\b.*?src=\s*[\'|"]([^\'|"]*)[^>]*>\s*<\s*\/script>/i'; $ret = preg_match_all($search_js_ext, $text, $tmps); $t_js = array(); if($ret!==false && $ret>0){ foreach($tmps as $k=>$v){ if($k>0){ foreach($v as $kk=>$vv){ $t_js[] = $vv; } } } } $js_ext = $t_js; */ //get inline JS and save it $search_js_ext = '/<\s*script\b.*?src=\s*[\'|"]([^\'|"]*)[^>]*>\s*<\s*\/script>/i'; $search_js = '/<\s*script\b[^>]*>(.*?)<\s*\/script>/is'; $ret = preg_match_all($search_js, $text, $tmps); $t_js = array(); $js_ext = array(); if($ret!==false && $ret>0){ foreach($tmps as $k=>$v){ if($k==0){ //let's check if we have a souce (src="") foreach($v as $kk=>$vv){ if($vv!=''){ $ret = preg_match_all($search_js_ext, $vv, $ttmps); if($ret!==false && $ret>0){ foreach($ttmps[1] as $kkk=>$vvv){ $js_ext[] = $vvv; } } } } } else { foreach($v as $kk=>$vv){ if($vv!=''){ $t_js[] = $vv; } } } } } $js = format::minify_js(implode('\n', $t_js)); //get inline noscript and save it $search_no_js = '/<\s*noscript\b[^>]*>(.*?)<\s*\/noscript>/is'; $ret = preg_match_all($search_no_js, $text, $tmps); $t_js = array(); if($ret!==false && $ret>0){ foreach($tmps as $k=>$v){ if($k>0){ foreach($v as $kk=>$vv){ $t_js[] = $vv; } } } } $no_js = implode('\n', $t_js); //remove CSS and JS $search = array( $search_js_ext, $search_css, $search_js, $search_no_js, '/\>[^\S ]+/s', //strip whitespaces after tags, except space '/[^\S ]+\', '<', '\\1', ); $buffer = preg_replace($search, $replace, $text); $append = ''; //add CSS and JS at the bottom if(is_array($js_ext) && count($js_ext)>0){ foreach($js_ext as $k=>$v){ $append .= ''; } } if($css!='') $append .= ''; if($js!=''){ //remove weird '\n' strings $js = preg_replace('/[\s]*\\\n/', "\n", $js); $append .= ''; } if($no_js!='') $append .= ''; $buffer = preg_replace('/(.*)(<\s*\/\s*body\s*>)(.*)/','\\1'.$append.'\\2\\3', $buffer); if(trim($buffer)!=''){ $f = fopen($file_cache, 'w'); fwrite($f, trim($buffer)); fclose($f); } } else { touch($file_cache); //in the future I will add a timetout to the cache $buffer = file_get_contents($file_cache); } return $buffer; } } ?>