array( 'timeout'=>3, ) ); $context = stream_context_create($opts); return @file_get_contents($url, false, $context);//尝试访问文件,无法访问则不存在 } function download_file($url,$file,$type,$type_sub){ global $link; ob_start(); $result_download=system('python download.py --url "'.$url.'" --file "'.$file.'" --type "'.$type.'" --type_sub "'.$type_sub.'"'); ob_clean(); //echo $result_download; //echo 'python download.py --url "'.$url.'" --file "'.$file.'" --type "'.$type.'" --type_sub "'.$type_sub.'"'; mysqli_query($link,$result_download); //使用Python下载,避开了PHP下载文件的不稳定劣势 } function get_main_domain($file){ //使用正则表达式筛选信息 $str=preg_replace('/^[^\/]*\//is','',$file); $str2=str_replace('/'.$str,'',$file); return $str2; } function get_sub_domain($file){ //使用正则表达式筛选信息 $str=preg_replace('/^[^\/]*\//is','',$file); $str2=preg_replace('/^[^\/]*\//is','',$str); $str3=str_replace('/'.$str2,'',$str); return $str3; } function get_file_path($file){ //使用正则表达式筛选信息 $str=preg_replace('/^[^\/]*\//is','',$file); $str2=preg_replace('/^[^\/]*\//is','',$str); return $str2; } function get_online_url($file){ //字符串拼接用函数 global $type; global $id; if(strstr($file,"maven")){ $str="https://bmclapi2.bangbang93.com/".$file; }elseif(strstr($file,"forge/")){ $str="https://bmclapi2.bangbang93.com/".$file; }elseif(strstr($file,"optifine/")){ $str="https://bmclapi2.bangbang93.com/".$file; }elseif(strstr($file,"liteloader/list")){ $str="https://bmclapi2.bangbang93.com/".str_replace('list/','list?',$file); }else{ $str='https://'.get_sub_domain($file).'.'.get_main_domain($file).$type[$id].'/'.get_file_path($file); } return $str; } function get_online_domain($file){ //字符串拼接用函数 global $type; global $id; $str='https://'.get_sub_domain($file).'.'.get_main_domain($file).$type[$id].'/'; return $str; } function output_file($array){ header('Content-type: '.$array['header']); if($array['header']=="application/json"){ //是JSON文件,不强制下载 }else{ //非JSON文件,直接强制下载 header('Content-Disposition: attachment; filename="'.basename($array['file']).'"'); } echo file_get_contents($array['file']); } function check_file_update($file,$url,$time){ global $result; if(is_file('file/'.$file)){//判断本地文件是否存在 $time=time()-@filemtime('file/'.$file); if($time<$time){//检查文件是否超出过期期限 echo file_get_contents('file/'.$file); }else{ if(is_url_exists($url)){//防止源无法访问而损坏文件 if(file_get_contents($url)==@file_get_contents('file/'.$file)){ echo file_get_contents('file/'.$file); }else{ ob_start(); system('python download.py --url "'.$url.'" --file "'.$file.'" --type "pass" --type_sub "pass"'); ob_clean(); echo file_get_contents('file/'.$file); } }else{ echo file_get_contents('file/'.$file); } } }else{ ob_start(); system('python download.py --url "'.$url.'" --file "'.$file.'" --type "pass" --type_sub "pass"'); ob_clean(); echo file_get_contents('file/'.$file); } } function is_server_alive($file){ global $type; global $id; $url='https://'.get_sub_domain($file).'.'.get_main_domain($file).$type[$id]; $opts = array( 'http'=>array( 'timeout'=>3, ) ); $context = stream_context_create($opts); return @file_get_contents($url, false, $context);//尝试访问文件,无法访问则不存在 } if(strstr($_GET['path'],'?')!=False){//判断有无特殊字符 $get_path=str_replace('?','/',$_GET['path']); }else{ $get_path=$_GET['path']; } if(get_main_domain($get_path)=='mojang'){//分配顶级域名尾 $id=0; }elseif(get_main_domain($get_path)=='fabricmc'){ $id=1; }elseif(get_main_domain($get_path)=='liteloader'){ $id=2; }elseif(get_main_domain($get_path)=='yushi'){ $id=3; }elseif(get_main_domain($get_path)=='minecraft'){ $id=4; } if($_GET['error']!=""){ header('Content-type: application/json'); echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":'.$_GET['error'].',"server_time":'.time().',"server_id":'.$server_id.'}'; }elseif($get_path==""){ header('Content-type: application/json'); echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":200,"server_time":'.time().',"server_id":'.$server_id.'}'; }else{ $link=mysqli_connect("localhost","gemcapi","ghink2014","gemcapi"); $result=mysqli_query($link,"SELECT * FROM `common` WHERE `path` = '".$get_path."';"); $result=mysqli_fetch_array($result); if(in_array($get_path,$active)){ //需要保持最新的文件,不进行数据库操作 if(strstr($get_path,'mojang/')!=False){//目录分组 if(strstr($get_path,'mojang/launchermeta/')!=False){ header('Content-type: application/json'); check_file_update('mojang/launchermeta/mc/game/version_manifest.json','https://launchermeta.mojang.com/mc/game/version_manifest.json','http://launchermeta.mojang.com',86400); } }elseif(strstr($get_path,'forge/')!=False){//目录分组 if(strstr($get_path,'forge/last')!=False){ header('Content-type: application/json'); check_file_update('forge/last/index.json','https://download.mcbbs.net/forge/last','https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar',86400); }elseif(strstr($get_path,'forge/minecraft')!=False){ header('Content-type: application/json'); check_file_update('forge/minecraft/index.json','https://download.mcbbs.net/forge/minecraft','https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar',86400); } }elseif(strstr($get_path,'optifine/')!=False){//目录分组 if(strstr($get_path,'optifine/versionlist')!=False){ header('Content-type: application/json'); check_file_update('optifine/versionlist/index.json','https://download.mcbbs.net/optifine/versionlist','https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar',86400); } }elseif(strstr($get_path,'liteloader/')!=False){//目录分组 if(strstr($get_path,'liteloader/dl/versions')!=False){ header('Content-type: application/json'); check_file_update('liteloader/dl/versions/versions.json','http://dl.liteloader.com/versions/versions.json','http://dl.liteloader.com/versions/versions.json',86400); } } }else{ if(strstr($get_path,'forge/list')!=False){//其他特殊同步文件 check_file_update($get_path.'/index.json','https://bmclapi2.bangbang93.com/'.$get_path,'https://bmclapi2.bangbang93.com/forge/list/1',86400); }elseif(empty($result)){//普通文件 //数据库中没有记录该文件 download_file(get_online_url($get_path),$get_path,get_main_domain($get_path),'common'); header("refresh: 0"); }else{ //数据库中记录了该文件 if(is_file($result['file'])){//判断本地文件是否存在 //文件存在 output_file($result); }else{ //文件不存在 mysqli_query($link,"DELETE FROM `common` WHERE `path`='".$get_path."'"); header("refresh: 0"); } } } }