Server Management

إدارة حصص المستخدمين في لينكس وبي إتش بي

Spread the love

تُعد إدارة مساحة القرص المستخدمة بكفاءة أمرًا حيويًا للحفاظ على بيئة خادم صحية. تستعرض هذه المقالة عدة طرق تعتمد على PHP لاسترداد معلومات حصة المستخدم على نظام Linux، لتناسب مختلف السيناريوهات والتفضيلات. سنغطي تقنيات تتراوح بين الاستفادة من أوامر Linux القياسية إلى استخدام حلول قواعد البيانات ووظائف IMAP، مع التركيز على التنفيذ الآمن والمتين.

محتويات

استخدام 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 باستمرار.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *