| Server IP : 68.178.247.200 / Your IP : 216.73.217.50 Web Server : Apache System : Linux p3plzcpnl489463.prod.phx3.secureserver.net 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64 User : x9dppmxs4rgd ( 8559391) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/x9dppmxs4rgd/www/wp-content/plugins/wp-fastest-cache-premium/pro/library/ |
Upload File : |
<?php
class WpFastestCachePowerfulHtml{
private $html = "";
private $head_html = "";
private $body_html = "";
private $inline_scripts = "";
public function __construct(){}
public function set_html($html){
$this->html = $html;
$this->set_head_html();
$this->set_body_html();
}
public function set_body_html(){
preg_match("/<body(.+)<\/body>/si", $this->html, $out);
if(isset($out[0])){
$this->body_html = $out[0];
}else{
$this->body_html = "";
}
}
public function set_head_html(){
preg_match("/<head(.+)<\/head>/si", $this->html, $out);
$this->head_html = $out[0];
}
public function remove_head_comments(){
$data = $this->head_html;
$comment_list = array();
$comment_start_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(isset($data[$i-3])){
if($data[$i-3].$data[$i-2].$data[$i-1].$data[$i] == "<!--"){
if(!preg_match("/if\s+|endif\s*\]/", substr($data, $i, 17))){
$comment_start_index = $i-3;
}
}
}
if(isset($data[$i-2])){
if($comment_start_index){
if($data[$i-2].$data[$i-1].$data[$i] == "-->"){
array_push($comment_list, array("start" => $comment_start_index, "end" => $i));
$comment_start_index = false;
}
}
}
}
if(!empty($comment_list)){
foreach (array_reverse($comment_list) as $key => $value) {
$data = substr_replace($data, '', $value["start"], ($value["end"] - $value["start"] + 1));
}
$this->html = str_replace($this->head_html, $data, $this->html);
}
// $ini = 0;
// if(function_exists("ini_set") && function_exists("ini_get")){
// $ini = ini_get("pcre.recursion_limit");
// ini_set("pcre.recursion_limit", "2777");
// }
// if($new_head = preg_replace("/<!--((?:(?!-->|endif).)+)-->/si", '', $this->head_html)){
// $this->html = str_replace($this->head_html, $new_head, $this->html);
// }
// if($ini){
// ini_set("pcre.recursion_limit", $ini);
// }
return $this->html;
}
public function minify_html(){
$tmp_html = $this->html;
$tmp_html = $this->eliminate_newline("<div", "</div>", $tmp_html);
$tmp_html = $this->eliminate_newline("<li", "</li>", $tmp_html);
$tmp_html = $this->minify_inline_js($tmp_html);
$tmp_html = $this->minify_inline_css($tmp_html);
$tmp_html = $this->remove_html_comments($tmp_html);
$tag_list = "p|div|span|img|nav|ul|li|header|a|b|i|article|section|footer|style|script|link|meta|body";
$tmp_html = preg_replace_callback("/\<(".$tag_list.")\s+[^\>\<]+\>/i", array($this, "remove_spaces_in_tag"), $tmp_html);
// BECAUSE of JsemÂ<span class="label">
// - need to remove spaces between > <
// - need to remove spaces between <span> Assdfdf </span>
// $tmp_html = preg_replace("/\h*\<(".$tag_list.")\s+([^\>]+)>\h*/i", "<$1 $2>", $tmp_html);
// $tmp_html = preg_replace("/\h*\<\/(".$tag_list.")>\h*/i", "</$1>", $tmp_html);
$tmp_html = preg_replace("/\s*<\/div>\s*/is", "</div>", $tmp_html);
$this->html = $tmp_html;
return $this->html;
}
public function remove_spaces_in_tag($matches){
if(preg_match("/".preg_quote($matches[0], "/")."/i", $this->inline_scripts)){
return $matches[0];
}
// <img id="1" />
$matches[0] = preg_replace("/([\"\'])\s+\/>/", "$1/>", $matches[0]);
// <div id="1">
$matches[0] = preg_replace("/\s+/", " ", $matches[0]);
// <div id="1 ">
$matches[0] = preg_replace("/\s+([\"\'])/", '$1', $matches[0]);
// <div id=" 1">
$matches[0] = preg_replace("/\=([\"\'])\s+/", '=$1', $matches[0]);
// <ul class="">
$matches[0] = preg_replace("/\h*class\=[\"\'][\"\']\h*/", " ", $matches[0]);
// <div style="">
$matches[0] = preg_replace("/\h*style\=[\"\'][\"\']\h*/", " ", $matches[0]);
// <div id="1" >
// <div >
$matches[0] = preg_replace("/\h+\>/", ">", $matches[0]);
return $matches[0];
}
public function eliminate_newline($start_string, $end_string, $tmp_html){
$data = $tmp_html;
$list = array();
$start_index = false;
$end_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(substr($data, $i, strlen($start_string)) == $start_string){
if(!$start_index && !$end_index){
$start_index = $i;
}
}
if($start_index && $i > $start_index){
if(substr($data, $i, strlen($end_string)) == $end_string){
$end_index = $i + strlen($end_string)-1;
$text = substr($data, $start_index, ($end_index-$start_index + 1));
array_push($list, array("start" => $start_index, "end" => $end_index, "text" => $text));
$start_index = false;
$end_index = false;
}
}
}
if(isset($list[0])){
$list = array_reverse($list);
foreach ($list as $key => $value) {
if(preg_match("/(<script|<style|<textarea)/i", $value["text"])){
continue;
}
//var $bodybg=$('<div id="ncf-body-bg"/>').prependTo($body);
if(preg_match("/\)\.prependTo\(/i", $value["text"])){
continue;
}
//<div class="wp_syntax" style="position:relative;">
if(preg_match("/<div\s+class\=\"wp\_syntax\"[^\>]*>/i", $value["text"])){
continue;
}
$value["text"] = preg_replace("/\s+/", " ", ((string)$value["text"]));
$tmp_html = substr_replace($tmp_html, $value["text"], $value["start"], ($value["end"] - $value["start"] + 1));
}
}
return $tmp_html;
}
public function remove_single_line_comments($html){
$html = preg_replace("/<!--((?:(?!-->).)+)-->/", '', $html);
$html = preg_replace("/\/\*((?:(?!\*\/).)+)\*\//", '', $html);
return $html;
}
public function remove_html_comments($data){
$comment_list = array();
$comment_start_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(isset($data[$i-3])){
if($data[$i-3].$data[$i-2].$data[$i-1].$data[$i] == "<!--"){
if(!preg_match("/if\s+|endif\s*\]/", substr($data, $i, 17))){
$comment_start_index = $i-3;
}
}
}
if(isset($data[$i-2])){
if($comment_start_index){
// if(substr($data, ($i-9 + 1), 9) == "</script>"){
// $comment_start_index = false;
// }
if($data[$i-2].$data[$i-1].$data[$i] == "-->"){
array_push($comment_list, array("start" => $comment_start_index, "end" => $i));
$comment_start_index = false;
}
}
}
}
if(!empty($comment_list)){
foreach (array_reverse($comment_list) as $key => $value) {
if(($value["end"] - $value["start"]) > 4){
$comment_html = substr($data, $value["start"], ($value["end"] - $value["start"] + 1));
if(preg_match("/google\_ad\_slot/i", $comment_html)){
}else{
$data = substr_replace($data, '', $value["start"], ($value["end"] - $value["start"] + 1));
}
}
}
}
return $data;
}
/* CSS Part Start */
public function single_line_css($source){
$source = preg_replace("/\n/", "", $source);
return $source;
}
public function minify_css($source){
$data = $source;
$curl_list = array();
$curl_start_index = false;
$curl_start_count = 0;
$curl_end_count = 0;
for($i = 0; $i < strlen( $data ); $i++) {
if($data[$i] == "{"){
$curl_start_count++;
if(!$curl_start_index){
$curl_start_index = $i;
}
}
if($data[$i] == "}"){
// .icon-basic-printer:before{content:"}";}
if(isset($data[$i+1]) && $data[$i+1] != "'" && $data[$i+1] != '"'){
$curl_end_count++;
}
}
if($curl_start_count && $curl_start_count == $curl_end_count){
array_push($curl_list, array("start" => $curl_start_index-3, "end" => $i+3));
$curl_start_count = 0;
$curl_end_count = 0;
$curl_start_index = false;
}
}
if(!empty($curl_list)){
foreach (array_reverse($curl_list) as $key => $value) {
$new_data = substr($data, $value["start"], ($value["end"] - $value["start"] + 1));
if(!preg_match("/[^\{]+\{[^\{]+\{/", $new_data)){
$new_data = preg_replace("/\s+/", " ", ((string) $new_data));
$new_data = preg_replace("/\s*{\s*/", "{", $new_data);
$new_data = preg_replace("/\s*}\s*/", "}\n", $new_data);
$new_data = preg_replace("/\s*\;\s*/", ";", $new_data);
$new_data = preg_replace("/\s*\:\s*/", ":", $new_data);
$data = substr_replace($data, $new_data, $value["start"], ($value["end"] - $value["start"] + 1));
}else{
$first = strpos($new_data, "{");
$last = strrpos($new_data, "}");
$new_data_tmp = substr($new_data, $first+1, $last-$first-1);
$new_data_tmp = $this->minify_css($new_data_tmp);
$new_data = substr_replace($new_data, $new_data_tmp, $first+1, ($last-$first-1));
$data = substr_replace($data, $new_data, $value["start"], ($value["end"] - $value["start"] + 1));
}
}
$source = $data;
}
return $source;
//$source = preg_replace_callback("/\s*\{((?:(?!content|\}).)+)\}\s*/", array($this, 'eliminate_newline_for_css'), $source);
//return $source;
}
public function eliminate_newline_for_css($matches){
$matches[0] = preg_replace("/\s+/", " ", ((string) $matches[0]));
$matches[0] = preg_replace("/\s*{\s*/", "{", $matches[0]);
$matches[0] = preg_replace("/\s*}\s*/", "}", $matches[0]);
$matches[0] = preg_replace("/\s*\;\s*/", ";", $matches[0]);
$matches[0] = preg_replace("/\s*\:\s*/", ":", $matches[0]);
return $matches[0]."\n";
}
public function minify_inline_css($data){
$style_list = array();
$style_start_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(isset($data[$i-5])){
if(substr($data, $i-5, 6) == "<style"){
$style_start_index = $i-5;
}
}
if(isset($data[$i-7])){
if($style_start_index){
if(substr($data, $i-7, 8) == "</style>"){
array_push($style_list, array("start" => $style_start_index, "end" => $i));
$style_start_index = false;
}
}
}
}
if(!empty($style_list)){
foreach (array_reverse($style_list) as $key => $value) {
// document.write('<style type="text/css">div{}</style')
$prev_20_chars = substr($data, $value["start"]-20, 20);
if(strpos($prev_20_chars, "document.write") !== false){
continue;
}
$inline_style = substr($data, $value["start"], ($value["end"] - $value["start"] + 1));
if(strlen($inline_style) > 15000){
$part_of_inline_style = substr($inline_style, 0, 15000);
}else{
$part_of_inline_style = $inline_style;
}
if(preg_match("/".preg_quote($part_of_inline_style, "/")."/i", $this->inline_scripts)){
continue;
}
if(preg_match("/<style\s+(amp-boilerplate|amp-custom)>/", $inline_style)){
continue;
}
$inline_style = $this->minify_css($inline_style);
$inline_style = preg_replace("/\/\*(.*?)\*\//s", "\n", $inline_style);
$inline_style = preg_replace("/(<style[^\>]*>)\s+/i", "$1", $inline_style);
$inline_style = preg_replace("/\s+(<\/style[^\>]*>)/i", "$1", $inline_style);
$inline_style = str_replace(' type="text/css"', "", $inline_style);
$inline_style = str_replace(" type='text/css'", "", $inline_style);
$data = substr_replace($data, $inline_style, $value["start"], ($value["end"] - $value["start"] + 1));
}
}
return $data;
}
public function render_blocking($html, $render_blocking_css = false){
include_once WPFC_WP_PLUGIN_DIR."/wp-fastest-cache-premium/pro/library/render-blocking.php";
$render = new WpFastestCacheRenderBlocking($html);
return $render->action($render_blocking_css);
}
public function google_fonts(){
//for checking
}
public function lazy_load($content){
include_once "lazy-load.php";
$lazy = new WpFastestCacheLazyLoad();
$content = $lazy->images_to_lazyload($content, $this->inline_scripts);
$content = $lazy->iframe_to_lazyload($content, $this->inline_scripts);
return $content;
}
/* CSS Part Start */
/* Js Part Start */
public function single_line_js($source){
$source = preg_replace("/\n/", "", $source);
return $source;
}
public function minify_js($source, $inline_js = false){
//$source = preg_replace("/\n\/\/.*/", "", $source);
//$source = preg_replace("/\/\*.*?\*\//s", "", $source);
if(preg_match("/dynamicgoogletags\.update\(\)/i", $source)){
$source = "<script>dynamicgoogletags.update();</script>";
return $source;
}
// <script>
// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
// ga('create', 'UA-9999-9', 'auto');
// ga('send', 'pageview');
// </script>
if(preg_match("/<script[^\>]*>\s*\(function\(i,s,o,g,r,a,m\)\{i\[\'GoogleAnalyticsObject\'\]/i", $source)){
if(preg_match("/ga\(\'send\',\s*\'pageview\'\)\;\s*<\/script>/i", $source)){
$source = preg_replace("/\s+/", " ", ((string) $source));
$source = preg_replace("/\s*<(\/?)script([^\>]*)>\s*/", "<$1script$2>", $source);
return $source;
}
}
// sometimes the lines are ended with "\r" instead of "\n"
$source = str_replace("\r", "\n", $source);
$source = preg_replace("/^\s+/m", "", $source);
if(!$inline_js){
// // --></script> in html
//$source = preg_replace("/\n\/\/[^\n]+/", "", $source); // to remove single line comments
$source = preg_replace_callback("/\n\/\/[^\n]+/", array($this, 'remove_single_line_comments_from_js'), $source);
}
if($inline_js){
if(preg_match("/var\sptsTables/i", $source) && preg_match("/var\sptsBuildConst/i", $source)){
}
//to remove only CDATA from inline js
$source = preg_replace("/\/\*\s*\<\!\[CDATA\[\s*\*\//", "", $source);
$source = preg_replace("/\/\*\s*\]\]\>\s*\*\//", "", $source);
}
$source = preg_replace_callback("/([a-z]{4,5}\:)?\/\/[^\n]*/", array($this, 'remove_single_line_comments_from_js'), $source);
$source = preg_replace("/\}\)\;[^\S\r\n]+/", "});", $source);
$source = preg_replace("/^\s+/m", "", $source);
$source = preg_replace("/\s*(\!|\=)(\={1,3})\s*/", "$1$2", $source);
// to remove spaces at the end of the line
$source = preg_replace("/(\D)[^\S\r\n]+\n/", "$1\n", $source);
$source = preg_replace("/([^\[\.\?])[^\S\r\n]+\:[^\S\r\n]+([^\]\.\?])/", "$1:$2", $source);
$source = preg_replace("/([^\s\|])[^\S\r\n]*\&\&[^\S\r\n]*([^\s\|])/", "$1&&$2", $source);
$source = preg_replace("/([^\s\&])[^\S\r\n]*\|\|[^\S\r\n]*([^\s\&])/", "$1||$2", $source);
// @media all and (width), maybe later we can do preg_replace_callback()
//b.match(/^(<div><br( ?\/), no need to remove the spage between ( and ?
//dashArray.replace(/( *, *)/g, no need to remove the spage between ( and *
$source = preg_replace("/[^\S\r\n]*\([^\S\r\n]+([^\?\*\+])/", "($1", $source);
$source = preg_replace("/and\(/", "and (", $source);
//------
$source = preg_replace("/([^\s\=\!])[^\S\r\n]*\=[^\S\r\n]*([^\s\=\!])/", "$1=$2", $source);
$source = preg_replace("/\)\s+\{/", "){", $source);
// $source = preg_replace("/;\s*}\s*/s", ";}", $source);
$source = preg_replace("/\}\s+}/s", "}}", $source);
$source = preg_replace("/\};\s+}/s", "};}", $source);
$source = preg_replace("/\}\s*else\s*\{/", "}else{", $source);
$source = preg_replace("/\}[^\S\r\n]*else[^\S\r\n]*if[^\S\r\n]*\(/", "}else if(", $source);
$source = preg_replace("/if\s*\(\s*/", "if(", $source);
//$source = preg_replace("/\(\s+/", "(", $source); // causes an issue
$source = preg_replace("/[^\S\r\n]+\)/", ")", $source);
$source = preg_replace("/<script([^\>\<]*)>\s*/i", "<script$1>", $source);
$source = preg_replace("/\s*<\/script>/i", "</script>", $source);
// .name( something)
$source = preg_replace("/(\.[A-Za-z\_]+\()\s{1,2}/", "$1", $source);
// Muli-Line Comments Start
//$source = $this->fix_js_multi_comment_mistakes($source);
//$source = preg_replace_callback("/\n\/\*.+\*\/\n/s", array($this, 'remove_multi_line_comments_from_js'), $source);
$source = preg_replace_callback("/\/\*(.*?)\*\//s", array($this, 'remove_multi_line_comments_from_js'), $source);
// END
$source = str_replace("\xEF\xBB\xBF", '', $source);
$source = preg_replace("/^\s+/m", "", $source);
//<script><!--
//var x=5;
//</script>
if($inline_js){
if(preg_match("/<script[^\>]*><\!--/i", $source)){
if(!preg_match("/-->/i", $source)){
$source = preg_replace("/(<script[^\>]*>)<\!--\n/i", "$1", $source);
}
}
}
return $source;
}
public function fix_js_multi_comment_mistakes($source){
/*-------------------------------------------------------------------------*/
/* 1. Plugin Init --> no end
/*-------------------------------------------------------------------------*/
/*========================= --> no end
/*=========================
WP8 Fix
===========================*/
$source = preg_replace("/(\n\/\*(?:(?!\*\/|\/\*).)+)(\/\*)/s", "$1*/$2", $source);
return $source;
}
public function remove_multi_line_comments_from_js($matches){
// if(preg_match("/^\n/", $matches[0]) && preg_match("/\n$/", $matches[0])){
// if(isset($matches[1]) && $matches[1]){
// if(!preg_match("/\*/", $matches[1])){
// return "\n";
// }
// }
// }
//segs.unshift('//*[@id="' + elm.getAttribute('id') + '"]');
if(preg_match("/\/\*\[\@/", $matches[0])){
return $matches[0];
}
if(preg_match("/\/\*\@cc_on/i", $matches[0])){
return $matches[0];
}
if(preg_match("/\.exec\(|\.test\(|\.match\(|\.search\(|\.replace\(|\.split/", $matches[0])){
return $matches[0];
}
if(preg_match("/function\(/", $matches[0])){
return $matches[0];
}
//c("unmatched `/*`");
if(preg_match("/^\/\*\`\"\)\;/", $matches[0])){
return $matches[0];
}
// <script type='text/javascript'>
// /* <![CDATA[ */
// var icegram_data = {"custom_js":"<script type=\"text\/javascript\">\/* add your js code here *\/ <\/script>"};
// /* ]]> */
// </script>
if(preg_match("/\\/script>/", $matches[0]) && preg_match("/\*\\//", $matches[0])){
return $matches[0];
}
// {comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,lookbehind:!0}}
if(preg_match("/\.\+\)\*\//", $matches[0])){
return $matches[0];
}
// var sourceURL = '\n/*\n//# sourceURL=' + (options.sourceURL || '/lodash/template/source[' + (templateCounter++) + ']') + '\n*/';
if(preg_match("/\/\*\\\\n\/\/\#\s+sourceURL/i", $matches[0])){
return $matches[0];
}
return "";
}
public function remove_single_line_comments_from_js($matches){
if(preg_match("/\n\/\/[^\n]+/", $matches[0])){
// // */
if(preg_match("/\/\/\s*\*\//", $matches[0])){
return $matches[0];
}
return "";
}
// // */
if(preg_match("/\/\/\s*\*\//", $matches[0])){
return $matches[0];
}
// var url = {"name" : "something",
// "url" : '//$1/p/$2/media/?size=l'
// };
if(preg_match("/\'\h*$/", $matches[0])){
if(substr_count($matches[0], "'") == 1){
return $matches[0];
}
}
// ia=/^\.\//;x=Object.prototype;var K=x.toString,
if(preg_match("/^\/\/\;/", $matches[0])){
return $matches[0];
}
// data:audio/wave;base64,/UklGRiYAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQIAAAD//w\x3d\x3d
if(preg_match("/^\/\/w\\\\x3d/", $matches[0])){
return $matches[0];
}
// data:audio/wave;base64,/UklGRiYAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQIAAAD//w==
if(preg_match("/^\/\/w\=\=/", $matches[0])){
return $matches[0];
}
// var a = '<a href="javascript://" id="nextLink" title="' + opts.strings.nextLinkTitle + '"></a>';
if(preg_match("/^cript\:\/\/\"/", $matches[0])){
return $matches[0];
}
// url.replace( /^http:\/\//i, 'https://' );
//domain = domain.replace(new RegExp(/^http\:\/\/|^https\:\/\/|^ftp\:\/\//i),"");
if(preg_match("/^\/\/i(\,|\))/", $matches[0])){
return $matches[0];
}
// {pattern:/\/\*[\*!][\s\S]*?\*\//gm,alias:"co2"}
if(preg_match("/^\/\/gm\,/", $matches[0])){
return $matches[0];
}
// d=b?/[&<>"'\/]/g:/&(?!#?\w+;)|<|>|"|'|\//g;
if(preg_match("/^\/\/g\;/", $matches[0])){
return $matches[0];
}
// replace(/\//g,"")
if(preg_match("/^\/\/g\,\s*[\'\"]/", $matches[0])){
return $matches[0];
}
// match(/^https?:\/\//)
if(preg_match("/^\/\/\)/", $matches[0])){
return $matches[0];
}
//src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
if(preg_match("/^\/\/about\:blank/", $matches[0])){
return $matches[0];
}
//"<img src='http"+(location.href.indexOf('https:')==0?'s://www':'://track')+".websiteceo.com/m/?"+q+"' width='1' height='1' border='0' align='left'>";
if(preg_match("/^\/\/www\'/", $matches[0])){
return $matches[0];
}
// if (URL.match( /^https?:\/\// ) ) {
if(preg_match("/^\/\/\s*\)\s*\)\s*\{/", $matches[0])){
return $matches[0];
}
// "string".replace(/\//,3);
if(preg_match("/^\/\/\s*\,/", $matches[0])){
return $matches[0];
}
// comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,
if(preg_match("/^\/\/\s*gi\s*\,/", $matches[0])){
return $matches[0];
}
// whatsapp://send?text=
// NOTE: preg_match_replace gets only 5 chars so we check "tsapp://" instead of "whatsapp://"
if(preg_match("/^tsapp\:\/\/send/", $matches[0])){
return $matches[0];
}
// rtmp://37.77.2.234:1935/redirect/live.flv
if(preg_match("/^rtmp\:\/\//", $matches[0])){
return $matches[0];
}
// var url = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
if(preg_match("/\/\/\=\]/", $matches[0])){
return $matches[0];
}
if(preg_match("/^maps\:\/\//", $matches[0])){
return $matches[0];
}
// "line://msg/text/" + postTitle + "! " + postUrl
if(preg_match("/^line\:\/\//", $matches[0])){
return $matches[0];
}
// document.write('<script defer src="//:"></script>');
if(preg_match("/^\/\/\:\"/", $matches[0])){
return $matches[0];
}
// url: "//$1/p/$2/media/?size=l"
if(preg_match("/^\/\/\\$/", $matches[0])){
return $matches[0];
}
if(preg_match("/^\/\/\//", $matches[0])){
return $matches[0];
}
if(preg_match("/^http/", $matches[0])){
return $matches[0];
}
// var xxx={"case":"\nhttp://www.google.com"};
if(preg_match("/^nhttp/", $matches[0])){
return $matches[0];
}
// var currUrl = 'file://' + "something";
if(preg_match("/^file\:\/\//i", $matches[0])){
return $matches[0];
}
//<a href="javascript://nop/" class="morelink">
if(preg_match("/cript\:\/\/nop/i", $matches[0])){
return $matches[0];
}
// Flash.RTMP_RE = /^rtmp[set]?:\/\//i;
if(preg_match("/^\/\/i\;/", $matches[0])){
return $matches[0];
}
//segs.unshift('//*[@id="' + elm.getAttribute('id') + '"]');
if(preg_match("/^\/\/\*\[/", $matches[0])){
return $matches[0];
}
// e.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">')
if(preg_match("/^\/\/W3C\/\/DTD\s+XHTML/i", $matches[0])){
return $matches[0];
}
// var sourceURL = '\n/*\n//# sourceURL=' + (options.sourceURL || '/lodash/template/source[' + (templateCounter++) + ']') + '\n*/';
if(preg_match("/^\/\/\#\s+sourceURL/i", $matches[0])){
return $matches[0];
}
if(preg_match("/\.exec\(|\.test\(|\.match\(|\.search\(|\.replace\(|\.split/", $matches[0])){
return $matches[0];
}
if(preg_match("/^\/\/(?!\-)(?:[a-zA-Z\d\-]{0,62}[a-zA-Z\d]\.){1,126}(?!\d+)[a-zA-Z\d]{1,63}/", $matches[0])){
return $matches[0];
}
if(preg_match("/\'|\"/", $matches[0])){
// ' something
if(preg_match("/^\/\/\s*[\'|\"]/", $matches[0])){
return $matches[0];
}
// new Validator.Assert().Regexp('(https?:\\/\\/)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,4}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)', 'i');
if(preg_match("/[\'\"]\,\s*[\'\"]i[\'\"]\)\;/", $matches[0])){
return $matches[0];
}
/*function Uc(a,b){var c=Q&&Q.isAvailable(),d=c&&!(nb.kd||!0===nb.get("previous_websocket_failure"));b.ce&&(c||L("
wss:// URL used, but browser isn't known to support websockets. Trying anyway."),d=!0);if(d)a.Mb=[Q];else{var e=a.Mb=[];Vb(Vc,function(a,b){b&&b.isAvailable()&&e.push(b)})}}function Wc(a){if(0<a.Mb.length)return a.Mb[0];throw Error("No transports available");};function Xc(a,b,c,d,e,f){this.id=a;this.e=Mb("c:"+this.id+":");this.Lc=c;this.Ab=d;this.S=e;this.Kc=f;this.M=b;this.fc=[];this.Zc=0;this.yd=new Tc(b);this.ma=0;this.e("Connection created");Yc(this)}
*/
if(preg_match("/if\(/", $matches[0]) && preg_match("/this\./", $matches[0]) && preg_match("/function/", $matches[0])){
return $matches[0];
}
// <script defer src="//:" id="__onload_ie_pixastic__">\x3c/script>
if(preg_match("/x3c\/script>/i", $matches[0])){
return $matches[0];
}
return "";
}
if(preg_match("/<\/script>/", $matches[0])){
return preg_replace("/\/\/[^\<]+<\/script>/", "</script>", $matches[0]);
}
return "";
}
public function minify_inline_js($data){
$script_list = array();
$script_start_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(isset($data[$i-6])){
if(substr($data, $i-6, 7) == "<script"){
$script_start_index = $i-6;
}
}
if(isset($data[$i-8])){
if($script_start_index){
if(substr($data, $i-8, 9) == "</script>"){
array_push($script_list, array("start" => $script_start_index, "end" => $i));
$script_start_index = false;
}
}
}
}
if(!empty($script_list)){
foreach (array_reverse($script_list) as $key => $value) {
$inline_script = substr($data, $value["start"], ($value["end"] - $value["start"] + 1));
if(preg_match("/google\_ad\_slot/i", $inline_script)){
$this->inline_scripts = $this->inline_scripts.$inline_script;
continue;
}
if(preg_match("/<script[^\>]+src=[\'\"][^\>]+>/i", $inline_script)){
continue;
}
if(preg_match("/<script[^\>]+text\/template[^\>]+>/i", $inline_script)){
continue;
}
$this->inline_scripts = $this->inline_scripts.$inline_script;
$inline_script = $this->minify_js($inline_script, true);
$inline_script = str_replace(' type="text/javascript"', "", $inline_script);
$inline_script = str_replace(" type='text/javascript'", "", $inline_script);
$this->inline_scripts = $this->inline_scripts.$inline_script;
$data = substr_replace($data, $inline_script, $value["start"], ($value["end"] - $value["start"] + 1));
}
}
return $data;
}
public function minify_js_in_body($wpfc, $exclude_rules = false){
$data = $this->html;
$script_list = array();
$script_start_index = false;
for($i = 0; $i < strlen( $data ); $i++) {
if(isset($data[$i-6])){
if(substr($data, $i-6, 7) == "<script"){
$script_start_index = $i-6;
}
}
if(isset($data[$i-8])){
if($script_start_index){
if(substr($data, $i-8, 9) == "</script>"){
array_push($script_list, array("start" => $script_start_index, "end" => $i));
$script_start_index = false;
}
}
}
}
if(!empty($script_list)){
foreach (array_reverse($script_list) as $key => $value) {
$script_tag = substr($data, $value["start"], ($value["end"] - $value["start"] + 1));
if(preg_match("/^<script[^\>\<]+src\=[^\>\<]+>/i", $script_tag) && !preg_match("/\/wpfc\-minified\//i", $script_tag)){
preg_match("/src\=[\"\']([^\'\"]+)[\"\']/i", $script_tag, $src);
$http_host = str_replace(array("http://", "www."), "", $_SERVER["HTTP_HOST"]);
if(preg_match("/".preg_quote($http_host, "/")."/i", $src[1])){
if($exclude_rules){
$is_excluded = false;
foreach((array)$exclude_rules as $exclude_key => $exclude_value){
if(isset($exclude_value->prefix) && $exclude_value->prefix && $exclude_value->type == "js"){
if($exclude_value->prefix == "contain"){
$preg_match_rule = preg_quote($exclude_value->content, "/");
}
if(preg_match("/".$preg_match_rule."/i", $src[1])){
$is_excluded = true;
break;
}
}
}
if($is_excluded){
continue;
}
}
if(preg_match("/alexa\.com\/site\_stats/i", $src[1])){
continue;
}
if(preg_match("/wp-spamshield\/js\/jscripts\.php/i", $src[1])){
continue;
}
//amazonjs/components/js/jquery-tmpl/jquery.tmpl.min.js?ver=1.0.0pre
if(preg_match("/jquery-tmpl\/jquery\.tmpl\.min\.js/i", $src[1])){
continue;
}
//<script src="https://server1.opentracker.net/?site=www.site.com"></script>
if(preg_match("/[\?\=].*".preg_quote($http_host, "/")."/i", $src[1])){
continue;
}
$cachFilePath = WPFC_WP_CONTENT_DIR."/cache/wpfc-minified/".md5($script_tag);
if(!defined('WPFC_WP_CONTENT_URL')){
$jsScript = content_url()."/cache/wpfc-minified/".md5($script_tag);
}else{
$jsScript = WPFC_WP_CONTENT_URL."/cache/wpfc-minified/".md5($script_tag);
}
$jsScript = str_replace(array("http://", "https://"), "//", $jsScript);
$response = wp_remote_get($this->fix_protocol($src[1]), array('timeout' => 10 ) );
if ( !$response || is_wp_error( $response ) ) {
continue;
}else{
if(wp_remote_retrieve_response_code($response) == 200){
$js_content = wp_remote_retrieve_body( $response );
if(preg_match("/<\/\s*html\s*>\s*$/i", $js_content)){
continue;
}else{
$minified_js_content = $this->minify_js($js_content);
if(!is_dir($cachFilePath)){
$prefix = time();
$wpfc->createFolder($cachFilePath, $minified_js_content, "js", $prefix);
}
if($jsFiles = @scandir($cachFilePath, 1)){
$new_script = str_replace($src[1], $jsScript."/".$jsFiles[0], $script_tag);
$this->html = substr_replace($this->html, $new_script, $value["start"], ($value["end"] - $value["start"] + 1));
}
}
}
}
}
}
}
}
return $this->html;
}
public function combine_js_in_footer($content, $minify = false){
$footer = strstr($this->html, '<!--WPFC_FOOTER_START-->');
$js = new JsUtilities($content, $footer, $minify);
$tmp_footer = $js->combine_js();
if(isset($GLOBALS["wp_fastest_cache_options"]->wpFastestCacheRenderBlocking)){
if(class_exists("WpFastestCacheRenderBlocking")){
$render = new WpFastestCacheRenderBlocking($tmp_footer);
$tmp_footer = $render->action(false, true);
}
}
$this->html = str_replace($footer, $tmp_footer, $this->html);
return $this->html;
}
/* Js Part End */
public function fix_protocol($url){
if(preg_match("/^\/\//", $url)){
if(preg_match("/^https:\/\//", home_url())){
return "https:".$url;
}else{
return "http:".$url;
}
}
return $url;
}
}
?>