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)可以被伪造,因此在安全敏感的场景下需要进行额外的验证。

发表评论 取消回复