- Модуль: 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 ******************************/
}
}