2023年12月



这里我使用的方法是通过记录5分钟内,访问网站的用户的IP地址,来判断当前在线人数。

在线人数

首先我们需要两个函数,一个是获取客户端IP的函数

    /**
     * 获取客户端IP
     * @return string
     */
    function getip() { //获取客户端IP
        if ( isset($_SERVER[ "HTTP_CDN_SRC_IP" ]) ) { //获取网宿CDN真实客户IP
            return replace_ip( $_SERVER[ "HTTP_CDN_SRC_IP" ] );
        }
        if ( isset($_SERVER[ "HTTP_X_FORWARDED_FOR" ]) ) { //获取网宿、阿里云真实客户IP,参考:https://help.aliyun.com/knowledge_detail/40535.html
            return replace_ip( $_SERVER[ "HTTP_X_FORWARDED_FOR" ] );
        }
        if ( isset($_SERVER[ "HTTP_CLIENT_IP" ]) ) {
            return $_SERVER[ "HTTP_CLIENT_IP" ];
        }
        if ( isset($_SERVER[ "HTTP_X_FORWARDED" ]) ) {
            return $_SERVER[ "HTTP_X_FORWARDED" ];
        }
        if ( isset($_SERVER[ "HTTP_FORWARDED_FOR" ]) ) {
            return $_SERVER[ "HTTP_FORWARDED_FOR" ];
        }
        if ( isset($_SERVER[ "HTTP_FORWARDED" ]) ) {
            return $_SERVER[ "HTTP_FORWARDED" ];
        }
        $httpip = $_SERVER[ 'REMOTE_ADDR' ];
        if ( !preg_match( "/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/", $httpip ) ) {
            $httpip = "127.0.0.1";
        }
        return $httpip;
    }

还有一个是拆分代理IP函数

    /**
     * 拆分代理IP
     * @return string
     */
    function replace_ip($ip)
    {
    
        if (!$ip) {
            return "";
        }
    
        $httpip_array = explode(",", $ip);
    
        if ($httpip_array[0]) {
    
            return $httpip_array[0];
    
        } else {
    
            return $ip;
    
        }
    
    }

接着便是主要代码:

    /**
     * 
     * 用户在线数量统计
     * 
     * */
    // 获取用户 IP 地址
    $userIP = getip();
    // 获取当前时间戳
    $currentTime = $date;
    // 设置在线时间间隔(5分钟)
    $timeout = $currentTime - (5 * 60);
    // 创建或打开文件以保存在线用户数据
    $file = fopen("online_users.txt", "c+");
    // 获取文件中的数据
    $users = unserialize(fread($file, filesize("online_users.txt")));
    // 如果用户数据不是数组,则初始化为空数组
    if (!is_array($users)) {
        $users = [];
    }
    // 更新当前用户的在线时间
    $users[$userIP] = $currentTime;
    // 删除超时的用户
    foreach ($users as $ip => $lastTime) {
        if ($lastTime < $timeout) {
            unset($users[$ip]);
        }
    }
    // 重置文件指针,并清空文件内容
    ftruncate($file, 0);
    rewind($file);
    // 将更新后的用户数据写入文件
    fwrite($file, serialize($users));
    // 关闭文件
    fclose($file);
    //在线人数
    $online_users = count($users);

最后这个变量 $online_users 就是在线人数了,放到想要输出的位置,进行输出即可。

在线人数 <?php echo $online_users;?> 人

使用PHP exec函数 执行 sduo的时,提示权限不足,具体报错如下:


array(9) {
  [0]=>
  string(0) ""
  [1]=>
  string(66) "We trust you have received the usual lecture from the local System"
  [2]=>
  string(59) "Administrator. It usually boils down to these three things:"
  [3]=>
  string(0) ""
  [4]=>
  string(38) "    #1) Respect the privacy of others."
  [5]=>
  string(30) "    #2) Think before you type."
  [6]=>
  string(52) "    #3) With great power comes great responsibility."
  [7]=>
  string(0) ""
  [8]=>
  string(53) "sudo: no tty present and no askpass program specified"
}

解决方法如下:
编辑 /etc/sudoers 文件。
在此处:

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##     user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere 
root    ALL=(ALL)     ALL

追加下方代码:

www ALL = NOPASSWD: ALL
## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##     user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere 
root    ALL=(ALL)     ALL
www ALL = NOPASSWD: ALL

这样就可以解决了。

今天,我想与大家分享一个我深有感触的主题——“执行才是答案”。在日常生活中,我不断地遇到一些只说不做的人,他们的存在如同一面镜子,反射出执行力的极端重要性。这种现象不断地提醒我,不能只是空谈理想,而应该脚踏实地去实现它!

在我们的生活中,每个人都有无数的想法,无论是创业、学习,还是生活的点点滴滴,我们都有无数的设想和梦想。然而,真正能够实现的人却少之又少。为什么会这样呢?

答案就是:

人最不缺的就是想法,真正缺少的是行动力,因为行动本身是痛苦的,拖延是普遍存在的,没有人愿意行动。

行动的痛苦与拖延的普遍

行动本身是痛苦的,这是一个无法逃避的事实。我们需要付出时间、精力,甚至是金钱。我们需要面对失败和挫败,需要承受压力和疲惫。因此,拖延是普遍存在的,没有人愿意行动。我们总是倾向于选择舒适区,倾向于选择安逸,倾向于选择逃避。这就是我们为什么会拖延的原因。

然而,一旦能够克服拖延,便能够彻底改变人生,变得与众不同。这听起来似乎很难,但实际上,每个人都有可能做到。因为,拖延与性格无关,它是我们所有人性格里都有的一个缺陷。这就意味着,每个人都有可能克服拖延,只要我们愿意付出努力,只要我们愿意行动。

想法与行动的关系

有想法的时候,我们常常会先去设想成功的样子。我们想减肥,就会去想已经瘦下来的样子;我们想创业,就会去想已经上市敲钟的样子。这其实是一种错误的思维方式。

人不应该去设想最后成功的结果,应该去思考这个过程如何去实施。

过程往往是痛苦的,我们总喜欢设想各种好的结果,却不愿意去想象过程的痛苦。如果我们不愿意去面对过程的痛苦,那这个目标就不是我们真正想要追求的。我们需要明白,没有付出就没有收获,没有痛苦就没有成功。只有我们愿意去接受过程的痛苦,才能真正实现我们的目标。

饼和目标的区别

我们常常会听到这样的话:“只画饼,没有具体过程。”这其实就是在说,我们只有想法,却没有行动。我们总是想要做大事,却不愿意去付出实际的行动。我们总是想要成功,却不愿意去承担风险。这就是我们为什么会失败的原因。

饼之所以叫做饼,因为它不可能实现。能实现的叫做目标。我们需要明白,没有行动就没有结果,没有执行就没有成功。所以,我们需要把实现过程想清楚,这是至关重要的。我们需要有一个明确的目标,然后去计划,去行动,去实现。

计划的重要性

不管做什么都要有计划。人之所以不能实现梦想,就是坚信梦想迟早都要实现,这是最大的自欺欺人。一个没有期限的梦想是永远无法实现的。我们需要有一个明确的计划,然后去执行这个计划。

如何执行,应该先从最终目标下手,反向推算出每天的目标。比如说我要写一个程序,想要30天内完成,那么每天写多少都要有规划。例如我背5000个单词,90天完成,每天就要背多少个也要有规划。这样,我们就能够明确我们每天需要做什么,就能够明确我们每天需要付出多少。

预备计划与非议

在我们的行动过程中,总会遇到一些意外的情况。这时候,我们就需要有一个预备计划。预备计划就是我们在遇到意外情况时,可以立即采取的行动。它可以帮助我们在遇到困难时,快速地找到解决方案。

另外,人无论做什么都会遇到非议。就算你成功后,不管多成功,都会有非议。这是无法避免的。不能因为这些非议就放弃我们的行动。有人说你什么你就不做的话,说明你跟本就没有想做,没有想获得这份成功。

人生就像是一场马拉松,我们无法预知前方的道路会如何,也无法预知我们会遇到什么样的困难。只有真正行动起来,才能真正到达终点,才能真正实现目标。