ユーザーディスク容量の効率的な管理は、健全なサーバー環境を維持するために不可欠です。この記事では、さまざまなシナリオと好みに対応した、Linuxシステムでのユーザークォータ情報を取得するための、PHPベースのいくつかの方法を探ります。標準的なLinuxコマンドの活用から、データベースソリューションやIMAP関数の利用まで、安全で堅牢な実装に焦点を当てた手法を網羅します。
目次
repquota
を使用したシステム全体のクォータレポートdu
を使用した使用量の推定- MySQLデータベースからのクォータの取得
- IMAPメールボックスクォータへのアクセス
- cronを使用したクォータチェックのスケジュール設定
repquota
を使用したシステム全体のクォータレポート
repquota -a
コマンドは、ファイルシステム全体にわたるユーザークォータの包括的なレポートを提供します。PHPはshell_exec()
を使用してこのコマンドを実行し、結果の出力を解析できます。重要なセキュリティに関する注意:コマンドインジェクションの脆弱性を防ぐために、シェルコマンドに組み込む前に、常にユーザー入力をサニタイズしてください。
&1'); // 2>&1はstderrをstdoutにリダイレクトしてエラー処理を改善します
if ($output === null || strpos($output, 'repquota: ') === 0) { // repquota実行時のエラーをチェックします
error_log("Error executing repquota: " . $output);
echo "クォータ情報の取得に失敗しました。";
exit(1);
}
$lines = explode("n", trim($output));
$quotas = [];
foreach ($lines as $line) {
if (strpos($line, "/") !== false) { // ヘッダー行をスキップします
continue;
}
$parts = preg_split('/s+/', $line); // 強力なスペース処理のためにpreg_splitを使用します
if(count($parts) > 5){ // 十分なデータが存在することを確認します
$username = $parts[0];
$used = $parts[1];
$limit = $parts[2];
$quotas[$username] = ['used' => $used, 'limit' => $limit];
}
}
print_r($quotas); // 結果を表示します
?>
du
を使用した使用量の推定
du -sh
コマンドは、特定のディレクトリのディスク使用量の要約を提供します。直接的なクォータ取得ではありませんが、ユーザーのホームディレクトリで使用されているディスク容量を推定するのに役立ちます。ディレクトリが存在しないなど、潜在的なエラーを処理することを忘れないでください。
&1");
if ($output === null || strpos($output, "du: cannot access") === 0) {
return false; // エラーを適切に処理します
}
list($size, $path) = explode("t", trim($output));
return $size;
}
$username = "user1";
$homeDir = "/home/{$username}";
$size = getDirectorySize($homeDir);
if ($size !== false) {
echo "{$username}のホームディレクトリサイズ: {$size}n";
} else {
echo "{$username}のディレクトリサイズの取得に失敗しましたn";
}
?>
MySQLデータベースからのクォータの取得
ユーザークォータを追跡するためにMySQLデータベースを維持している場合、PHPのMySQLi拡張機能は、この情報を取得するための便利な方法を提供します。SQLインジェクションを防ぐために、パラメーター化されたクエリを使用してください。
connect_errno) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT quota FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$username = "user1";
$stmt->execute();
$stmt->bind_result($quota);
$stmt->fetch();
$stmt->close();
$mysqli->close();
echo "{$username}のクォータ: " . $quota . "n";
?>
IMAPメールボックスクォータへのアクセス
imap_get_quota()
関数は、IMAPサーバーのメールボックスクォータを取得するために特別に設計されています。これは、メールアカウントとそのストレージ制限を管理する場合に関連します。
usage . " バイト中 " . $quota->limit . " バイト使用中n";
imap_close($imapStream);
} else {
echo "IMAPサーバーへの接続に失敗しました: " . imap_last_error() . "n";
}
?>
cronを使用したクォータチェックのスケジュール設定
自動化されたクォータ監視には、cronジョブを活用します。シェルスクリプトはrepquota
を実行でき、PHPスクリプトは出力を処理して、レポートやアラートを生成できます。これにより、PHPプロセスの継続的な実行なしで定期的なチェックが可能になります。