fixes #1300 fall back on exec(du) instead of pure PHP to calculate cache size

This algorithm does not work for Windows and when "exec" is disabled. But not having this cache size is not a major issue. What is a problem is when calculating the cache size breaks the execution, which must be avoided.
This commit is contained in:
plegall
2021-01-27 19:46:53 +01:00
parent c97d8930bc
commit cac24635a9
2 changed files with 11 additions and 7 deletions

View File

@@ -637,13 +637,17 @@ function get_fs_directory_size($path)
$bytestotal = 0;
$path = realpath($path);
if ($path !== false && $path != '' && file_exists($path))
if (!function_exists('exec'))
{
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object)
{
$bytestotal += $object->getSize();
}
return false;
}
@exec('du -sk '.$path, $returnarray);
if (is_array($returnarray) and !empty($returnarray[0]) and preg_match('/^(\d+)\s/', $returnarray[0], $matches))
{
$bytestotal = $matches[1] * 1024;
}
return $bytestotal;
}

View File

@@ -404,8 +404,8 @@ if (isset($result[0]['SUM(filesize)']))
$data_storage['Formats'] = $result[0]['SUM(filesize)'];
}
// PHP 5.5.19 is the oldest version get_fs_directory_size was tested on
if (version_compare(PHP_VERSION, '5.5.19') >= 0)
// Windows can't execute get_fs_directory_size correctly
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')
{
if (!isset($_SESSION['cachedir_info']) or $_SESSION['cachedir_info']['calculated_on'] < strtotime('5 minutes ago'))
{