首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 獲取服務器環境信息函數:OS、PHP、Web服務器、GD、配置參數一鍵檢測

     編輯:PHP 相關知識

PHP 獲取服務器環境信息函數:OS、PHP、Web服務器、GD、配置參數一鍵檢測

部署、遷移、排查兼容性問題時,需要快速獲取服務器關鍵環境信息。本文封裝一個 getSystemInfo() 函數,涵蓋操作系統、PHP 版本、Web 服務器、Zend、GD 庫、關鍵 php.ini 參數、上傳/內存限制等,返回結構化數組,可直接用於後台儀表盤、安裝向導、健康檢查 API。

完整函數代碼

<?php
/**
 * 獲取服務器系統信息
 * @return array 結構化信息數組
 */
function getSystemInfo(): array {
    $info = [];

    // 1. 操作系統
    $info['os'] = PHP_OS; // Linux, Darwin, WINNT 等

    // 2. PHP 版本
    $info['php_version'] = PHP_VERSION;
    $info['php_sapi'] = PHP_SAPI; // fpm-fcgi, cli, apache2handler 等

    // 3. Web 服務器版本 (僅 Apache SAPI 可用)
    if (function_exists('apache_get_version')) {
        $info['apache_version'] = apache_get_version();
    } elseif (isset($_SERVER['SERVER_SOFTWARE'])) {
        $info['server_software'] = $_SERVER['SERVER_SOFTWARE']; // Nginx/Apache 版本信息
    }

    // 4. Zend Engine 版本
    $info['zend_version'] = zend_version();

    // 5. GD 庫信息
    if (function_exists('gd_info')) {
        $gd = gd_info();
        $info['gd_support'] = true;
        $info['gd_version'] = $gd['GD Version'] ?? 'unknown';
        $info['gd_freetype'] = $gd['FreeType Support'] ?? false;
        $info['gd_jpeg'] = $gd['JPEG Support'] ?? false;
        $info['gd_png'] = $gd['PNG Support'] ?? false;
    } else {
        $info['gd_support'] = false;
    }

    // 6. 關鍵 php.ini 安全/功能參數
    $info['ini'] = [
        'safe_mode'           => (bool)ini_get('safe_mode'),           // 已棄用 PHP 5.4+
        'register_globals'    => (bool)ini_get('register_globals'),    // 已移除 PHP 5.4+
        'magic_quotes_gpc'    => (bool)ini_get('magic_quotes_gpc'),    // 已移除 PHP 5.4+
        'magic_quotes_runtime'=> (bool)ini_get('magic_quotes_runtime'),// 已移除 PHP 5.4+
        'allow_url_fopen'     => (bool)ini_get('allow_url_fopen'),
        'allow_url_include'   => (bool)ini_get('allow_url_include'),
        'display_errors'      => (bool)ini_get('display_errors'),
        'log_errors'          => (bool)ini_get('log_errors'),
        'error_reporting'     => ini_get('error_reporting'),
        'max_execution_time'  => (int)ini_get('max_execution_time'),
        'memory_limit'        => ini_get('memory_limit'),
        'post_max_size'       => ini_get('post_max_size'),
        'upload_max_filesize' => ini_get('upload_max_filesize'),
        'max_file_uploads'    => (int)ini_get('max_file_uploads'),
        'date.timezone'       => ini_get('date.timezone'),
        'session.save_handler'=> ini_get('session.save_handler'),
        'session.save_path'   => ini_get('session.save_path'),
    ];

    // 7. 擴展加載狀態 (常用擴展檢測)
    $required_exts = ['pdo', 'pdo_mysql', 'mysqli', 'mbstring', 'json', 'xml', 'curl', 'openssl', 'zip', 'redis', 'memcached', 'gd', 'bcmath', 'intl'];
    foreach ($required_exts as $ext) {
        $info['extensions'][$ext] = extension_loaded($ext);
    }

    // 8. 磁盤空間 (當前腳本所在分區)
    $info['disk'] = [
        'total' => @disk_total_space('.'),
        'free'  => @disk_free_space('.'),
    ];

    return $info;
}

// 使用示例
$sys = getSystemInfo();
echo '<pre>'; print_r($sys); echo '</pre>';
// 或 JSON 輸出供前端/監控系統
// header('Content-Type: application/json'); echo json_encode($sys, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
?>

返回數組結構示例

Array
(
    [os] => Linux
    [php_version] => 8.2.10
    [php_sapi] => fpm-fcgi
    [server_software] => nginx/1.24.0
    [zend_version] => 4.2.10
    [gd_support] => 1
    [gd_version] => bundled (2.1.0 compatible)
    [gd_freetype] => 1
    [gd_jpeg] => 1
    [gd_png] => 1
    [ini] => Array
        (
            [safe_mode] => 
            [register_globals] => 
            [allow_url_fopen] => 1
            [memory_limit] => 256M
            [post_max_size] => 64M
            [upload_max_filesize] => 32M
            ...
        )
    [extensions] => Array
        (
            [pdo] => 1
            [pdo_mysql] => 1
            [redis] => 1
            [memcached] => 
            ...
        )
    [disk] => Array
        (
            [total] => 21474836480
            [free] => 10737418240
        )
)

應用場景與擴展建議

安全提示

  • 返回信息包含服務器軟件版本、路徑、配置細節,**嚴禁直接暴露在公開頁面**,僅限內網/管理員/認證 API 訪問。
  • 生產環境建議過濾敏感字段:unset($info['ini']['session.save_path']) 等。
  • disk_total_space/free_space 在某些虛擬主機/容器環境可能返回 false,已用 @ 抑制警告。

這個函數是「運維級」工具,集成到項目公共庫,隨時可用,讓環境信息獲取標準化、結構化、可編程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景用法
安裝向導環境檢查前端調用 API,綠色/紅色提示必需/推薦擴展、配置是否滿足要求
後台儀表盤「系統信息」頁定時緩存 1 小時,管理員查看 PHP 版本、擴展、磁盤、內存限制
跨服務器部署一致性驗證CI/CD 階段調用,對比多台服務器關鍵參數 (memory_limit, max_execution_time, 擴展列表) 是否一致
故障排查快照異常捕獲時自動附加 getSystemInfo() 到日誌/郵件,快速定位環境差異導致的 Bug
兼容性測試矩陣收集不同 PHP 版本/OS/SAPI 下的函數行為差異數據