Эффективное управление дисковым пространством пользователей имеет решающее значение для поддержания работоспособности серверной среды. В этой статье рассматриваются несколько методов на основе PHP для получения информации о квотах пользователей в системе Linux, адаптированных к различным сценариям и предпочтениям. Мы рассмотрим методы, начиная от использования стандартных команд Linux и заканчивая использованием решений баз данных и функций IMAP, с упором на безопасную и надежную реализацию.
Содержание
- Использование
repquota
для получения отчета о квотах по всей системе - Оценка использования с помощью
du
- Получение квот из базы данных MySQL
- Доступ к квотам почтовых ящиков IMAP
- Планирование проверок квот с помощью Cron
Использование repquota
для получения отчета о квотах по всей системе
Команда repquota -a
предоставляет подробный отчет о квотах пользователей в вашей файловой системе. PHP может выполнить эту команду с помощью shell_exec()
и разобрать полученный результат. Важно с точки зрения безопасности: Всегда очищайте пользовательские данные перед включением их в shell-команды, чтобы предотвратить уязвимости, связанные с инъекцией команд.
&1'); // 2>&1 перенаправляет stderr в stdout для лучшей обработки ошибок
if ($output === null || strpos($output, 'repquota: ') === 0) { //Проверка ошибок выполнения repquota
error_log("Ошибка выполнения 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 для отслеживания квот пользователей, расширение MySQLi в PHP предлагает удобный способ получения этой информации. Не забудьте использовать параметризованные запросы, чтобы предотвратить 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. Shell-скрипт может запускать repquota
, а скрипт PHP может обрабатывать вывод, создавая отчеты или оповещения. Это позволяет проводить регулярные проверки без постоянного выполнения PHP-процессов.