Giới thiệu về hàm disk_total_space trong PHP
Bạn có biết cách kiểm tra dung lượng ổ đĩa tổng trên server bằng PHP không? Khi phát triển ứng dụng web, việc quản lý không gian lưu trữ đóng vai trò vô cùng quan trọng. Một server thiếu dung lượng có thể gây ra những sự cố nghiêm trọng như lỗi database, không thể upload file, hoặc thậm chí làm crash toàn bộ website.

Hàm disk_total_space() chính là công cụ hiệu quả giúp bạn lấy thông tin dung lượng ổ đĩa nhanh chóng và chính xác. Đây là một hàm built-in của PHP, được thiết kế đặc biệt để kiểm tra tổng dung lượng có sẵn trên một ổ đĩa hoặc thư mục cụ thể.
Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết cách sử dụng hàm disk_total_space(), so sánh với các hàm liên quan khác, và đặc biệt là những ví dụ thực tiễn mà bạn có thể áp dụng ngay vào dự án của mình. Hãy cùng khám phá nhé!
Cách sử dụng hàm disk_total_space() trong PHP
Tổng quan về hàm disk_total_space()
Hàm disk_total_space() có nhiệm vụ trả về tổng dung lượng của ổ đĩa (tính bằng byte) tại một đường dẫn cụ thể. Cú pháp của hàm này rất đơn giản và dễ hiểu:
disk_total_space(string $directory): int|false
Hàm nhận vào một tham số duy nhất là đường dẫn đến thư mục hoặc ổ đĩa mà bạn muốn kiểm tra. Kết quả trả về sẽ là một số nguyên biểu thị tổng dung lượng theo byte, hoặc false nếu có lỗi xảy ra.

Ví dụ minh họa cụ thể
Hãy xem một ví dụ cụ thể để hiểu rõ hơn cách hoạt động của hàm:
<?php
// Kiểm tra dung lượng tổng của ổ đĩa hiện tại
$totalBytes = disk_total_space('/');
if ($totalBytes !== false) {
echo "Tổng dung lượng ổ đĩa: " . $totalBytes . " bytes";
// Chuyển đổi sang GB để dễ đọc
$totalGB = round($totalBytes / (1024 * 1024 * 1024), 2);
echo "Tổng dung lượng: " . $totalGB . " GB";
} else {
echo "Không thể lấy thông tin dung lượng ổ đĩa";
}
?>
Để làm cho kết quả hiển thị thân thiện hơn với người dùng, bạn có thể tạo một hàm chuyển đổi đơn vị:
function formatBytes($bytes, $precision = 2) {
$units = array('B', 'KB', 'MB', 'GB', 'TB');
for ($i = 0; $bytes > 1024; $i++) {
$bytes /= 1024;
}
return round($bytes, $precision) . ' ' . $units[$i];
}
$totalSpace = disk_total_space('./');
echo "Dung lượng tổng: " . formatBytes($totalSpace);

Phân biệt các hàm liên quan: disk_total_space(), disk_free_space() và others
Sự khác biệt chính giữa disk_total_space() và disk_free_space()
Nhiều developer mới học PHP thường nhầm lẫn giữa hai hàm này. Hãy phân biệt rõ ràng:
- disk_total_space(): Trả về tổng dung lượng của ổ đĩa (đã sử dụng + còn trống)
- disk_free_space(): Chỉ trả về dung lượng còn trống có thể sử dụng
Ví dụ minh họa sự khác biệt:
$totalSpace = disk_total_space('./');
$freeSpace = disk_free_space('./');
$usedSpace = $totalSpace - $freeSpace;
echo "Tổng dung lượng: " . formatBytes($totalSpace) . "\n";
echo "Dung lượng đã dùng: " . formatBytes($usedSpace) . "\n";
echo "Dung lượng còn trống: " . formatBytes($freeSpace) . "\n";
// Tính phần trăm đã sử dụng
$usedPercent = ($usedSpace / $totalSpace) * 100;
echo "Phần trăm đã sử dụng: " . round($usedPercent, 2) . "%";

Các hàm PHP khác liên quan đến không gian ổ đĩa
PHP cung cấp thêm một số hàm khác để làm việc với ổ đĩa:
- diskfreespace(): Đây chính là alias (tên khác) của disk_free_space(), hoạt động hoàn toàn tương tự
- is_readable(): Kiểm tra xem đường dẫn có thể đọc được không
- file_exists(): Kiểm tra sự tồn tại của file hoặc thư mục
Khi nào nên sử dụng hàm nào? Điều này phụ thuộc vào mục đích cụ thể:
– Cần biết tổng dung lượng ổ đĩa → dùng disk_total_space()
– Cần kiểm tra còn bao nhiêu dung lượng trống → dùng disk_free_space()
– Cần cả hai thông tin → sử dụng kết hợp cả hai hàm
Những lưu ý khi sử dụng hàm disk_total_space()
Các lỗi thường gặp và cách xử lý
Một trong những lỗi phổ biến nhất là hàm trả về false thay vì giá trị dung lượng. Điều này thường xảy ra do:
- Đường dẫn không hợp lệ: Thư mục hoặc ổ đĩa không tồn tại
- Thiếu quyền truy cập: Server không có quyền đọc thư mục được chỉ định
- Lỗi hệ thống: Sự cố phần cứng hoặc hệ điều hành

Cách xử lý an toàn:
function getDiskTotalSpace($path) {
// Kiểm tra đường dẫn tồn tại
if (!file_exists($path)) {
throw new Exception("Đường dẫn không tồn tại: $path");
}
// Kiểm tra quyền đọc
if (!is_readable($path)) {
throw new Exception("Không có quyền đọc thư mục: $path");
}
$totalSpace = disk_total_space($path);
if ($totalSpace === false) {
throw new Exception("Không thể lấy thông tin dung lượng ổ đĩa");
}
return $totalSpace;
}
// Sử dụng an toàn
try {
$total = getDiskTotalSpace('./');
echo "Dung lượng tổng: " . formatBytes($total);
} catch (Exception $e) {
echo "Lỗi: " . $e->getMessage();
}
Tính tương thích trên các hệ thống
Sự khác biệt giữa Windows và Linux khi sử dụng hàm disk_total_space() cần được chú ý:
Trên Windows:
- Sử dụng ký hiệu ổ đĩa: ‘C:’, ‘D:’, ‘E:’
- Đường dẫn sử dụng backslash (\) hoặc forward slash (/)
Trên Linux/Unix:
- Sử dụng mount point: ‘/’, ‘/home’, ‘/var’
- Đường dẫn luôn sử dụng forward slash (/)

Để đảm bảo tương thích đa nền tảng:
function getCrossPlatformDiskSpace() {
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
// Windows
return disk_total_space('C:');
} else {
// Linux/Unix
return disk_total_space('/');
}
}
Ứng dụng thực tế: Xây dựng chức năng kiểm tra dung lượng ổ đĩa trên website
Mục đích và lợi ích của việc kiểm tra dung lượng ổ đĩa
Việc kiểm tra dung lượng ổ đĩa mang lại nhiều lợi ích thiết thực:
- Quản trị server hiệu quả: Giúp admin theo dõi và dự đoán khi nào cần nâng cấp dung lượng
- Cảnh báo sớm: Thông báo khi dung lượng còn lại dưới ngưỡng nguy hiểm
- Tối ưu hiệu suất: Tránh tình trạng server bị đầy ổ cứng gây crash ứng dụng
- Lập kế hoạch backup: Đảm bảo đủ không gian cho việc sao lưu dữ liệu

Mã nguồn mẫu và xử lý kết quả trả về
Dưới đây là một ví dụ hoàn chỉnh về cách xây dựng chức năng kiểm tra dung lượng:
class DiskSpaceMonitor {
private $warningThreshold = 90; // Cảnh báo khi dùng > 90%
private $criticalThreshold = 95; // Nguy hiểm khi dùng > 95%
public function getDiskInfo($path = '/') {
$totalSpace = disk_total_space($path);
$freeSpace = disk_free_space($path);
if ($totalSpace === false || $freeSpace === false) {
return false;
}
$usedSpace = $totalSpace - $freeSpace;
$usedPercent = ($usedSpace / $totalSpace) * 100;
return [
'total' => $totalSpace,
'used' => $usedSpace,
'free' => $freeSpace,
'used_percent' => $usedPercent,
'status' => $this->getStatus($usedPercent)
];
}
private function getStatus($usedPercent) {
if ($usedPercent >= $this->criticalThreshold) {
return 'critical';
} elseif ($usedPercent >= $this->warningThreshold) {
return 'warning';
}
return 'normal';
}
public function displayReport($path = '/') {
$info = $this->getDiskInfo($path);
if (!$info) {
echo "<div class='error'>Không thể lấy thông tin ổ đĩa</div>";
return;
}
$statusClass = $info['status'];
$statusText = [
'normal' => 'Bình thường',
'warning' => 'Cảnh báo',
'critical' => 'Nguy hiểm'
];
echo "<div class='disk-report $statusClass'>";
echo "<h3>Báo cáo dung lượng ổ đĩa</h3>";
echo "<p>Tổng dung lượng: " . $this->formatBytes($info['total']) . "</p>";
echo "<p>Đã sử dụng: " . $this->formatBytes($info['used']) . " (" .
round($info['used_percent'], 2) . "%)</p>";
echo "<p>Còn trống: " . $this->formatBytes($info['free']) . "</p>";
echo "<p>Trạng thái: <span class='status'>" .
$statusText[$info['status']] . "</span></p>";
echo "</div>";
}
private function formatBytes($bytes) {
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
for ($i = 0; $bytes > 1024; $i++) {
$bytes /= 1024;
}
return round($bytes, 2) . ' ' . $units[$i];
}
}
// Sử dụng
$monitor = new DiskSpaceMonitor();
$monitor->displayReport();

Common Issues và Troubleshooting
Hàm trả về false liên tục
Khi gặp vấn đề hàm luôn trả về false, hãy thực hiện các bước debug sau:
function debugDiskSpace($path) {
echo "Kiểm tra đường dẫn: $path\n";
// Bước 1: Kiểm tra đường dẫn tồn tại
if (!file_exists($path)) {
echo "❌ Đường dẫn không tồn tại\n";
return;
}
echo "✅ Đường dẫn tồn tại\n";
// Bước 2: Kiểm tra quyền đọc
if (!is_readable($path)) {
echo "❌ Không có quyền đọc\n";
return;
}
echo "✅ Có quyền đọc\n";
// Bước 3: Kiểm tra loại đường dẫn
if (is_file($path)) {
echo "ℹ️ Đây là file, chuyển sang thư mục cha\n";
$path = dirname($path);
}
// Bước 4: Thử gọi hàm
$result = disk_total_space($path);
if ($result === false) {
echo "❌ Hàm trả về false - có thể do lỗi hệ thống\n";
} else {
echo "✅ Thành công: " . formatBytes($result) . "\n";
}
}

Sai số trong kết quả trên các hệ điều hành khác nhau
Các hệ điều hành khác nhau có thể cho kết quả khác nhau do:
- Cách tính dung lượng cluster
- Phương thức quản lý file system
- Cơ chế phân quyền khác nhau
Giải pháp tốt nhất là test trên nhiều môi trường trước khi deploy production.
Best Practices
Để sử dụng hàm disk_total_space() một cách hiệu quả và an toàn, hãy tuân thủ những nguyên tắc sau:
1. Luôn kiểm tra đường dẫn đầu vào:
function safeDiskTotalSpace($path) {
if (empty($path) || !is_string($path)) {
throw new InvalidArgumentException('Đường dẫn không hợp lệ');
}
// Tiếp tục xử lý...
}
2. Không sử dụng trong vòng lặp lớn:
Hàm này có thể tốn tài nguyên hệ thống, tránh gọi nhiều lần không cần thiết:
// ❌ Không nên làm
for ($i = 0; $i < 1000; $i++) {
$space = disk_total_space('./');
}
// ✅ Nên làm
$space = disk_total_space('./');
for ($i = 0; $i < 1000; $i++) {
// Sử dụng $space đã lấy được
}
3. Xử lý ngoại lệ khi hàm trả về false:
$totalSpace = disk_total_space($path);
if ($totalSpace === false) {
error_log("Không thể lấy dung lượng ổ đĩa cho: $path");
// Xử lý fallback hoặc thông báo lỗi
}
4. Tách riêng logic kiểm tra dung lượng:
Tạo class hoặc function riêng để dễ dàng bảo trì và tái sử dụng code.
5. Cân nhắc thêm cảnh báo tự động:
if ($usedPercent > 90) {
// Gửi email cảnh báo
mail($adminEmail, 'Cảnh báo dung lượng ổ đĩa', $message);
}

Kết luận
Hàm disk_total_space() thực sự là một công cụ đơn giản nhưng vô cùng hiệu quả trong việc quản lý dung lượng ổ đĩa bằng PHP. Qua bài viết này, chúng ta đã cùng tìm hiểu từ cách sử dụng cơ bản đến những ứng dụng nâng cao trong thực tế.
Việc hiểu rõ cách hoạt động của disk_total_space() cùng với các hàm liên quan như disk_free_space() sẽ giúp bạn viết code chuẩn hơn, tránh được những lỗi không đáng có. Đặc biệt, khi kết hợp với các best practices mà chúng ta đã thảo luận, bạn hoàn toàn có thể xây dựng một hệ thống giám sát dung lượng ổ cứng ổn định và tương thích đa nền tảng.

Hãy bắt đầu áp dụng ngay những ví dụ minh họa trong bài viết này vào dự án của bạn. Từ việc kiểm tra dung lượng đơn giản cho đến xây dựng dashboard giám sát hoàn chỉnh, disk_total_space() sẽ là người bạn đồng hành đáng tin cậy trong hành trình phát triển ứng dụng web của bạn.
Bạn muốn nhận thêm tài nguyên và ví dụ nâng cao? Đừng ngần ngại theo dõi các bài viết tiếp theo trên BUIMANHDUC.COM hoặc trao đổi trực tiếp để cùng phát triển kỹ năng lập trình PHP thực chiến. Chúng ta sẽ tiếp tục khám phá những chủ đề thú vị khác về WordPress, hosting và digital marketing!
Chia sẻ Tài liệu học PHP