• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/file_temp.php
  • Класс: CTempFile
  • Вызов: CTempFile::GetDirectoryName
static function GetDirectoryName($hours_to_keep_files = 0, $subdir = "")
{
	if($hours_to_keep_files <= 0)
		return self::GetFileName('');

	if($subdir === "")
	{
		$dir_name = self::GetAbsoluteRoot().'/BXTEMP-'.date('Y-m-d/H/', time()+3600*$hours_to_keep_files);
		$i = 0;
		while(true)
		{
			$i++;
			$dir_add = SecurityRandom::getString(32);
			$temp_path = $dir_name.$dir_add."/";

			if(!file_exists($temp_path))
				break;
		}
	}
	else //Fixed name during the session
	{
		$localStorage = MainApplication::getInstance()->getLocalSession('userSessionData');
		if (!isset($localStorage['tempFileToken']))
		{
			$localStorage->set('tempFileToken', SecurityRandom::getString(32));
		}
		$token = $localStorage->get('tempFileToken');

		$subdir = implode("/", (is_array($subdir) ? $subdir : array($subdir, $token)))."/";
		while (strpos($subdir, "//") !== false)
			$subdir = str_replace("//", "/", $subdir);
		$bFound = false;
		for($i = $hours_to_keep_files-1; $i > 0; $i--)
		{
			$dir_name = self::GetAbsoluteRoot().'/BXTEMP-'.date('Y-m-d/H/', time()+3600*$i);
			$temp_path = $dir_name.$subdir;
			if(file_exists($temp_path) && is_dir($temp_path))
			{
				$bFound = true;
				break;
			}
		}

		if(!$bFound)
		{
			$dir_name = self::GetAbsoluteRoot().'/BXTEMP-'.date('Y-m-d/H/', time()+3600*$hours_to_keep_files);
			$temp_path = $dir_name.$subdir;
		}
	}

	//Delayed unlink
	if(!self::$is_exit_function_registered)
	{
		self::$is_exit_function_registered = true;
		register_shutdown_function(array('CTempFile', 'Cleanup'));
	}

	//Function ends only here
	return $temp_path;
}