La gestion efficace de l’espace disque des utilisateurs est essentielle au maintien d’un environnement serveur sain. Cet article explore plusieurs méthodes basées sur PHP pour récupérer les informations de quota utilisateur sur un système Linux, répondant à divers scénarios et préférences. Nous aborderons des techniques allant de l’utilisation de commandes Linux standard à l’utilisation de solutions de bases de données et de fonctions IMAP, en mettant l’accent sur une implémentation sécurisée et robuste.
Table des matières
- Utilisation de
repquota
pour les rapports de quota système - Estimation de l’utilisation avec
du
- Récupération des quotas depuis une base de données MySQL
- Accès aux quotas de boîte aux lettres IMAP
- Planification des vérifications de quota avec Cron
Utilisation de repquota
pour les rapports de quota système
La commande repquota -a
fournit un rapport complet des quotas utilisateurs sur votre système de fichiers. PHP peut exécuter cette commande à l’aide de shell_exec()
et analyser la sortie résultante. Note de sécurité critique : Toujours désinfecter les entrées utilisateur avant de les intégrer dans les commandes shell pour éviter les failles d’injection de commandes.
&1'); // 2>&1 redirige stderr vers stdout pour une meilleure gestion des erreurs
if ($output === null || strpos($output, 'repquota: ') === 0) { //Vérification des erreurs d'exécution de repquota
error_log("Erreur lors de l'exécution de repquota : " . $output);
echo "Erreur lors de la récupération des informations de quota.";
exit(1);
}
$lines = explode("n", trim($output));
$quotas = [];
foreach ($lines as $line) {
if (strpos($line, "/") !== false) { //Ignorer les lignes d'en-tête
continue;
}
$parts = preg_split('/s+/', $line); //Utiliser preg_split pour une gestion robuste des espaces
if(count($parts) > 5){ //S'assurer que suffisamment de données existent
$username = $parts[0];
$used = $parts[1];
$limit = $parts[2];
$quotas[$username] = ['used' => $used, 'limit' => $limit];
}
}
print_r($quotas); //Afficher les résultats
?>
Estimation de l’utilisation avec du
La commande du -sh
fournit un résumé de l’utilisation du disque pour un répertoire donné. Bien qu’il ne s’agisse pas d’une récupération directe de quota, elle est utile pour estimer l’espace disque consommé par le répertoire personnel d’un utilisateur. N’oubliez pas de gérer les erreurs potentielles, telles que l’inexistence du répertoire.
&1");
if ($output === null || strpos($output, "du: cannot access") === 0) {
return false; //Gérer les erreurs avec élégance
}
list($size, $path) = explode("t", trim($output));
return $size;
}
$username = "user1";
$homeDir = "/home/{$username}";
$size = getDirectorySize($homeDir);
if ($size !== false) {
echo "Taille du répertoire personnel de {$username} : {$size}n";
} else {
echo "Erreur lors de la récupération de la taille du répertoire pour {$username}n";
}
?>
Récupération des quotas depuis une base de données MySQL
Si vous maintenez une base de données MySQL pour suivre les quotas utilisateurs, l’extension MySQLi de PHP offre un moyen pratique de récupérer ces informations. N’oubliez pas d’utiliser des requêtes paramétrées pour éviter l’injection SQL.
connect_errno) {
die("Échec de la connexion : " . $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 "Quota de {$username} : " . $quota . "n";
?>
Accès aux quotas de boîte aux lettres IMAP
La fonction imap_get_quota()
est spécialement conçue pour récupérer les quotas de boîte aux lettres pour les serveurs IMAP. Ceci est pertinent si vous gérez des comptes de messagerie et leurs limites de stockage.
usage . " octets sur " . $quota->limit . " octetsn";
imap_close($imapStream);
} else {
echo "Échec de la connexion au serveur IMAP : " . imap_last_error() . "n";
}
?>
Planification des vérifications de quota avec Cron
Pour la surveillance automatisée des quotas, utilisez les tâches cron. Un script shell peut exécuter repquota
, et un script PHP peut traiter la sortie, générer des rapports ou des alertes. Cela permet des vérifications régulières sans exécution constante de processus PHP.