• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/internals/cleaner.php
  • Класс: BitrixDiskInternalsCleaner
  • Вызов: Cleaner::deleteUnregisteredVersionFiles
static function deleteUnregisteredVersionFiles($limit = 100, $fromDate = '', $timeLimit = 20)
{
	$limit = (int)$limit;
	if ($limit <= 0)
	{
		$limit = 100;
	}
	if (empty($fromDate) || mb_strlen($fromDate) != 10)
	{
		$fromDate = '2018-11-14';
	}
	$timeLimit = (int)$timeLimit;
	if (defined('START_EXEC_TIME') && START_EXEC_TIME > 0)
	{
		$startTime = START_EXEC_TIME;
	}
	else
	{
		$startTime = getmicrotime();
	}

	$connection = Application::getConnection();
	$workLoad = false;

	$result = $connection->query("
		select ID
		from b_file 
		where 
			MODULE_ID = 'disk'
			AND ID not in (SELECT FILE_ID FROM b_disk_version) 
			AND ID not in (SELECT FILE_ID FROM b_disk_object 
				WHERE TYPE = ".BitrixDiskInternalsObjectTable::TYPE_FILE." 
					AND ID = REAL_OBJECT_ID AND FILE_ID IS NOT NULL) 
			AND SUBDIR not like 'disk_preview/%'
			AND SUBDIR like 'disk/%'
			AND TIMESTAMP_X >= '{$fromDate} 00:00:00'
		LIMIT {$limit}
	");

	while ($row = $result->fetch())
	{
		$workLoad = true;

		CFile::Delete($row['ID']);

		if ($timeLimit > 0)
		{
			$currentTime = getmicrotime();
			if (($currentTime - $startTime) >= $timeLimit)
			{
				break;
			}
		}
	}

	if (!$workLoad)
	{
		return '';
	}

	return self::class . "::deleteUnregisteredVersionFiles('{$limit}', '{$fromDate}', '{$timeLimit}');";
}