- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/quota.php
- Класс: CDiskQuota
- Вызов: CDiskQuota::SetDirSize
public function SetDirSize($path="", $name="", $recount=false, $skip_dir = false)
{
if (empty($name))
$name = $path;
if ((empty($name) && empty($path)) || ($path == "files"))
{
$name = "files";
$path = "";
}
$abs_path = str_replace("//", "/", $_SERVER['DOCUMENT_ROOT']."/".$path."/");
$result = array();
if (empty($abs_path))
return false;
$record = array("size" => COption::GetOptionString("main_size", "~".$name));
if ($skip_dir)
{
if (!is_array($skip_dir))
$skip_dir = array($skip_dir);
foreach ($skip_dir as $key => $path_to_skip_dir)
$skip_dir[$key] = str_replace("//", "/", $abs_path.$path_to_skip_dir."/");
}
if (!empty($record["size"]) && !$recount)
{
$record = array_merge(
unserialize(COption::GetOptionString("main_size", "~".$name."_params"), ['allowed_classes' => false]),
$record);
$record["path_to_last_file"] = str_replace("//", "/", $abs_path.$record["file"]);
if (is_file($record["path_to_last_file"]) && $record["status"] == "c")
{
$res = $this->GetDirListFromLastFile($abs_path, $record["path_to_last_file"], true, $skip_dir);
if ($res["status"] == "done" || $res["status"] == "continue")
{
$properties = array(
"status" => mb_substr($res["status"], 0, 1),
"file" => str_replace($abs_path, "", str_replace("//", "/", $res["last_file"])),
"time" => time());
$record["size"] = doubleVal($record["size"])+doubleVal($res["size"]);
COption::SetOptionString("main_size", "~".$name, $record["size"]);
COption::SetOptionString("main_size", "~".$name."_params", serialize($properties));
$result = $res;
$result["size"] = $record["size"];
}
}
elseif ($record["status"] == "d")
{
return array("status" => "done", "last_file" => $record["file"], "size" => $record["size"]);
}
}
if (empty($result))
{
$res = $this->GetDirListSimple($abs_path, true, $skip_dir);
if ($res["status"] == "done" || $res["status"] == "continue")
{
$properties = array(
"status" => mb_substr($res["status"], 0, 1),
"file" => str_replace($abs_path, "", str_replace("//", "/", $res["last_file"])),
"time" => time());
COption::SetOptionString("main_size", "~".$name, doubleVal($res["size"]));
COption::SetOptionString("main_size", "~".$name."_params", serialize($properties));
$result = $res;
}
}
if (!empty($result))
return $result;
return array("status" => "error");
}