Gerenciar eficientemente o espaço em disco dos usuários é vital para manter um ambiente de servidor saudável. Este artigo explora vários métodos baseados em PHP para recuperar informações de cotas de usuários em um sistema Linux, atendendo a vários cenários e preferências. Abordaremos técnicas que vão desde o aproveitamento de comandos padrão do Linux até a utilização de soluções de banco de dados e funções IMAP, focando em uma implementação segura e robusta.
Sumário
- Usando
repquota
para Relatórios de Cotas em todo o Sistema - Estimativa de Uso com
du
- Recuperando Cotas de um Banco de Dados MySQL
- Acessando Cotas de Caixa Postal IMAP
- Agendamento de Verificações de Cotas com Cron
Usando repquota
para Relatórios de Cotas em todo o Sistema
O comando repquota -a
fornece um relatório completo das cotas de usuários em seu sistema de arquivos. O PHP pode executar este comando usando shell_exec()
e analisar a saída resultante. Nota de Segurança Crítica: Sempre sanitize as entradas do usuário antes de incorporá-las a comandos shell para evitar vulnerabilidades de injeção de comandos.
&1'); // 2>&1 redireciona stderr para stdout para melhor tratamento de erros
if ($output === null || strpos($output, 'repquota: ') === 0) { //Verifica erros na execução do repquota
error_log("Erro ao executar repquota: " . $output);
echo "Erro ao recuperar informações de cota.";
exit(1);
}
$lines = explode("n", trim($output));
$quotas = [];
foreach ($lines as $line) {
if (strpos($line, "/") !== false) { //Ignora linhas de cabeçalho
continue;
}
$parts = preg_split('/s+/', $line); //Usa preg_split para tratamento robusto de espaços
if(count($parts) > 5){ //Garante que dados suficientes existam
$username = $parts[0];
$used = $parts[1];
$limit = $parts[2];
$quotas[$username] = ['used' => $used, 'limit' => $limit];
}
}
print_r($quotas); //Exibe resultados
?>
Estimativa de Uso com du
O comando du -sh
fornece um resumo do uso do disco para um determinado diretório. Embora não seja uma recuperação direta de cota, é útil para estimar o espaço em disco consumido pelo diretório home de um usuário. Lembre-se de lidar com possíveis erros, como o diretório não existir.
&1");
if ($output === null || strpos($output, "du: cannot access") === 0) {
return false; //Trata erros com elegância
}
list($size, $path) = explode("t", trim($output));
return $size;
}
$username = "user1";
$homeDir = "/home/{$username}";
$size = getDirectorySize($homeDir);
if ($size !== false) {
echo "Tamanho do diretório home de {$username}: {$size}n";
} else {
echo "Erro ao obter o tamanho do diretório para {$username}n";
}
?>
Recuperando Cotas de um Banco de Dados MySQL
Se você mantém um banco de dados MySQL para rastrear cotas de usuários, a extensão MySQLi do PHP oferece uma maneira conveniente de recuperar essas informações. Lembre-se de usar consultas parametrizadas para evitar injeção de SQL.
connect_errno) {
die("Falha na conexão: " . $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 "Cota de {$username}: " . $quota . "n";
?>
Acessando Cotas de Caixa Postal IMAP
A função imap_get_quota()
é especificamente projetada para recuperar cotas de caixa postal para servidores IMAP. Isso é relevante se você gerencia contas de e-mail e seus limites de armazenamento.
usage . " bytes de " . $quota->limit . " bytesn";
imap_close($imapStream);
} else {
echo "Falha na conexão com o servidor IMAP: " . imap_last_error() . "n";
}
?>
Agendamento de Verificações de Cotas com Cron
Para monitoramento automatizado de cotas, utilize tarefas cron. Um script shell pode executar repquota
, e um script PHP pode processar a saída, gerando relatórios ou alertas. Isso permite verificações regulares sem execução constante de processos PHP.