Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】disk_total_space()関数の使い方

disk_total_space関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

disk_total_space関数は、指定されたディレクトリが存在するファイルシステムの総容量を取得する関数です。この関数は、サーバーやシステムのリソースを管理する際などに、ディスクの物理的な最大容量を確認するために利用されます。

引数には、容量を調べたいディレクトリのパスを文字列型で指定します。例えば、Linux環境であれば/(ルートディレクトリ)、Windows環境であればC:/のように指定することで、そのパスが属するファイルシステムの総容量が得られます。このパスは実際に存在するディレクトリである必要があり、存在しないパスを指定した場合はエラーとなることがあります。

関数が成功すると、指定されたパスが属するファイルシステムの合計容量がバイト単位の整数値で返されます。この戻り値は非常に大きな数値になることが多いため、表示する際にはギガバイト(GB)やテラバイト(TB)といった、人間が読みやすい単位に変換することが一般的です。もし関数が失敗した場合、例えば指定されたディレクトリが存在しない、またはアクセス権がないなどの理由で情報を取得できない場合には、falseが返されます。そのため、関数がfalseを返さないかを確認し、適切なエラーハンドリングを行うことが重要です。

この関数はPHP 8以降で利用可能です。システムのリソース状況を監視したり、ユーザーがファイルをアップロードする前に利用可能なディスク容量をチェックしたりするなど、様々なシステム管理の場面で活用されます。disk_free_space関数と組み合わせることで、総容量と現在の空き容量の両方を把握することが可能になります。

構文(syntax)

1<?php
2$directory_path = '/';
3$total_disk_space_bytes = disk_total_space($directory_path);
4?>

引数(parameters)

string $directory

  • string $directory: サイズを取得したいディレクトリのパスを指定する文字列

戻り値(return)

int|false

指定されたパスのディスク全体の容量をバイト単位の整数で返します。エラーが発生した場合は false を返します。

サンプルコード

PHPでディスク容量を取得する

1<?php
2
3/**
4 * バイト数を人間が読みやすい形式に変換するヘルパー関数。
5 * 例: 1073741824バイト -> "1.00 GB"
6 *
7 * @param int $bytes バイト数
8 * @param int $precision 小数点以下の桁数
9 * @return string フォーマットされた文字列
10 */
11function formatBytes(int $bytes, int $precision = 2): string
12{
13    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
14
15    // 負のバイト数は0として扱う
16    $bytes = max($bytes, 0);
17
18    // バイト数が0の場合、'0 B'を返す
19    if ($bytes === 0) {
20        return '0 B';
21    }
22
23    // 単位を決定
24    $pow = floor(log($bytes, 1024));
25    $pow = min($pow, count($units) - 1); // 単位配列の範囲内に収める
26
27    // 適切な単位に変換し、指定された精度で丸める
28    $convertedBytes = $bytes / (1024 ** $pow);
29
30    return round($convertedBytes, $precision) . ' ' . $units[$pow];
31}
32
33// ディスク容量を取得する対象のディレクトリを指定します。
34// Unix-likeシステム(Linux, macOSなど)では通常 '/' (ルートディレクトリ) を指定します。
35// Windowsシステムでは 'C:/' や 'D:/' など、ドライブレターを指定します。
36// 現在のスクリプトがあるディレクトリの情報を取得したい場合は '__DIR__' を指定します。
37$directory = '/'; 
38
39echo "指定ディレクトリ: " . $directory . PHP_EOL;
40
41// ----------------------------------------------------
42// disk_total_space 関数の使用例
43// 指定されたディレクトリが属するファイルシステムの総容量を取得します。
44// ----------------------------------------------------
45$totalSpace = disk_total_space($directory);
46
47if ($totalSpace === false) {
48    // エラーが発生した場合(ディレクトリが存在しない、アクセス権がないなど)
49    echo "エラー: ディスクの総容量を取得できませんでした。" . PHP_EOL;
50    echo "指定されたディレクトリが存在するか、PHPがアクセス権を持っているか確認してください。" . PHP_EOL;
51} else {
52    // 正常に取得できた場合
53    echo "総容量: " . formatBytes($totalSpace) . PHP_EOL;
54
55    // ----------------------------------------------------
56    // disk_free_space 関数の使用例
57    // 指定されたディレクトリが属するファイルシステムの空き容量を取得します。
58    // キーワード 'disk_free_space' に関連する機能です。
59    // ----------------------------------------------------
60    $freeSpace = disk_free_space($directory);
61
62    if ($freeSpace === false) {
63        // エラーが発生した場合
64        echo "エラー: ディスクの空き容量を取得できませんでした。" . PHP_EOL;
65        echo "指定されたディレクトリが存在するか、PHPがアクセス権を持っているか確認してください。" . PHP_EOL;
66    } else {
67        // 正常に取得できた場合
68        echo "空き容量: " . formatBytes($freeSpace) . PHP_EOL;
69
70        // 総容量と空き容量から使用済み容量を計算
71        $usedSpace = $totalSpace - $freeSpace;
72        echo "使用済み容量: " . formatBytes($usedSpace) . PHP_EOL;
73    }
74}
75

PHPのdisk_total_space関数は、指定されたディレクトリが存在するファイルシステムの総容量をバイト単位で取得する機能を提供します。引数$directoryには、容量を調べたいディレクトリのパスを文字列で指定します。例えば、LinuxやmacOSでは'/'(ルートディレクトリ)、Windowsでは'C:/'のようにドライブレターを含めて指定します。現在のスクリプトがあるディレクトリの情報を取得したい場合は、__DIR__を利用できます。

この関数の戻り値は、成功すると総容量が整数(int)で返されますが、指定されたディレクトリが存在しない、またはPHPにアクセス権がないなどの理由で容量の取得に失敗した場合はfalseが返されます。そのため、戻り値がfalseでないか必ず確認し、適切なエラーハンドリングを行うことが重要です。

サンプルコードでは、disk_total_space関数に加え、関連するdisk_free_space関数を用いてファイルシステムの空き容量も取得しています。これにより、総容量から空き容量を差し引いて使用済み容量を計算することが可能です。取得した容量は大きなバイト数となるため、サンプルコードのformatBytesヘルパー関数は、これらの数値を「GB」や「MB」といった人間が読みやすい形式に変換して表示するのに役立ちます。これらの関数は、システム監視やアプリケーションのディスク使用状況の確認など、多岐にわたるシーンで利用されます。

このサンプルコードを利用する上で特に重要なのは、disk_total_spacedisk_free_space関数が、何らかのエラーが発生した場合にfalseを返す点です。そのため、必ず戻り値がfalseでないかを厳密にチェックし、適切にエラー処理を行うことで、プログラムの予期せぬ停止を防ぎます。引数に指定する$directoryは、PHPがアクセス権を持つ実在するディレクトリのパスを、OS(WindowsはC:/、Linuxは/など)に合わせた形式で正確に指定する必要があります。存在しないパスやアクセス権がない場合、これらの関数はfalseを返します。取得される容量はバイト単位の整数値なので、人間が読みやすいようにformatBytes関数のような形式変換処理を加えることが推奨されます。また、これらの関数は指定ディレクトリの容量ではなく、そのディレクトリが属するファイルシステム全体の容量情報を示すことにご留意ください。

PHPでディスク使用状況を取得する

1<?php
2
3/**
4 * 指定されたディレクトリが存在するディスクドライブの総容量、空き容量、使用済み容量を表示します。
5 *
6 * この関数は `disk_total_space` と `disk_free_space` を利用して、
7 * ディスクの使用状況を分かりやすい形式で出力します。
8 *
9 * @param string $directoryPath 容量を取得したいディレクトリのパス
10 * @return void
11 */
12function displayDiskUsage(string $directoryPath): void
13{
14    // ディスクの総容量を取得します。
15    // 成功した場合はバイト単位の整数が、失敗した場合は false が返されます。
16    $totalSpace = disk_total_space($directoryPath);
17
18    if ($totalSpace === false) {
19        echo "エラー: ディレクトリ '{$directoryPath}' のディスク総容量を取得できませんでした。\n";
20        echo "パスが正しいか、またはスクリプトにアクセス権限があるか確認してください。\n";
21        return;
22    }
23
24    // ディスクの空き容量を取得します。
25    // 成功した場合はバイト単位の整数が、失敗した場合は false が返されます。
26    $freeSpace = disk_free_space($directoryPath);
27
28    if ($freeSpace === false) {
29        echo "エラー: ディレクトリ '{$directoryPath}' のディスク空き容量を取得できませんでした。\n";
30        echo "パスが正しいか、またはスクリプトにアクセス権限があるか確認してください。\n";
31        return;
32    }
33
34    // バイト単位の値を読みやすい形式(KB, MB, GB, TB)に変換するヘルパー関数です。
35    // 例えば、1024バイトを1KB、1024KBを1MBと表示します。
36    $formatBytes = function (int $bytes): string {
37        $units = ['B', 'KB', 'MB', 'GB', 'TB'];
38        $i = 0;
39        while ($bytes >= 1024 && $i < count($units) - 1) {
40            $bytes /= 1024;
41            $i++;
42        }
43        return round($bytes, 2) . ' ' . $units[$i];
44    };
45
46    // 取得した情報を整形して出力します。
47    echo "--- ディスク使用状況 ---\n";
48    echo "対象ディレクトリ: {$directoryPath}\n";
49    echo "総容量: " . $formatBytes($totalSpace) . "\n";
50    echo "空き容量: " . $formatBytes($freeSpace) . "\n";
51    echo "使用済み容量: " . $formatBytes($totalSpace - $freeSpace) . "\n";
52}
53
54// スクリプトが置かれているディレクトリのディスク使用状況を表示する例です。
55// 通常、このディレクトリはウェブサーバーのドキュメントルートやアプリケーションのパスになります。
56// 必要に応じて、'/var/www/html' や 'C:\\' など、別のパスを指定することも可能です。
57displayDiskUsage(__DIR__);

PHP 8のdisk_total_space関数は、指定したディレクトリが存在するディスクドライブの総容量をバイト単位で取得するために使用します。この関数はstring $directoryという引数を取り、容量を取得したいディレクトリのパスを指定します。成功した場合はint型で総容量のバイト数を返し、失敗した場合はfalseを返します。

提供されたサンプルコードでは、disk_total_spaceと関連するdisk_free_space関数を組み合わせて、ディスクの総容量、空き容量、そしてそこから算出される使用済み容量を表示しています。まず、これらの関数で容量を取得し、もし取得に失敗した場合はエラーメッセージを表示して処理を中断するようになっています。これは、パスの誤りやアクセス権限がない場合でも、プログラムが予期せぬ動作をしないようにする重要なエラーハンドリングです。取得した容量はバイト単位の大きな数値であるため、サンプルコード内のヘルパー関数が、KB、MB、GBといった人間が読みやすい形式に変換して出力します。このような処理は、サーバーのディスク使用状況を監視したり、アプリケーションのログファイルやアップロードファイルの管理に必要なディスク容量を確認したりする際に非常に役立ちます。

disk_total_space関数は、指定したディレクトリへのアクセスに失敗した場合、数値ではなくfalseを返します。サンプルコードのように、必ずこのfalseをチェックし、適切にエラー処理を行うことが重要です。引数に渡すディレクトリパスは、スクリプトが動作している環境から見て正しく、かつアクセス権限があるパスを指定してください。特にウェブサーバー上で実行する場合、サーバーのユーザー(例: www-data)が必要な権限を持っているか確認が必要です。関数が返す値はバイト単位なので、人間が読みやすい形式に変換する処理を実装すると便利です。また、この関数は指定したディレクトリ「が存在するディスクドライブ」全体の容量を返すため、指定ディレクトリ自身の容量を示すものではない点にもご留意ください。

関連コンテンツ

関連IT用語

関連プログラミング言語