This repository has been archived on 2022-12-28. You can view files and clone it, but cannot push or open issues or pull requests.
gemcapi/index.php
Bigsk 8adccda6c6 全新更新
仿CDN模式更新
2020-08-09 22:08:44 +08:00

111 lines
4.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
$active=array('mojang/launchermeta/mc/game/version_manifest.json');
$type=array('.com');
//[0]:mojang
function url_exists($url) {
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($http_code == 200) {
return true;
}
return false;
}
function url_exists_2($url){
$opts = array(
'http'=>array(
'timeout'=>3,
)
);
$context = stream_context_create($opts);
return @file_get_contents($url, false, $context);
}
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,$id){
global $type;
$str='http://'.get_sub_domain($file).'.'.get_main_domain($file).$type[$id].'/'.get_file_path($file);
return $str;
}
function check_file_update($file,$dir,$url){
$time=time()-filemtime($file);
if($time<86400){//检查文件是否超出过期期限1天86400秒
echo file_get_contents($file);
}else{
if(url_exists($url.'/'.str_replace($dir,'',$file))){//防止源无法访问而损坏文件
if(file_get_contents($url.'/'.str_replace($dir,'',$file))==file_get_contents($file)){
echo file_get_contents($file);
}else{
echo file_get_contents($url.'/'.str_replace($dir,'',$file));
$jsonwrite = fopen($file, "w") or die('{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":502,"server_time":"'.date("Y-m-d h:i:s").'"}');
fwrite($jsonwrite,file_get_contents($url.'/'.str_replace($dir,'',$file)));
fclose($jsonwrite);
}
}else{
echo file_get_contents($file);
}
}
}
function download_file($url,$file,$other){//下载文件
system('python download.py --url "'.$url.'" --file "'.$file.'" --other "'.$other.'"');
}
if($_GET['error']!=""){
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":'.$_GET['error'].',"server_time":"'.date("Y-m-d h:i:s").'"}';
}elseif($_GET['path']==""){
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":200,"server_time":"'.date("Y-m-d h:i:s").'"}';
}else{
if(is_file($_GET['path'])){
//文件存在
if(in_array($_GET['path'],$active)){//判断是否为需要保持最新的文件
if(strstr($_GET['path'],'mojang/')!=False){//目录分组
if(strstr($_GET['path'],'mojang/launchermeta/')!=False){
$dir='mojang/launchermeta/';
check_file_update('mojang/launchermeta/mc/game/version_manifest.json',$dir,'http://launchermeta.mojang.com');
}
}
}else{//无需更新的文件,直接重定向
header('Location: http://1.gemcapi.ghink.net:10000/'.$_GET['path']);
}
}elseif(is_dir($_GET['path'])){
//目录存在
header('Location: http://1.gemcapi.ghink.net:10000/'.$_GET['path']);
}else{
//目录或文件不存在
if(strstr($_GET['path'],'forge/')!=False){//特殊Forge采用二级源
if(url_exists_2('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')){
download_file('https://download.mcbbs.net/'.$_GET['path'],$_GET['path'],'');
header('Location: http://1.gemcapi.ghink.net:10000/'.$_GET['path']);
}else{
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":404,"server_time":"'.date("Y-m-d h:i:s").'"}';
}
}else{
if(get_main_domain($_GET['path'])=='mojang'){//分配顶级域名尾
$id=0;
}
if(url_exists(get_online_url($_GET['path'],$id))){
download_file(get_online_url($_GET['path'],$id),$_GET['path'],'');
header('Location: http://1.gemcapi.ghink.net:10000/'.$_GET['path']);
}else{
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":404,"server_time":"'.date("Y-m-d h:i:s").'"}';
}
}
}
}