Die effiziente Verwaltung des Benutzer-Festplattenspeichers ist entscheidend für eine gesunde Serverumgebung. Dieser Artikel untersucht verschiedene PHP-basierte Methoden zum Abrufen von Benutzer-Quoteninformationen auf einem Linux-System, die auf verschiedene Szenarien und Präferenzen zugeschnitten sind. Wir behandeln Techniken, die von der Nutzung standardmäßiger Linux-Befehle über die Verwendung von Datenbanklösungen bis hin zu IMAP-Funktionen reichen, wobei der Schwerpunkt auf einer sicheren und robusten Implementierung liegt.
Inhaltsverzeichnis
- Verwendung von
repquota
für systemweite Quotenberichte - Schätzung der Nutzung mit
du
- Abrufen von Quoten aus einer MySQL-Datenbank
- Zugriff auf IMAP-Postfachquoten
- Planung von Quotenprüfungen mit Cron
Verwendung von repquota
für systemweite Quotenberichte
Der Befehl repquota -a
liefert einen umfassenden Bericht über Benutzerquoten auf Ihrem Dateisystem. PHP kann diesen Befehl mit shell_exec()
ausführen und die resultierende Ausgabe verarbeiten. Wichtiger Sicherheitshinweis: Geben Sie Benutzereingaben immer vor der Einbindung in Shell-Befehle frei, um Command-Injection-Schwachstellen zu vermeiden.
&1'); // 2>&1 leitet stderr nach stdout zur besseren Fehlerbehandlung um
if ($output === null || strpos($output, 'repquota: ') === 0) { //Prüfung auf Fehler bei der repquota-Ausführung
error_log("Fehler bei der Ausführung von repquota: " . $output);
echo "Fehler beim Abrufen der Quoteninformationen.";
exit(1);
}
$lines = explode("n", trim($output));
$quotas = [];
foreach ($lines as $line) {
if (strpos($line, "/") !== false) { //Überspringen von Kopfzeilen
continue;
}
$parts = preg_split('/s+/', $line); //preg_split für robuste Leerzeichenbehandlung verwenden
if(count($parts) > 5){ //Sicherstellen, dass genügend Daten vorhanden sind
$username = $parts[0];
$used = $parts[1];
$limit = $parts[2];
$quotas[$username] = ['used' => $used, 'limit' => $limit];
}
}
print_r($quotas); //Ergebnisse anzeigen
?>
Schätzung der Nutzung mit du
Der Befehl du -sh
liefert eine Zusammenfassung der Festplattennutzung für ein gegebenes Verzeichnis. Obwohl es sich nicht um einen direkten Quotenabruf handelt, ist er nützlich, um den von einem Benutzer-Home-Verzeichnis verbrauchten Festplattenspeicher zu schätzen. Denken Sie daran, potenzielle Fehler, wie z. B. das Nichtvorhandensein des Verzeichnisses, zu behandeln.
&1");
if ($output === null || strpos($output, "du: cannot access") === 0) {
return false; //Fehlerbehandlung
}
list($size, $path) = explode("t", trim($output));
return $size;
}
$username = "user1";
$homeDir = "/home/{$username}";
$size = getDirectorySize($homeDir);
if ($size !== false) {
echo "Festplattengröße des Home-Verzeichnisses von {$username}: {$size}n";
} else {
echo "Fehler beim Abrufen der Verzeichnisgröße für {$username}n";
}
?>
Abrufen von Quoten aus einer MySQL-Datenbank
Wenn Sie eine MySQL-Datenbank zur Verfolgung von Benutzerquoten verwenden, bietet die MySQLi-Erweiterung von PHP eine bequeme Möglichkeit, diese Informationen abzurufen. Verwenden Sie parametrisierte Abfragen, um SQL-Injection zu verhindern.
connect_errno) {
die("Verbindung fehlgeschlagen: " . $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 "Quote von {$username}: " . $quota . "n";
?>
Zugriff auf IMAP-Postfachquoten
Die Funktion imap_get_quota()
ist speziell zum Abrufen von Postfachquoten für IMAP-Server konzipiert. Dies ist relevant, wenn Sie E-Mail-Konten und deren Speichergrenzen verwalten.
usage . " Bytes von " . $quota->limit . " Bytesn";
imap_close($imapStream);
} else {
echo "Verbindung zum IMAP-Server fehlgeschlagen: " . imap_last_error() . "n";
}
?>
Planung von Quotenprüfungen mit Cron
Für die automatisierte Quotenüberwachung können Cron-Jobs verwendet werden. Ein Shell-Skript kann repquota
ausführen, und ein PHP-Skript kann die Ausgabe verarbeiten und Berichte oder Warnungen erstellen. Dies ermöglicht regelmäßige Prüfungen ohne ständige Ausführung von PHP-Prozessen.