• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/file.php
  • Класс: CFile
  • Вызов: CFile::Delete
static function Delete($ID)
{
	$ID = intval($ID);

	if($ID <= 0)
		return;

	$conn = MainApplication::getConnection();

	$res = static::GetByID($ID, true);

	if($res = $res->Fetch())
	{
		$hash = InternalFileHashTable::getRowById($ID);
		$lockId =  $hash ? static::lockFileHash($hash['FILE_SIZE'], $hash['FILE_HASH'], $res['HANDLER_ID']) : '';

		$delete = static::processDuplicates($ID);

		if($delete === self::DELETE_NONE)
		{
			//can't delete the file - duplicates found
			return;
		}

		$delete_size = 0;

		if($delete & self::DELETE_FILE)
		{
			$upload_dir = COption::GetOptionString("main", "upload_dir", "upload");
			$dname = $_SERVER["DOCUMENT_ROOT"]."/".$upload_dir."/".$res["SUBDIR"];
			$fname = $dname."/".$res["FILE_NAME"];

			$io = CBXVirtualIo::GetInstance();

			$file = $io->GetFile($fname);
			if($file->isExists() && $file->unlink())
			{
				$delete_size += $res["FILE_SIZE"];
			}

			$delete_size += static::ResizeImageDelete($res);

			$directory = $io->GetDirectory($dname);
			if($directory->isExists() && $directory->isEmpty())
			{
				if ($directory->rmdir())
				{
					$parent = $io->GetDirectory(GetDirPath($dname));
					if ($parent->isExists() && $parent->isEmpty())
					{
						$parent->rmdir();
					}
				}
			}

			foreach(GetModuleEvents("main", "OnPhysicalFileDelete", true) as $arEvent)
			{
				ExecuteModuleEventEx($arEvent, array($res));
			}
		}

		if($delete & self::DELETE_DB)
		{
			foreach(GetModuleEvents("main", "OnFileDelete", true) as $arEvent)
			{
				ExecuteModuleEventEx($arEvent, array($res));
			}

			InternalFileHashTable::delete($ID);

			// recursion inside
			static::processVersions($ID);

			$conn->query("DELETE FROM b_file WHERE ID = {$ID}");

			static::CleanCache($ID);
		}

		if ($lockId)
		{
			static::unlockFileHash($lockId);
		}

		/****************************** QUOTA ******************************/
		if($delete_size > 0 && COption::GetOptionInt("main", "disk_space") > 0)
			CDiskQuota::updateDiskQuota("file", $delete_size, "delete");
		/****************************** QUOTA ******************************/
	}
}