PageRenderTime 24ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/modules/fileman/admin/fileman_file_download.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 69 lines | 57 code | 12 blank | 0 comment | 8 complexity | e26237761378947df2aa7e5f60a37034 MD5 | raw file
  1. <?
  2. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  3. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/fileman/prolog.php");
  4. if (!$USER->CanDoOperation('fileman_view_file_structure'))
  5. $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  6. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/fileman/include.php");
  7. IncludeModuleLangFile(__FILE__);
  8. $strWarning = "";
  9. $site = CFileMan::__CheckSite($site);
  10. $DOC_ROOT = CSite::GetSiteDocRoot($site);
  11. $io = CBXVirtualIo::GetInstance();
  12. $path = $GLOBALS["APPLICATION"]->ConvertCharset($path, "UTF-8", LANG_CHARSET);
  13. $arFile = CFile::MakeFileArray($io->GetPhysicalName($path));
  14. $arFile["tmp_name"] = CBXVirtualIoFileSystem::ConvertCharset($arFile["tmp_name"], CBXVirtualIoFileSystem::directionDecode);
  15. $path = $io->CombinePath("/", $path);
  16. $arPath = Array($site, $path);
  17. if(!$USER->CanDoFileOperation('fm_download_file', $arPath))
  18. $strWarning = GetMessage("ACCESS_DENIED");
  19. else if(!$io->FileExists($arFile["tmp_name"]))
  20. $strWarning = GetMessage("FILEMAN_FILENOT_FOUND")." ";
  21. elseif(!$USER->CanDoOperation('edit_php') && (HasScriptExtension($path) || substr(CFileman::GetFileName($path), 0, 1) == "."))
  22. $strWarning .= GetMessage("FILEMAN_FILE_DOWNLOAD_PHPERROR")."\n";
  23. if(strlen($strWarning) <= 0)
  24. {
  25. $flTmp = $io->GetFile($arFile["tmp_name"]);
  26. $fsize = $flTmp->GetFileSize();
  27. $bufSize = 4194304; //4M
  28. session_write_close();
  29. set_time_limit(0);
  30. header("Content-Type: application/force-download; name=\"".$arFile["name"]."\"");
  31. header("Content-Transfer-Encoding: binary");
  32. header("Content-Length: ".$fsize);
  33. header("Content-Disposition: attachment; filename=\"".$arFile["name"]."\"");
  34. header("Expires: 0");
  35. header("Cache-Control: no-cache, must-revalidate");
  36. header("Pragma: no-cache");
  37. header('Connection: close');
  38. $arFile["tmp_name"] = CBXVirtualIoFileSystem::ConvertCharset($arFile["tmp_name"], CBXVirtualIoFileSystem::directionEncode);
  39. $f=fopen($arFile["tmp_name"], 'rb');
  40. while(!feof($f))
  41. {
  42. echo fread($f, $bufSize);
  43. ob_flush();
  44. flush();
  45. ob_end_clean ();
  46. }
  47. fclose($f);
  48. die();
  49. }
  50. $APPLICATION->SetTitle(GetMessage("FILEMAN_FILEDOWNLOAD")." \"".$arFile["name"]."\"");
  51. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
  52. ?>
  53. <font class="text"><?=$arFile["name"]?></font><br><br>
  54. <?
  55. ShowError($strWarning);
  56. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
  57. ?>