Sağlıklı bir sunucu ortamını korumak için kullanıcı disk alanının verimli bir şekilde yönetilmesi hayati önem taşır. Bu makale, çeşitli senaryolara ve tercihlere hizmet eden, Linux sisteminde kullanıcı kota bilgilerini almak için çeşitli PHP tabanlı yöntemleri inceliyor. Güvenli ve sağlam uygulamaya odaklanarak, standart Linux komutlarından veritabanı çözümlerine ve IMAP fonksiyonlarına kadar uzanan teknikleri ele alacağız.
İçerik Tablosu
- Sistem Çapında Kota Raporlaması için
repquota
Kullanımı du
ile Kullanım Tahmini- MySQL Veritabanından Kotların Alınması
- IMAP Posta Kutusu Kotlarına Erişim
- Cron ile Kota Kontrollerinin Zamanlanması
Sistem Çapında Kota Raporlaması için repquota
Kullanımı
repquota -a
komutu, dosya sisteminizdeki kullanıcı kotalarının kapsamlı bir raporunu sağlar. PHP, bu komutu shell_exec()
kullanarak çalıştırabilir ve sonuçta ortaya çıkan çıktıyı ayrıştırabilir. Kritik Güvenlik Notu: Komut enjeksiyon açıklarını önlemek için shell komutlarına dahil etmeden önce kullanıcı girdilerini her zaman temizleyin.
&1'); // 2>&1 stderr'ı stdout'a yönlendirir, daha iyi hata yönetimi için
if ($output === null || strpos($output, 'repquota: ') === 0) { // repquota çalıştırılmasındaki hataları kontrol et
error_log("repquota çalıştırılırken hata: " . $output);
echo "Kota bilgileri alınamadı.";
exit(1);
}
$lines = explode("n", trim($output));
$quotas = [];
foreach ($lines as $line) {
if (strpos($line, "/") !== false) { // Başlık satırlarını atla
continue;
}
$parts = preg_split('/s+/', $line); // Sağlam boşluk işleme için preg_split kullan
if(count($parts) > 5){ // Yeterli verinin varlığını sağla
$username = $parts[0];
$used = $parts[1];
$limit = $parts[2];
$quotas[$username] = ['used' => $used, 'limit' => $limit];
}
}
print_r($quotas); // Sonuçları göster
?>
du
ile Kullanım Tahmini
du -sh
komutu, belirli bir dizin için disk kullanımının bir özetini sağlar. Doğrudan kota alma olmamasına rağmen, bir kullanıcının ana dizini tarafından tüketilen disk alanını tahmin etmek için kullanışlıdır. Dizinin mevcut olmaması gibi olası hataları işlemeniz gerektiğini unutmayın.
&1");
if ($output === null || strpos($output, "du: erişilemiyor") === 0) {
return false; // Hataları düzgün bir şekilde işle
}
list($size, $path) = explode("t", trim($output));
return $size;
}
$username = "user1";
$homeDir = "/home/{$username}";
$size = getDirectorySize($homeDir);
if ($size !== false) {
echo "{$username}'in ana dizin boyutu: {$size}n";
} else {
echo "{$username} için dizin boyutu alınamadın";
}
?>
MySQL Veritabanından Kotların Alınması
Kullanıcı kotlarını izlemek için bir MySQL veritabanı tutuyorsanız, PHP’nin MySQLi uzantısı bu bilgileri almak için kullanışlı bir yol sunar. SQL enjeksiyonunu önlemek için parametreli sorgular kullanmayı unutmayın.
connect_errno) {
die("Bağlantı başarısız: " . $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}'in kotası: " . $quota . "n";
?>
IMAP Posta Kutusu Kotlarına Erişim
imap_get_quota()
fonksiyonu özellikle IMAP sunucuları için posta kutusu kotalarını almak için tasarlanmıştır. E-posta hesaplarını ve depolama limitlerini yönetiyorsanız bu ilgilidir.
usage . " bayt, " . $quota->limit . " bayt'tann";
imap_close($imapStream);
} else {
echo "IMAP sunucusuna bağlanılamadı: " . imap_last_error() . "n";
}
?>
Cron ile Kota Kontrollerinin Zamanlanması
Otomatik kota izleme için cron işlerini kullanın. Bir shell betiği repquota
çalıştırabilir ve bir PHP betiği çıktıyı işleyerek raporlar veya uyarılar oluşturabilir. Bu, sürekli PHP işlem yürütülmesi olmadan düzenli kontroller sağlar.