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

PHP 獲取服務器系統信息完整函數封裝:從 PHP 版本到 GD 庫支援檢測

     編輯:PHP 綜合知識

一鍵獲取服務器環境全景圖:PHP 系統信息收集函數封裝實戰

運維診斷、兼容性檢測、安裝向導等場景常需獲取服務器詳細環境信息。本文封裝一個 getSystemInfo() 函數,涵蓋作業系統、PHP、Web 服務器、擴展庫、關鍵配置等 15+ 維度信息,返回結構化數組便於展示或 API 輸出。

完整函數實現

<?php
/**
 * 獲取服務器系統綜合信息
 * @return array 結構化信息數組
 */
function getSystemInfo() {
    $info = [];
    
    // 1. 作業系統
    $info['os'] = PHP_OS;  // 如 Linux, WINNT, Darwin
    
    // 2. PHP 核心版本
    $info['php_version'] = PHP_VERSION;
    $info['php_sapi']    = PHP_SAPI;  // cli, fpm-fcgi, apache2handler 等
    
    // 3. Web 服務器版本 (僅 Apache 環境可用)
    if (function_exists('apache_get_version')) {
        $info['apache_version'] = apache_get_version();
    } else {
        $info['apache_version'] = 'N/A (非 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'];
        $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;
        $info['gd_version'] = '未安裝或未啟用';
    }
    
    // 6. 關鍵 PHP 配置項
    $configKeys = [
        'safe_mode'           => '安全模式',
        'register_globals'    => '註冊全局變量',
        'magic_quotes_gpc'    => '魔術引用 GPC',
        'file_uploads'        => '文件上傳支援',
        'upload_max_filesize' => '最大上傳文件',
        'post_max_size'       => '最大 POST 數據',
        'max_execution_time'  => '最大執行時間(秒)',
        'memory_limit'        => '內存限制',
        'display_errors'      => '顯示錯誤',
        'error_reporting'     => '錯誤報告級別',
        'date.timezone'       => '默認時區',
    ];
    
    foreach ($configKeys as $iniKey => $label) {
        $val = ini_get($iniKey);
        // memory_limit 可能為 -1 (無限制)
        if ($iniKey === 'memory_limit' && $val === '-1') $val = '無限制';
        $info[str_replace('.', '_', $iniKey)] = $val ?: 'Off/未設置';
    }
    
    // 7. 關鍵擴展檢測
    $extensions = [
        'pdo', 'pdo_mysql', 'mysqli', 'curl', 'mbstring', 'json', 'xml',
        'openssl', 'zip', 'gd', 'redis', 'memcached', 'opcache', 'bcmath'
    ];
    $info['extensions'] = [];
    foreach ($extensions as $ext) {
        $info['extensions'][$ext] = extension_loaded($ext) ? phpversion($ext) : false;
    }
    
    // 8. 磁盤空間 (當前項目目錄)
    $info['disk_free_space']  = @disk_free_space('.');
    $info['disk_total_space'] = @disk_total_space('.');
    $info['disk_usage_percent'] = $info['disk_total_space'] 
        ? round((1 - $info['disk_free_space'] / $info['disk_total_space']) * 100, 1) 
        : 'N/A';
    
    return $info;
}

// 使用示例
$sysInfo = getSystemInfo();
echo "<pre>";
print_r($sysInfo);
echo "</pre>";

// 或 JSON 輸出供前端/API 使用
// header('Content-Type: application/json');
// echo json_encode($sysInfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
?>

返回數組結構示例

Array
(
    [os] => Linux
    [php_version] => 8.2.10
    [php_sapi] => fpm-fcgi
    [apache_version] => N/A (非 Apache 或無權限)
    [zend_version] => 4.2.10
    [gd_support] => 1
    [gd_version] => bundled (2.1.0 compatible)
    [gd_freetype] => 1
    [gd_jpeg] => 1
    [gd_png] => 1
    [safe_mode] => Off
    [register_globals] => Off
    [magic_quotes_gpc] => Off
    [file_uploads] => On
    [upload_max_filesize] => 50M
    [post_max_size] => 100M
    [max_execution_time] => 30
    [memory_limit] => 256M
    [display_errors] => Off
    [error_reporting] => 32767
    [date_timezone] => Asia/Shanghai
    [extensions] => Array
        (
            [pdo] => 8.2.10
            [pdo_mysql] => 8.2.10
            [mysqli] => 8.2.10
            [curl] => 8.2.10
            [mbstring] => 8.2.10
            [json] => 8.2.10
            [xml] => 8.2.10
            [openssl] => 8.2.10
            [zip] => 8.2.10
            [gd] => 8.2.10
            [redis] => 5.3.7
            [memcached] => 3.2.0
            [opcache] => 8.2.10
            [bcmath] => 8.2.10
        )
    [disk_free_space] => 10737418240
    [disk_total_space] => 53687091200
    [disk_usage_percent] => 80.0
)

Web 介面展示模板

<!DOCTYPE html>
<html>
<head>
    <title>服務器環境信息</title>
    <style>
        table {border-collapse: collapse; width: 100%; max-width: 800px; margin: 20px auto;}
        th, td {border: 1px solid #ddd; padding: 10px; text-align: left;}
        th {background: #f5f5f5;}
        .status-ok {color: green;} .status-warn {color: orange;} .status-no {color: red;}
    </style>
</head>
<body>
    <h1 style="text-align:center">服務器環境診斷報告</h1>
    <table>
        <tr><th>項目</th><th>值</th><th>狀態/說明</th></tr>
        <?php foreach ($sysInfo as $key => $val): 
            if (is_array($val)) continue; // 擴展列表單獨處理
        ?>
        <tr>
            <td><?= $key ?></td>
            <td><?= is_bool($val) ? ($val ? 'Yes' : 'No') : $val ?></td>
            <td><?= getHint($key, $val) ?></td>
        </tr>
        <?php endforeach; ?>
    </table>
    
    <h3>PHP 擴展支援情況</h3>
    <table>
        <tr><th>擴展</th><th>版本/狀態</th></tr>
        <?php foreach ($sysInfo['extensions'] as $ext => $ver): ?>
        <tr>
            <td><?= $ext ?></td>
            <td class="<?= $ver ? 'status-ok' : 'status-no' ?>">
                <?= $ver ? $ver : '未安裝/未啟用' ?>
            </td>
        </tr>
        <?php endforeach; ?>
    </table>
</body>
</html>

應用場景

  1. 項目安裝向導:自動檢測環境滿足最低要求(PHP版本、擴展、寫入權限、磁盤空間)
  2. 運維監控大屏:定時采集上報,異常配置報警(如 memory_limit 過低、display_errors 開啟)
  3. 兼容性測試報告:CI/CD 流程中自動生成環境快照,歸檔備查
  4. 客戶技術支持:一鍵生成診斷報告,替代人工 phpinfo() 截圖

安全提示

  • 嚴禁公開訪問:信息包含路徑、版本、配置細節,屬敏感信息
  • 訪問控制:僅允許內網 IP、管理員賬號、特定 Token 訪問
  • 脫敏處理:對外 API 應過濾絕對路徑、具體版本號等敏感字段

這個函數是「環境即代碼」理念在 PHP 運維中的輕量級落地,集成到項目中能顯著提升故障排查與環境驗證效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved