PHP获取服务器详细信息

概述

在Web开发中,经常需要获取服务器的各种信息,包括操作系统、PHP版本、运行环境、服务器配置等。PHP提供了多种方式来获取这些信息,下面将详细介绍。

使用$_SERVER全局变量

$_SERVER是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。以下是常用的服务器信息获取:

// 服务器IP地址
$_SERVER['SERVER_ADDR'];

// 服务器域名
$_SERVER['SERVER_NAME'];

// 服务器端口
$_SERVER['SERVER_PORT'];

// 服务器软件
$_SERVER['SERVER_SOFTWARE'];

// 服务器协议
$_SERVER['SERVER_PROTOCOL'];

// 查询请求方法
$_SERVER['REQUEST_METHOD'];

// 网站文档根目录
$_SERVER['DOCUMENT_ROOT'];

// 浏览器信息
$_SERVER['HTTP_USER_AGENT'];

// 客户端IP地址
$_SERVER['REMOTE_ADDR'];

获取系统信息函数

php_uname()函数

使用php_uname()可以获取系统类型和版本信息:

// 获取系统类型及版本号
php_uname();  // 例如:Windows NT COMPUTER 5.1 build 2600

// 只获取系统类型
php_uname('s');  // 例如:Windows NT

// 只获取系统版本号
php_uname('r');  // 例如:5.1

// 获取内核名称
php_uname('n');  // 主机名

// 获取硬件平台类型
php_uname('m');  // 例如:x86

PHP版本信息

// 获取PHP版本
PHP_VERSION;  // 例如:7.4.0

// 获取PHP运行方式(CGI、CLI、Apache等)
php_sapi_name();

完整的服务器信息获取函数

function getServerInfo(){
    $info = array(
        '操作系统' => PHP_OS,
        '运行环境' => $_SERVER["SERVER_SOFTWARE"],
        '主机名' => $_SERVER['SERVER_NAME'],
        'WEB服务端口' => $_SERVER['SERVER_PORT'],
        '网站文档目录' => $_SERVER["DOCUMENT_ROOT"],
        '浏览器信息' => substr($_SERVER['HTTP_USER_AGENT'], 0, 40),
        '通信协议' => $_SERVER['SERVER_PROTOCOL'],
        '请求方法' => $_SERVER['REQUEST_METHOD'],
        'ThinkPHP版本' => THINK_VERSION,
        '上传附件限制' => ini_get('upload_max_filesize'),
        '执行时间限制' => ini_get('max_execution_time').'秒',
        '服务器时间' => date("Y年n月j日 H:i:s"),
        '北京时间' => gmdate("Y年n月j日 H:i:s", time()+8*3600),
        '服务器域名/IP' => $_SERVER['SERVER_NAME'].' [ '.gethostbyname($_SERVER['SERVER_NAME']).' ]',
        '用户的IP地址' => $_SERVER['REMOTE_ADDR'],
        '剩余空间' => round((disk_free_space(".")/(1024*1024)), 2).'M',
        'PHP版本' => PHP_VERSION,
        'PHP运行方式' => php_sapi_name(),
        '服务器语言' => $_SERVER['HTTP_ACCEPT_LANGUAGE'],
    );  
    return $info;
}

获取客户端信息

获取客户端操作系统

function getOS() {
    $os = $_SERVER['HTTP_USER_AGENT'];
    
    if (preg_match('/NT\s5\.1/', $os)) {
        $os = "Windows XP";
    } elseif (preg_match('/NT\s6\.0/', $os)) {
        $os = "Windows Vista";
    } elseif (preg_match('/NT\s6\.1/', $os)) {
        $os = "Windows 7";
    } elseif (preg_match('/NT\s6\.2/', $os)) {
        $os = "Windows 8";
    } elseif (preg_match('/NT\s6\.3/', $os)) {
        $os = "Windows 8.1";
    } elseif (preg_match('/NT\s10\.0/', $os)) {
        $os = "Windows 10";
    } elseif (preg_match('/Mac_PowerPC/', $os) || preg_match('/Macintosh/', $os)) {
        $os = "Mac OS X";
    } elseif (preg_match('/Linux/', $os)) {
        $os = "Linux";
    } elseif (preg_match('/Unix/', $os)) {
        $os = "Unix";
    } elseif (preg_match('/iPhone/', $os)) {
        $os = "iOS";
    } elseif (preg_match('/Android/', $os)) {
        $os = "Android";
    } else {
        $os = "未知操作系统";
    }
    
    return $os;
}

获取客户端浏览器

function getBrowser() {
    $agent = $_SERVER['HTTP_USER_AGENT'];
    
    if (strpos($agent, 'MSIE') !== false || strpos($agent, 'rv:11.0')) {
        return "IE";
    } elseif (strpos($agent, 'Firefox') !== false) {
        return "Firefox";
    } elseif (strpos($agent, 'Chrome') !== false) {
        return "Chrome";
    } elseif (strpos($agent, 'Opera') !== false || strpos($agent, 'OPR') !== false) {
        return "Opera";
    } elseif (strpos($agent, 'Safari') !== false) {
        return "Safari";
    } elseif (strpos($agent, 'Edge') !== false) {
        return "Edge";
    } else {
        return "未知浏览器";
    }
}

获取客户端语言

// 获取客户端浏览器语言
$language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

// 解析获取主语言
$primaryLanguage = substr($language, 0, 2);  // 例如:zh-CN, en-US

PHP配置信息


// 获取PHP配置信息
phpinfo();

// 获取特定配置项
ini_get('upload_max_filesize');  // 上传文件大小限制
ini_get('max_execution_time');   // 最大执行时间
ini_get('memory_limit');         // 内存限制
ini_max('post_max_size');        // POST数据最大尺寸
ini_get('display_errors');       // 是否显示错误
ini_get('date.timezone');        // 时区设置

获取服务器磁盘空间


// 获取磁盘总空间(字节)
$totalSpace = disk_total_space("/");

// 获取磁盘剩余空间(字节)
$freeSpace = disk_free_space("/");

// 转换为GB
$totalGB = round($totalSpace / (1024*1024*1024), 2);
$freeGB = round($freeSpace / (1024*1024*1024), 2);

echo "磁盘总空间: {$totalGB} GB";
echo "剩余空间: {$freeGB} GB";

总结

通过以上方法,我们可以方便地获取服务器和客户端的各种信息。在实际开发中,这些信息对于系统监控、日志记录、功能适配等都非常有用。需要注意的是,某些信息(如客户端User-Agent)可以被伪造,因此在安全敏感的场景下需要进行额外的验证。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部