fix bug

内网穿透(cpolar)的映射 :当你通过 cpolar 域名外网访问时,请求到达你本机的 Apache 时,如果 Apache 的虚拟主机配置(如 ServerName / ServerAlias)默认匹配了本地环境,或者反向代理透传了本地 Host,它依然可能表现为本地地址。

$_SERVER'REMOTE_ADDR'也永远指向127.0.0.1

php 复制代码
<?php
    include_once './php/drive/mailkit.php';
    
    //切换回部署环境
    ini_set('display_errors','On');
    error_reporting(E_ALL); // ★ 必须开到 ALL,否则被屏蔽的错误变不成异常

    ob_start(); // 开启输出缓冲

    session_start();

    header('Accept:application/json;Content-Type:application/json;charset=utf-8');

    try
    {
        include_once './php/drive/dynamicDomianSelect.php';
        include_once './php/drive/cpolar_tunels.php';
        include_once './php/drive/PrivateIpv4.php';
        include_once './php/datamodel/globalVariable.php';
        //include_once './php/drive/utility.php';

        if($_SERVER['HTTP_HOST']=='localhost' || $_SERVER['HTTP_HOST']=='127.0.0.1')
        {
            $ip = gethostbyname($_SERVER['HTTP_HOST']);
        }
        else
        {
            $ip = $_SERVER['HTTP_HOST'];
        }
        if(isPrivateIp($ip)==true)
        {
            $newdomian='http://'.$_SERVER['HTTP_HOST'];
        }
        else
        {
            //不定时检查更新cpolar域名
            if(mt_getrandmax()%3<=2)
            {   //控制概率不定时更新cpolar动态域名

                //$cpolarInfo = DynamicCpolar::getCpolarInfo();  //这里会拖慢所读,还可能报错500
                $newurl = DynamicCpolar::getCpolarURL();
                $domains[1] = $newurl;
            }
            else
            {
                $cpolarInfo = DynamicCpolar::getCpolarInfoWithCache($cacheCpolarInfoV3);//优化,减少数据请求
                foreach ($cpolarInfo['items'] as $item) 
                {
                    if($item['name']=='Apache'){
                        $domains[1]=$item['pubulic_url'];
                        $_SESSION['global_domains'] = $domains;
                    }
                }
            }


            $_SESSION['global_domains'] = $domains;
            //$selectDomain->updateCpolarDomain($domains[1],$hsk->FlowUsage());//全局变量
            $selectDomainV4->updateCpolarDomain($domains[1]);//全局变量
            $selectDomainV4->varchangeFactor($hsk->distillHskFlow(),DynamicCpolar::getCpolarCreatedatetime());//全局变量$hsk

            //$newdomian=DynamicSelect($domains); //选域名
            //$newdomian = $selectDomain->DynamicSelect(); //选域名
            $newdomian = $selectDomainV4->DynamicSelectV4(); //选域名

            //setcookie("global_domains", json_encode($domains), 0, "/");
            setcookie("global_domains", urldecode(json_encode($domains,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)), 0, "/");
            //setcookie("global_domains", pretty_decode_mess(json_encode($domains,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)), 0, "/");

            // 设置对应的 CORS 头
            {
                header("Access-Control-Allow-Origin: $newdomian"); // 动态设置允许的域名,只允许设置一个域名
                header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
                header("Access-Control-Allow-Headers: Content-Type, Authorization");
                header("Access-Control-Allow-Credentials: true"); // 如果需要传递 cookie,必须为 true
            }
        }

        //路由分发
        if(isset($_GET['redirectTo']) ) {
            $newlocation='location:'.$newdomian.$_GET['redirectTo'];
        }
        else
        {
            $newlocation='location:'.$newdomian.'/html/Welcome.html.php';
        }
        

        // 确保在设置 Cookie 后立即重定向,且没有其他输出
        //header('location: ./html/Welcome.html');
        header($newlocation);
        ob_end_flush(); // 发送缓冲区内容并关闭缓冲
        exit; // 确保脚本终止,避免后续输出破坏头部
    }
    catch(Throwable $err)
    {
        error_log(sprintf(
            "[CPOLAR FATAL] %s (%d) in %s\n%s",
            $err->getMessage(),
            $err->getCode(),
            $err->getFile(),
            $err->getTraceAsString()
        ));

        //发送邮件,报错
        $send=new sendmail();
        $send->To='Rise8888@outlook.com';
        $send->Subject="[PHP] index.php 发生异常";
        $send->Body=$err->getMessage().$err->getCode().$err->getFile().$err->getTraceAsString();
        $send->proxySend();
        //跳到欢迎页面
        header('location: ./html/Welcome.html.php');
    }

?>
相关推荐
拖累斯3 天前
Jenkins + Python 全自动跑通「禅道任务/BUG 导出 → 月度开发考核表」
python·jenkins·bug
寂寞的船3 天前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
unity工具人4 天前
unity 照片墙插件(Pop-up Photo Wall)在触摸屏和红外框设备上的触发Bug
bug
灼行6 天前
Autosar SecOC 需求场景BUG(需求不一致性)【草稿】
bug
小豆庄9 天前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11
sg_knight10 天前
Bug 定位实战:把报错丢给 Codex,它是怎么修的
chatgpt·llm·bug·openai·agent·ai编程·codex
8年车载测试11 天前
汽车五大域详解:动力、底盘、车身、座舱与智驾域
汽车·bug·jira·uds诊断·ecu刷写测试·canoe工具
ะัี潪ิื14 天前
Redisson Bug回顾
bug
猫咪很可爱15 天前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell