• Модуль: 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");
}