Server Management

Gestión de Cuotas de Usuario en PHP y Linux

Spread the love

Gestionar eficientemente el espacio en disco de los usuarios es vital para mantener un entorno de servidor saludable. Este artículo explora varios métodos basados en PHP para recuperar información de cuotas de usuario en un sistema Linux, atendiendo a diversos escenarios y preferencias. Cubriremos técnicas que van desde el aprovechamiento de comandos estándar de Linux hasta la utilización de soluciones de bases de datos y funciones IMAP, centrándonos en una implementación segura y robusta.

Tabla de Contenido

Usando repquota para informes de cuotas en todo el sistema

El comando repquota -a proporciona un informe completo de las cuotas de usuario en todo el sistema de archivos. PHP puede ejecutar este comando usando shell_exec() y analizar la salida resultante. Nota de seguridad crítica: Siempre desinfecte las entradas del usuario antes de incorporarlas en comandos shell para evitar vulnerabilidades de inyección de comandos.


&1'); // 2>&1 redirige stderr a stdout para una mejor gestión de errores
if ($output === null || strpos($output, 'repquota: ') === 0) { //Comprueba errores en la ejecución de repquota
    error_log("Error al ejecutar repquota: " . $output); 
    echo "Error al recuperar la información de la cuota.";
    exit(1);
}

$lines = explode("n", trim($output));
$quotas = [];
foreach ($lines as $line) {
    if (strpos($line, "/") !== false) { //Omite las líneas de encabezado
        continue;
    }
    $parts = preg_split('/s+/', $line); //Usa preg_split para un manejo robusto de espacios
    if(count($parts) > 5){ //Asegura que existan suficientes datos
        $username = $parts[0];
        $used = $parts[1];
        $limit = $parts[2];
        $quotas[$username] = ['used' => $used, 'limit' => $limit];
    }
}


print_r($quotas); //Muestra los resultados
?>

Estimación del uso con du

El comando du -sh proporciona un resumen del uso del disco para un directorio dado. Si bien no es una recuperación directa de la cuota, es útil para estimar el espacio en disco consumido por el directorio de inicio de un usuario. Recuerde manejar posibles errores, como que el directorio no exista.


&1");
    if ($output === null || strpos($output, "du: cannot access") === 0) {
        return false; //Maneja los errores correctamente
    }
    list($size, $path) = explode("t", trim($output));
    return $size;
}

$username = "user1";
$homeDir = "/home/{$username}";
$size = getDirectorySize($homeDir);
if ($size !== false) {
    echo "Tamaño del directorio de inicio de {$username}: {$size}n";
} else {
    echo "Error al obtener el tamaño del directorio para {$username}n";
}
?>

Recuperando cuotas desde una base de datos MySQL

Si mantiene una base de datos MySQL para realizar un seguimiento de las cuotas de usuario, la extensión MySQLi de PHP ofrece una forma conveniente de recuperar esta información. Recuerde usar consultas parametrizadas para evitar la inyección SQL.


connect_errno) {
    die("Error de conexión: " . $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 "Cuota de {$username}: " . $quota . "n";
?>

Accediendo a cuotas de buzón IMAP

La función imap_get_quota() está específicamente diseñada para recuperar cuotas de buzón para servidores IMAP. Esto es relevante si administra cuentas de correo electrónico y sus límites de almacenamiento.


usage . " bytes de " . $quota->limit . " bytesn";
    imap_close($imapStream);
} else {
    echo "Error al conectar al servidor IMAP: " . imap_last_error() . "n";
}
?>

Programando verificaciones de cuotas con Cron

Para la monitorización automatizada de cuotas, aproveche los trabajos cron. Un script shell puede ejecutar repquota, y un script PHP puede procesar la salida, generando informes o alertas. Esto permite realizar comprobaciones regulares sin la ejecución constante de procesos PHP.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *