PHP根据真实客户端IP+微秒时间戳+随机数生成分布式日志id

function getRealIp()
{
    $ip=FALSE;
    //客户端IP 或 NONE 
    if(!empty($_SERVER["HTTP_CLIENT_IP"])){
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    }
    //多重代理服务器下的客户端真实IP地址(可能伪造),如果没有使用代理,此字段为空
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
        if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
        for ($i = 0; $i < count($ips); $i++) {
            if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
                $ip = $ips[$i];
                break;
            }
        }
    }
    //客户端IP 或 (最后一个)代理服务器 IP 
    return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);

}

function getLogId()
{
    $ip = getRealIp();
    $ipNum = intval( implode("", explode('.', $ip)) );
    $timestamp = explode(' ', microtime());
    $sectionOne = sprintf('%04d', $timestamp[1] % 3600);
    $sectionTwo = sprintf('%04d', intval(($timestamp[0] * 1000000) % 1000));
    $sectionThree = sprintf('%04d', mt_rand(0, 987654321) % 1000);
    $sectionFour = sprintf('%04d', crc32($ipNum * (mt_rand(0, 987654321) % 1000)) % 10000);
    $logid     = ($sectionOne . $sectionTwo . $sectionThree . $sectionFour . $sectionOne . $sectionThree);
    return $logid;
}


echo getLogId();

获取真实客户端IP参考:https://www.php.cn/php-weizijiaocheng-406174.html

发布了226 篇原创文章 · 获赞 31 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/why444216978/article/details/104173210