Merge pull request #714 from Bobselp/patch-1
Get mailbox size with maildirsize file
This commit is contained in:
@@ -38,26 +38,45 @@ class MailboxsizeCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
$_maildir = \Froxlor\FileDir::makeCorrectDir($maildir['maildirpath']);
|
$_maildir = \Froxlor\FileDir::makeCorrectDir($maildir['maildirpath']);
|
||||||
|
|
||||||
if (file_exists($_maildir) && is_dir($_maildir)) {
|
if (file_exists($_maildir) && is_dir($_maildir)) {
|
||||||
// mail-address allows many special characters, see http://en.wikipedia.org/wiki/Email_address#Local_part
|
$maildirsize = \Froxlor\FileDir::makeCorrectFile($_maildir . '/maildirsize');
|
||||||
$return = false;
|
|
||||||
$back = \Froxlor\FileDir::safe_exec('du -sk ' . escapeshellarg($_maildir), $return, array(
|
// When quota is enabled and maildirsize file exists, use that to calculate size
|
||||||
'|',
|
if (\Froxlor\Settings::Get('system.mail_quota_enabled') == 1 && file_exists($maildirsize)) {
|
||||||
'&',
|
\Froxlor\FroxlorLogger::getInstanceOf()->logAction(\Froxlor\FroxlorLogger::CRON_ACTION, LOG_NOTICE, 'found maildirsize file in ' . $_maildir);
|
||||||
'`',
|
$file = file($maildirsize, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||||
'$',
|
// Remove header
|
||||||
'~',
|
array_shift($file);
|
||||||
'?'
|
$emailusage = 0;
|
||||||
));
|
// Sum up all the changes (line 2 -> end)
|
||||||
foreach ($back as $backrow) {
|
foreach ($file as $line) {
|
||||||
$emailusage = explode(' ', $backrow);
|
$parts = explode(' ', $line);
|
||||||
|
if (!empty($parts[0])) {
|
||||||
|
$emailusage += floatval($parts[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// if quota is disabled or maildirsize file does not exist, compute with du
|
||||||
|
// mail-address allows many special characters, see http://en.wikipedia.org/wiki/Email_address#Local_part
|
||||||
|
$return = false;
|
||||||
|
$back = \Froxlor\FileDir::safe_exec('du -sk ' . escapeshellarg($_maildir), $return, array(
|
||||||
|
'|',
|
||||||
|
'&',
|
||||||
|
'`',
|
||||||
|
'$',
|
||||||
|
'~',
|
||||||
|
'?'
|
||||||
|
));
|
||||||
|
foreach ($back as $backrow) {
|
||||||
|
$emailusage = explode(' ', $backrow);
|
||||||
|
}
|
||||||
|
$emailusage = floatval($emailusage['0']);
|
||||||
|
|
||||||
|
// as freebsd does not have the -b flag for 'du' which gives
|
||||||
|
// the size in bytes, we use "-sk" for all and calculate from KiB
|
||||||
|
$emailusage *= 1024;
|
||||||
|
|
||||||
|
unset($back);
|
||||||
}
|
}
|
||||||
$emailusage = floatval($emailusage['0']);
|
|
||||||
|
|
||||||
// as freebsd does not have the -b flag for 'du' which gives
|
|
||||||
// the size in bytes, we use "-sk" for all and calculate from KiB
|
|
||||||
$emailusage *= 1024;
|
|
||||||
|
|
||||||
unset($back);
|
|
||||||
\Froxlor\Database\Database::pexecute($upd_stmt, array(
|
\Froxlor\Database\Database::pexecute($upd_stmt, array(
|
||||||
'size' => $emailusage,
|
'size' => $emailusage,
|
||||||
'id' => $maildir['id']
|
'id' => $maildir['id']
|
||||||
|
|||||||
Reference in New Issue
Block a user