我们的 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

参考文档:

https://www.php.net/manual/zh/function.get-current-user.php

https://www.php.net/manual/zh/function.getmyuid.php

https://www.php.net/manual/zh/function.getmygid.php

https://www.php.net/manual/zh/function.getmyinode.php

https://www.php.net/manual/zh/function.getmypid.php

https://www.php.net/manual/zh/function.getrusage.php

https://www.php.net/manual/zh/function.php-sapi-name.php

https://www.php.net/manual/zh/function.php-uname.php

https://www.php.net/manual/zh/function.phpversion.php

https://www.php.net/manual/zh/function.set-time-limit.php

https://www.php.net/manual/zh/function.zend-version.php

https://www.php.net/manual/zh/function.getlastmod.php

关于当前PHP脚本运行时系统信息相关函数的更多相关文章

  1. LoadRunner如何在脚本运行时修改log设置选项

    LoadRunner如何在脚本运行时修改log设置选项?答案是使用lr_set_debug_message函数: lr_set_debug_message Sets the message level ...

  2. MYSQL5.7脚本运行时出现[Warning] Using a password on the command line interface can be insecure

    MYSQL版本:5.7 在写linux脚本执行MYSQL命令的时候,如果使用 MYSQL="mysql -hlocalhost -P3306 -uroot -p666666" 登陆 ...

  3. LR_问题_脚本运行时提示没有参数化

    问题描述 将loadrunner中的参数删除,并且删除脚本目录下对应的bak,执行脚本,出现下面的错误: “错误: 表“XX\phonenumbser.dat”不存在.         [MsgId: ...

  4. 隐藏bat脚本运行时弹出的黑窗口,以隐藏进程在后台执行.

    1.把这段代码写在前面@echo offif "%1"=="r" goto startif "%1"=="h" goto ...

  5. Swift 脚本(运行时带参数)

    #!/usr/bin/env xcrun swift import Foundation let args = Process.arguments print("Arg:\(args)&qu ...

  6. LoadRunner 学习笔记(2)VuGen运行时设置Run-Time Setting

    定义:在Vugen中Run-Time Setting是用来设置脚本运行时所需要的相关选项

  7. katalon系列十六:代码运行时实时创建元素对象或列表

    Katalon的常规方法是先抓取元素并保存到仓库,在脚本中需要用到的时候调取,但假如元素属性和个数是可变的,就不能事先保存到仓库了,需要在脚本运行时实时创建. 代码运行时实时创建一个元素对象的例子im ...

  8. 【转载】lr运行时设置,每个action 比例

    提供了再脚本运行时所需要的相关选项. 性能测试的关键之一:能否通过脚本来完全模拟用户的行为,可以通过运行设置让脚本运行的更人性化. 1. Run Logic 脚本如何运行,每个action与actio ...

  9. set_include_path — 设置 include_path 配置选项为当前脚本设置 include_path 运行时的配置选项。

    说明 string set_include_path ( string $new_include_path ) 为当前脚本设置 include_path 运行时的配置选项. 参数 new_includ ...

随机推荐

  1. 你认为的.NET数据库连接池,真的是全部吗?

    一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象. DBA能在对业务方无侵 ...

  2. iOS开发之Video转GIF

    前言 最近遇到需要将video转化为gif的问题,网上找的在线转换限制太多,索性就自己写了一个工具APP.文章末尾有开源代码和打包好的APP,如有需要请自行下载. 效果图 核心代码 来源 class ...

  3. 【网络编程】TCPIP_3_地址族与数据序列

    目录 前言 3. 地址族与数据序列 3.1 分配给套接字的 IP 地址与端口号 3.2 参数 IP 地址 3.2.1 IPV4 地址的结构体 3.2.2 地址族(Address Family) 3.2 ...

  4. Tag Helper 标签助手

    简介 标签助手是Razor 页面中自动生成HTML语句的可重用组件.标签助手对应特定的HTML标签,ASP.NET Core 包含大量与HTML标签对应的预定义标签助手. Razor页面中的标签助手作 ...

  5. Pikachu-URL重定向、目录遍历、敏感信息泄露模块

    一.不安全的URL跳转 1.概述 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地 ...

  6. Proteus仿真—51单片机实现AC信号测频、显示、双机通信

    文章目录 一.原理图部分 二.源码部分 单片机1 单片机2 在Proteus仿真软件里面使用STC89C52实现指定频率的AC信号的测频.显示.双机通信. 一.原理图部分 整体的电路图如示: DC-A ...

  7. h5与小程序互相跳转,传参和获取参数

    1.h5跳转到小程序 首先引入js文件 <script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js">< ...

  8. 无法加载文件 E:\PROGRAM FILES\NODEJS\NODE_GLOBAL\yarn.ps1,因为在此系统中禁止执行脚本

    参考: npm : 无法加载文件 C:\Program Files\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本.

  9. C#多线程---ReaderWriterLock实现线程同步

    一.简介 当我们需要对一个共享资源多次读取的时候,用前面Monitor的同步锁就没有必要了.因为同步锁每次只允许一个线程访问共享资源,其他线程都会阻塞. 此时,通过ReaderWriterLock类可 ...

  10. webapp网络定位

    1 <script> 2 var x=document.getElementById("demo"); 3 function getLocation() 4 { 5 i ...