• 技术文章 >后端开发 >PHP问题

    详细介绍关于PHP脚本运行时系统信息的相关函数

    醉折花枝作酒筹醉折花枝作酒筹2021-06-07 17:27:41原创77
    本篇文章给大家详细介绍关于当前PHP脚本运行时系统信息的相关函数。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    关于当前PHP脚本运行时系统信息相关函数

    我们的 PHP 在执行的时候,其实可以获取到非常多的当前系统相关的信息。就像很多开源的 CMS 一般会在安装的时候来检测一些环境信息一样,这些信息都是可以方便地动态获取的。

    脚本文件运行时的系统用户相关信息

    首先,我们来看看获取当前系统相关的一些用户信息。这个用户信息就是我们系统运行 php 脚本时所使用的系统用户。

    echo '当前脚本拥有者:' . get_current_user(), PHP_EOL;
    // 当前脚本拥有者:zhangyue
    
    echo '当前脚本属组:' . getmygid(), PHP_EOL;
    // 当前脚本属组:20
    
    echo '当前脚本的用户属主:' . getmyuid(), PHP_EOL;
    // 当前脚本的用户属主:501

    看出来了嘛?其实这三个函数就是对应的 Linux 中的文件拥有者、所属组,get_current_user() 返回的是用户名,getmyuid() 返回的是用户的 UID ,它们两个是对应的同一个用户。getmygid() 则返回的是当前用户所属的用户组。

    获取当前运行脚本的系统相关信息

    这一组函数可以让我们获得系统的 innode 信息、当前脚本运行时的 进程ID 、服务接口类型、运行 PHP 的操作系统信息以及资源使用情况。

    echo '当前脚本的索引节点:' . getmyinode(), PHP_EOL;
    // 当前脚本的索引节点:8691989143
    
    echo '当前脚本的进程ID:' . getmypid(), PHP_EOL;
    // 当前脚本的进程ID:1854
    // Nginx:当前脚本的进程ID:711(php-fpm的进程ID)
    
    echo "web服务器和PHP之间的接口类型:" . php_sapi_name(), PHP_EOL;
    // web服务器和PHP之间的接口类型:cli
    // Nginx:web服务器和PHP之间的接口类型:fpm-fcgi
    
    echo "运行 PHP 的系统:" . php_uname("a"), PHP_EOL;
    // 运行 PHP 的系统:Darwin zhangyuedeMBP 19.4.0 Darwin Kernel Version 19.4.0: Wed Mar  4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64 x86_64
    //
    
    echo "运行PHP的系统:" . PHP_OS, PHP_EOL;
    // 运行 PHP 的系统:Darwin
    
    // 当前脚本的资源使用情况
    print_r(getrusage());
    // Array
    // (
    //     [ru_oublock] => 0
    //     [ru_inblock] => 0
    //     [ru_msgsnd] => 0
    //     [ru_msgrcv] => 0
    //     [ru_maxrss] => 16809984
    //     [ru_ixrss] => 0
    //     [ru_idrss] => 0
    //     [ru_minflt] => 4410
    //     [ru_majflt] => 1
    //     [ru_nsignals] => 0
    //     [ru_nvcsw] => 0
    //     [ru_nivcsw] => 86
    //     [ru_nswap] => 0
    //     [ru_utime.tv_usec] => 41586
    //     [ru_utime.tv_sec] => 0
    //     [ru_stime.tv_usec] => 41276
    //     [ru_stime.tv_sec] => 0
    // )

    从注释中,我们可以看出,getmypid() 在使用命令行时返回的是当前执行的 进程ID ,在网页中访问的时候返回的是 PHP-FPM 的 进程ID 。同理,php_sapi_name() 也会根据当前运行的环境返回不同的内容。

    php_uname() 默认参数是就 'a' ,意思是返回完整的操作系统信息。它还有其它的参数可以返回单独的不同的信息,或者我们只需要知道当前操作是什么系统时,就直接使用 PHP_OS 常量会更加的方便。

    getrusage() 能够返回系统资源的情况,比如 ru_nswap 就是系统当前的 swap 交换区的使用情况,但是这些参数并没有很详细的说明,毕竟这个函数还是使用的比较少的。

    获取 PHP 及相关扩展组件的版本信息

    echo "当前的PHP版本:" . phpversion(), PHP_EOL;
    // 当前的PHP版本:7.3.0
    
    echo "当前的PHP版本:" . PHP_VERSION, PHP_EOL;
    // 当前的PHP版本:7.3.0
    
    echo "当前某个扩展的版本(Swoole):" . phpversion('swoole'), PHP_EOL;
    // 当前某个扩展的版本(Swoole):4.4.12
    
    echo "当前的PHP的zend引擎版本:" . zend_version(), PHP_EOL;
    // 当前的PHP的zend引擎版本:3.3.0-dev
    
    if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
        echo '我的版本大于7.0.0,当前版本是:' . PHP_VERSION . "\n";
    } else {
        echo '我的版本还在5,要赶紧升级了,当前版本是:' . PHP_VERSION . "\n";
    }

    phpversion() 在没有参数的情况下和 PHP_VERSION 常量的效果是一样的,返回的是当前运行的 PHP 的版本号,但是,phpversion() 可以给一个扩展组件名的参数,这样,它就可以返回这个扩展组件的版本号。就像例子中,我们获取了当前环境下 Swoole 的版本号。zend_version() 就是很简单的返回了当前运行环境中的 Zend引擎 版本号。

    version_compare() 可以帮助我们方便地进行版本号的对比。它是以逗号进行分隔进行的版本对比,也就是说,我们自己定义的字符串版本号都可以使用它来进行对比。具体的对比规则可以参考官方文档。

    当前脚本文件的修改时间及脚本运行时间

    echo "当前脚本文件的最后修改时间: " . date("Y-m-d H:i:s.", getlastmod()), PHP_EOL;
    // 当前脚本文件的最后修改时间: 2020-06-01 08:55:49.
    
    // nginx环境下
    set_time_limit(84600);
    // while(1){
    
    // }

    getlastmod() 非常简单,就是返回当前运行的这个 PHP 文件最后被修改的时间。而 set_time_limit() 相信大家就不陌生了。在默认情况下,web请求都不会持续很长时间就会主动断开。比如在 php.ini 文件中,我们默认定义的 max_execution_time 是30秒,当一个请求消耗的时候超过这个时间后,请求就会断开。不过,总会有一些请求是确实需要我们消耗更长的时间来执行的,比如说生成 Excel 之类的文档往往就需要更长的时间。这个时候,我们就可以使用 set_time_limit() 来设置脚本最大执行时间来延长web请求的执行超时时间。

    测试代码:

    https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%85%B3%E4%BA%8E%E5%BD%93%E5%89%8DPHP%E8%84%9A%E6%9C%AC%E8%BF%90%E8%A1%8C%E6%97%B6%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF%E7%9B%B8%E5%85%B3%E5%87%BD%E6%95%B0.php

    推荐学习:php视频教程

    以上就是详细介绍关于PHP脚本运行时系统信息的相关函数的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:详细介绍PHP中的密码散列算法(附代码) 下一篇:如何使用PHP中的断言函数
    第16期线上培训班

    相关文章推荐

    • php array怎么去除指定值• 如何使用phpstorm自带服务器运行php项目(图文详解)• 手把手教你Linux PHP环境部署与项目上线(分享)• PHP中什么是URL.session id?他们之间有什么安全隐患?session id的作用?• 详细介绍PHP中的密码散列算法(附代码)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网