开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[其他] 一个基于php统计磁盘使用情况的代码

 发表于 2025-9-23 21:44:39|显示全部楼层|阅读模式 IP:广西
本帖最后由 小永高呐 于 2025-9-23 21:47 编辑

做了统计部分,让ai帮做了饼图部分和界面ui

测试在大部分的vps主机/虚拟主机上运行正常,小部分虚拟主机由于环境问题导致无法统计磁盘使用量
在虚拟主机上使用时统计的是整个vps主机的磁盘使用情况而非虚拟主机面板显示的使用情况

页面截图



下载源码:https://openlist.287636.xyz/d/2t ... 8%E4%BA%91/cptj.php

  1. <?php
  2. // 获取磁盘使用情况(使用允许的目录路径)
  3. function getDiskUsage() {
  4.     // 使用当前脚本所在目录作为基准路径
  5.     $baseDir = __DIR__;
  6.      
  7.     $total = disk_total_space($baseDir);
  8.     $free = disk_free_space($baseDir);
  9.     $used = $total - $free;
  10.      
  11.     // 防止除以零错误
  12.     if ($total == 0) {
  13.         return [
  14.             'total' => '未知',
  15.             'free' => '未知',
  16.             'used' => '未知',
  17.             'percent' => 0,
  18.             'percentFree' => 0
  19.         ];
  20.     }
  21.      
  22.     $percent = round(($used / $total) * 100, 2);
  23.     $percentFree = round(($free / $total) * 100, 2);
  24.      
  25.     return [
  26.         'total' => formatBytes($total),
  27.         'free' => formatBytes($free),
  28.         'used' => formatBytes($used),
  29.         'percent' => $percent,
  30.         'percentFree' => $percentFree
  31.     ];
  32. }

  33. // 格式化字节大小
  34. function formatBytes($bytes, $precision = 2) {
  35.     if ($bytes == 0) return '0 B';
  36.      
  37.     $units = ['B', 'KB', 'MB', 'GB', 'TB'];
  38.     $bytes = max($bytes, 0);
  39.     $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
  40.     $pow = min($pow, count($units) - 1);
  41.      
  42.     $bytes /= pow(1024, $pow);
  43.      
  44.     return round($bytes, $precision) . ' ' . $units[$pow];
  45. }

  46. // 获取系统信息
  47. function getSystemInfo() {
  48.     return [
  49.         'os' => php_uname('s') . ' ' . php_uname('r'),
  50.         'php_version' => PHP_VERSION,
  51.         'server_software' => $_SERVER['SERVER_SOFTWARE'] ?? '未知',
  52.         'server_time' => date('Y-m-d H:i:s')
  53.     ];
  54. }

  55. // 获取磁盘使用情况
  56. $diskUsage = getDiskUsage();
  57. $systemInfo = getSystemInfo();
  58. ?>

  59. <!DOCTYPE html>
  60. <html lang="zh-CN">
  61. <head>
  62.     <meta charset="UTF-8">
  63.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  64.     <title>磁盘使用统计</title>
  65.     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
  66.     <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
  67.     <style>
  68.         body {
  69.             background-color: #f8f9fa;
  70.             font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  71.         }
  72.         .dashboard {
  73.             max-width: 1200px;
  74.             margin: 30px auto;
  75.             padding: 20px;
  76.         }
  77.         .card {
  78.             border-radius: 10px;
  79.             box-shadow: 0 4px 12px rgba(0,0,0,0.1);
  80.             margin-bottom: 20px;
  81.             border: none;
  82.         }
  83.         .card-header {
  84.             background-color: #4a6fdc;
  85.             color: white;
  86.             font-weight: 600;
  87.             border-radius: 10px 10px 0 0 !important;
  88.             padding: 12px 20px;
  89.         }
  90.         .progress {
  91.             height: 25px;
  92.             border-radius: 15px;
  93.             background-color: #e9ecef;
  94.         }
  95.         .progress-bar {
  96.             border-radius: 15px;
  97.             font-weight: 600;
  98.         }
  99.         .stat-card {
  100.             text-align: center;
  101.             padding: 20px;
  102.             border-radius: 10px;
  103.             background-color: white;
  104.             box-shadow: 0 2px 8px rgba(0,0,0,0.08);
  105.             margin-bottom: 20px;
  106.             transition: transform 0.3s;
  107.         }
  108.         .stat-card:hover {
  109.             transform: translateY(-5px);
  110.         }
  111.         .stat-value {
  112.             font-size: 2.2rem;
  113.             font-weight: 700;
  114.             margin: 10px 0;
  115.         }
  116.         .stat-label {
  117.             color: #6c757d;
  118.             font-size: 0.9rem;
  119.         }
  120.         .chart-container {
  121.             position: relative;
  122.             height: 300px;
  123.             width: 100%;
  124.         }
  125.         .system-info {
  126.             background-color: #f8f9fa;
  127.             border-radius: 8px;
  128.             padding: 15px;
  129.         }
  130.         .system-info-item {
  131.             margin-bottom: 10px;
  132.             display: flex;
  133.             justify-content: space-between;
  134.         }
  135.         .system-info-label {
  136.             font-weight: 600;
  137.             color: #495057;
  138.         }
  139.         .system-info-value {
  140.             color: #6c757d;
  141.         }
  142.     </style>
  143. </head>
  144. <body>
  145.     <div class="dashboard">
  146.         <div class="row mb-4">
  147.             <div class="col-12">
  148.                 <h1 class="text-center">磁盘使用统计</h1>
  149.                 <p class="text-center text-muted">当前目录: <?php echo __DIR__; ?></p>
  150.             </div>
  151.         </div>
  152.          
  153.         <div class="row mb-4">
  154.             <div class="col-md-4">
  155.                 <div class="stat-card">
  156.                     <div class="stat-label">总空间</div>
  157.                     <div class="stat-value text-primary"><?php echo $diskUsage['total']; ?></div>
  158.                 </div>
  159.             </div>
  160.             <div class="col-md-4">
  161.                 <div class="stat-card">
  162.                     <div class="stat-label">已用空间</div>
  163.                     <div class="stat-value text-danger"><?php echo $diskUsage['used']; ?></div>
  164.                 </div>
  165.             </div>
  166.             <div class="col-md-4">
  167.                 <div class="stat-card">
  168.                     <div class="stat-label">可用空间</div>
  169.                     <div class="stat-value text-success"><?php echo $diskUsage['free']; ?></div>
  170.                 </div>
  171.             </div>
  172.         </div>
  173.          
  174.         <div class="row mb-4">
  175.             <div class="col-md-6">
  176.                 <div class="card">
  177.                     <div class="card-header">磁盘使用率</div>
  178.                     <div class="card-body">
  179.                         <div class="progress mb-3">
  180.                             <div class="progress-bar bg-danger" role="progressbar"
  181.                                 style="width: <?php echo $diskUsage['percent']; ?>%"
  182.                                 aria-valuenow="<?php echo $diskUsage['percent']; ?>"
  183.                                 aria-valuemin="0" aria-valuemax="100">
  184.                                 <?php echo $diskUsage['percent']; ?>%
  185.                             </div>
  186.                         </div>
  187.                         <div class="d-flex justify-content-between">
  188.                             <span>已用: <?php echo $diskUsage['percent']; ?>%</span>
  189.                             <span>可用: <?php echo $diskUsage['percentFree']; ?>%</span>
  190.                         </div>
  191.                     </div>
  192.                 </div>
  193.             </div>
  194.             
  195.             <div class="col-md-6">
  196.                 <div class="card">
  197.                     <div class="card-header">磁盘使用分布</div>
  198.                     <div class="card-body">
  199.                         <div class="chart-container">
  200.                             <canvas id="diskChart"></canvas>
  201.                         </div>
  202.                     </div>
  203.                 </div>
  204.             </div>
  205.         </div>
  206.          
  207.         <div class="row">
  208.             <div class="col-md-6">
  209.                 <div class="card">
  210.                     <div class="card-header">系统信息</div>
  211.                     <div class="card-body">
  212.                         <div class="system-info">
  213.                             <div class="system-info-item">
  214.                                 <span class="system-info-label">操作系统:</span>
  215.                                 <span class="system-info-value"><?php echo $systemInfo['os']; ?></span>
  216.                             </div>
  217.                             <div class="system-info-item">
  218.                                 <span class="system-info-label">PHP版本:</span>
  219.                                 <span class="system-info-value"><?php echo $systemInfo['php_version']; ?></span>
  220.                             </div>
  221.                             <div class="system-info-item">
  222.                                 <span class="system-info-label">服务器软件:</span>
  223.                                 <span class="system-info-value"><?php echo $systemInfo['server_software']; ?></span>
  224.                             </div>
  225.                             <div class="system-info-item">
  226.                                 <span class="system-info-label">服务器时间:</span>
  227.                                 <span class="system-info-value"><?php echo $systemInfo['server_time']; ?></span>
  228.                             </div>
  229.                         </div>
  230.                     </div>
  231.                 </div>
  232.             </div>
  233.             
  234.             <div class="col-md-6">
  235.                 <div class="card">
  236.                     <div class="card-header">磁盘空间详情</div>
  237.                     <div class="card-body">
  238.                         <table class="table table-striped">
  239.                             <tbody>
  240.                                 <tr>
  241.                                     <td>总空间</td>
  242.                                     <td class="text-end"><?php echo $diskUsage['total']; ?></td>
  243.                                 </tr>
  244.                                 <tr>
  245.                                     <td>已用空间</td>
  246.                                     <td class="text-end text-danger"><?php echo $diskUsage['used']; ?></td>
  247.                                 </tr>
  248.                                 <tr>
  249.                                     <td>可用空间</td>
  250.                                     <td class="text-end text-success"><?php echo $diskUsage['free']; ?></td>
  251.                                 </tr>
  252.                                 <tr>
  253.                                     <td>使用率</td>
  254.                                     <td class="text-end"><?php echo $diskUsage['percent']; ?>%</td>
  255.                                 </tr>
  256.                             </tbody>
  257.                         </table>
  258.                     </div>
  259.                 </div>
  260.             </div>
  261.         </div>
  262.     </div>

  263.     <script>
  264.         // 磁盘使用饼图
  265.         const ctx = document.getElementById('diskChart').getContext('2d');
  266.         const diskChart = new Chart(ctx, {
  267.             type: 'pie',
  268.             data: {
  269.                 labels: ['已用空间', '可用空间'],
  270.                 datasets: [{
  271.                     data: [<?php echo $diskUsage['percent']; ?>, <?php echo $diskUsage['percentFree']; ?>],
  272.                     backgroundColor: [
  273.                         '#dc3545',
  274.                         '#28a745'
  275.                     ],
  276.                     borderWidth: 0
  277.                 }]
  278.             },
  279.             options: {
  280.                 responsive: true,
  281.                 maintainAspectRatio: false,
  282.                 plugins: {
  283.                     legend: {
  284.                         position: 'bottom',
  285.                         labels: {
  286.                             font: {
  287.                                 size: 14
  288.                             },
  289.                             padding: 20
  290.                         }
  291.                     },
  292.                     tooltip: {
  293.                         callbacks: {
  294.                             label: function(context) {
  295.                                 return context.label + ': ' + context.raw + '%';
  296.                             }
  297.                         }
  298.                     }
  299.                 }
  300.             }
  301.         });
  302.     </script>
  303. </body>
  304. </html>
复制代码

<?php
// 获取磁盘使用情况(使用允许的目录路径)
function getDiskUsage() {
    // 使用当前脚本所在目录作为基准路径
    $baseDir = __DIR__;
     
    $total = disk_total_space($baseDir);
    $free = disk_free_space($baseDir);
    $used = $total - $free;
     
    // 防止除以零错误
    if ($total == 0) {
        return [
            'total' => '未知',
            'free' => '未知',
            'used' => '未知',
            'percent' => 0,
            'percentFree' => 0
        ];
    }
     
    $percent = round(($used / $total) * 100, 2);
    $percentFree = round(($free / $total) * 100, 2);
     
    return [
        'total' => formatBytes($total),
        'free' => formatBytes($free),
        'used' => formatBytes($used),
        'percent' => $percent,
        'percentFree' => $percentFree
    ];
}

// 格式化字节大小
function formatBytes($bytes, $precision = 2) {
    if ($bytes == 0) return '0 B';
     
    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
    $bytes = max($bytes, 0);
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
    $pow = min($pow, count($units) - 1);
     
    $bytes /= pow(1024, $pow);
     
    return round($bytes, $precision) . ' ' . $units[$pow];
}

// 获取系统信息
function getSystemInfo() {
    return [
        'os' => php_uname('s') . ' ' . php_uname('r'),
        'php_version' => PHP_VERSION,
        'server_software' => $_SERVER['SERVER_SOFTWARE'] ?? '未知',
        'server_time' => date('Y-m-d H:i:s')
    ];
}

// 获取磁盘使用情况
$diskUsage = getDiskUsage();
$systemInfo = getSystemInfo();
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>磁盘使用统计</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <style>
        body {
            background-color: #f8f9fa;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
        .dashboard {
            max-width: 1200px;
            margin: 30px auto;
            padding: 20px;
        }
        .card {
            border-radius: 10px;
            box-shadow: 0 4px 12px rgba(0,0,0,0.1);
            margin-bottom: 20px;
            border: none;
        }
        .card-header {
            background-color: #4a6fdc;
            color: white;
            font-weight: 600;
            border-radius: 10px 10px 0 0 !important;
            padding: 12px 20px;
        }
        .progress {
            height: 25px;
            border-radius: 15px;
            background-color: #e9ecef;
        }
        .progress-bar {
            border-radius: 15px;
            font-weight: 600;
        }
        .stat-card {
            text-align: center;
            padding: 20px;
            border-radius: 10px;
            background-color: white;
            box-shadow: 0 2px 8px rgba(0,0,0,0.08);
            margin-bottom: 20px;
            transition: transform 0.3s;
        }
        .stat-card:hover {
            transform: translateY(-5px);
        }
        .stat-value {
            font-size: 2.2rem;
            font-weight: 700;
            margin: 10px 0;
        }
        .stat-label {
            color: #6c757d;
            font-size: 0.9rem;
        }
        .chart-container {
            position: relative;
            height: 300px;
            width: 100%;
        }
        .system-info {
            background-color: #f8f9fa;
            border-radius: 8px;
            padding: 15px;
        }
        .system-info-item {
            margin-bottom: 10px;
            display: flex;
            justify-content: space-between;
        }
        .system-info-label {
            font-weight: 600;
            color: #495057;
        }
        .system-info-value {
            color: #6c757d;
        }
    </style>
</head>
<body>
    <div class="dashboard">
        <div class="row mb-4">
            <div class="col-12">
                <h1 class="text-center">磁盘使用统计</h1>
                <p class="text-center text-muted">当前目录: <?php echo __DIR__; ?></p>
            </div>
        </div>
         
        <div class="row mb-4">
            <div class="col-md-4">
                <div class="stat-card">
                    <div class="stat-label">总空间</div>
                    <div class="stat-value text-primary"><?php echo $diskUsage['total']; ?></div>
                </div>
            </div>
            <div class="col-md-4">
                <div class="stat-card">
                    <div class="stat-label">已用空间</div>
                    <div class="stat-value text-danger"><?php echo $diskUsage['used']; ?></div>
                </div>
            </div>
            <div class="col-md-4">
                <div class="stat-card">
                    <div class="stat-label">可用空间</div>
                    <div class="stat-value text-success"><?php echo $diskUsage['free']; ?></div>
                </div>
            </div>
        </div>
         
        <div class="row mb-4">
            <div class="col-md-6">
                <div class="card">
                    <div class="card-header">磁盘使用率</div>
                    <div class="card-body">
                        <div class="progress mb-3">
                            <div class="progress-bar bg-danger" role="progressbar"
                                style="width: <?php echo $diskUsage['percent']; ?>%"
                                aria-valuenow="<?php echo $diskUsage['percent']; ?>"
                                aria-valuemin="0" aria-valuemax="100">
                                <?php echo $diskUsage['percent']; ?>%
                            </div>
                        </div>
                        <div class="d-flex justify-content-between">
                            <span>已用: <?php echo $diskUsage['percent']; ?>%</span>
                            <span>可用: <?php echo $diskUsage['percentFree']; ?>%</span>
                        </div>
                    </div>
                </div>
            </div>
            
            <div class="col-md-6">
                <div class="card">
                    <div class="card-header">磁盘使用分布</div>
                    <div class="card-body">
                        <div class="chart-container">
                            <canvas id="diskChart"></canvas>
                        </div>
                    </div>
                </div>
            </div>
        </div>
         
        <div class="row">
            <div class="col-md-6">
                <div class="card">
                    <div class="card-header">系统信息</div>
                    <div class="card-body">
                        <div class="system-info">
                            <div class="system-info-item">
                                <span class="system-info-label">操作系统:</span>
                                <span class="system-info-value"><?php echo $systemInfo['os']; ?></span>
                            </div>
                            <div class="system-info-item">
                                <span class="system-info-label">PHP版本:</span>
                                <span class="system-info-value"><?php echo $systemInfo['php_version']; ?></span>
                            </div>
                            <div class="system-info-item">
                                <span class="system-info-label">服务器软件:</span>
                                <span class="system-info-value"><?php echo $systemInfo['server_software']; ?></span>
                            </div>
                            <div class="system-info-item">
                                <span class="system-info-label">服务器时间:</span>
                                <span class="system-info-value"><?php echo $systemInfo['server_time']; ?></span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            
            <div class="col-md-6">
                <div class="card">
                    <div class="card-header">磁盘空间详情</div>
                    <div class="card-body">
                        <table class="table table-striped">
                            <tbody>
                                <tr>
                                    <td>总空间</td>
                                    <td class="text-end"><?php echo $diskUsage['total']; ?></td>
                                </tr>
                                <tr>
                                    <td>已用空间</td>
                                    <td class="text-end text-danger"><?php echo $diskUsage['used']; ?></td>
                                </tr>
                                <tr>
                                    <td>可用空间</td>
                                    <td class="text-end text-success"><?php echo $diskUsage['free']; ?></td>
                                </tr>
                                <tr>
                                    <td>使用率</td>
                                    <td class="text-end"><?php echo $diskUsage['percent']; ?>%</td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script>
        // 磁盘使用饼图
        const ctx = document.getElementById('diskChart').getContext('2d');
        const diskChart = new Chart(ctx, {
            type: 'pie',
            data: {
                labels: ['已用空间', '可用空间'],
                datasets: [{
                    data: [<?php echo $diskUsage['percent']; ?>, <?php echo $diskUsage['percentFree']; ?>],
                    backgroundColor: [
                        '#dc3545',
                        '#28a745'
                    ],
                    borderWidth: 0
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        position: 'bottom',
                        labels: {
                            font: {
                                size: 14
                            },
                            padding: 20
                        }
                    },
                    tooltip: {
                        callbacks: {
                            label: function(context) {
                                return context.label + ': ' + context.raw + '%';
                            }
                        }
                    }
                }
            }
        });
    </script>
</body>
</html>
苦力怕论坛,感谢有您~

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

| 由 木韩网络 提供支持 | GMT+8, 2026-2-3 03:36

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4