• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/update_class.php
  • Класс: CUpdateSystem
  • Вызов: CUpdateSystem::UnGzipArchive
static function UnGzipArchive(&$updates_dir, &$strError, $DelArch = "Y")
{
	$strError_tmp = "";

	CUpdateSystem::AddMessage2Log("exec CUpdateSystem::UnGzipArchive");
	$stime = CUpdateSystem::getmicrotime();

	if ($DelArch!="Y")
		$DelArch = "N";

	$archiveFileName = $_SERVER["DOCUMENT_ROOT"]."/bitrix/updates/update_archive.gz";

	if (!file_exists($archiveFileName) || !is_file($archiveFileName))
	{
		$strError_tmp .= "[UUGZA01] ".str_replace("#FILE#", $archiveFileName, GetMessage("SUPP_UGA_NO_TMP_FILE")).".
"; } if ($strError_tmp == '') { if (!is_readable($archiveFileName)) $strError_tmp .= "[UUGZA02] ".str_replace("#FILE#", $archiveFileName, GetMessage("SUPP_UGA_NO_READ_FILE")).".
"; } if ($strError_tmp == '') { $updates_dir = "update_m".time(); $updates_dir_full = $_SERVER["DOCUMENT_ROOT"]."/bitrix/updates/".$updates_dir; CUpdateSystem::CheckDirPath($updates_dir_full."/", true); if (!file_exists($updates_dir_full) || !is_dir($updates_dir_full)) { $strError_tmp .= "[UUGZA03] ".str_replace("#FILE#", $updates_dir_full, GetMessage("SUPP_UGA_NO_TMP_CAT")).".
"; } elseif (!is_writable($updates_dir_full)) { $strError_tmp .= "[UUGZA04] ".str_replace("#FILE#", $updates_dir_full, GetMessage("SUPP_UGA_WRT_TMP_CAT")).".
"; } } if ($strError_tmp == '') { $bCompressionUsed = true; $fd = fopen($archiveFileName, "rb"); $flabel = fread($fd, strlen("BITRIX")); fclose($fd); if ($flabel=="BITRIX") $bCompressionUsed = false; } if ($strError_tmp == '') { if ($bCompressionUsed) $zp = gzopen($archiveFileName, "rb9f"); else $zp = fopen($archiveFileName, "rb"); if (!$zp) { $strError_tmp .= "[UUGZA05] ".str_replace("#FILE#", $archiveFileName, GetMessage("SUPP_UGA_CANT_OPEN")).".
"; } } if ($strError_tmp == '') { if ($bCompressionUsed) $flabel = gzread($zp, strlen("BITRIX")); else $flabel = fread($zp, strlen("BITRIX")); if ($flabel!="BITRIX") { $strError_tmp .= "[UUGZA06] ".str_replace("#FILE#", $archiveFileName, GetMessage("SUPP_UGA_BAD_FORMAT")).".
"; if ($bCompressionUsed) gzclose($zp); else fclose($zp); } } if ($strError_tmp == '') { $strongUpdateCheck = COption::GetOptionString("main", "strong_update_check", "Y"); while (true) { if ($bCompressionUsed) $add_info_size = gzread($zp, 5); else $add_info_size = fread($zp, 5); $add_info_size = trim($add_info_size); if (intval($add_info_size)>0 && intval($add_info_size)."!"==$add_info_size."!") { $add_info_size = intval($add_info_size); } else { if ($add_info_size!="RTIBE") $strError_tmp .= "[UUGZA071] ".str_replace("#FILE#", $archiveFileName, GetMessage("SUPP_UGA_BAD_FORMAT")).".
"; break; } if ($bCompressionUsed) $add_info = gzread($zp, $add_info_size); else $add_info = fread($zp, $add_info_size); $add_info_arr = explode("|", $add_info); if (count($add_info_arr) != 3) { $strError_tmp .= "[UUGZA072] ".str_replace("#FILE#", $archiveFileName, GetMessage("SUPP_UGA_BAD_FORMAT")).".
"; break; } $size = $add_info_arr[0]; $curpath = $add_info_arr[1]; $crc32 = $add_info_arr[2]; $contents = ""; if (intval($size) > 0) { if ($bCompressionUsed) $contents = gzread($zp, $size); else $contents = fread($zp, $size); } $crc32_new = dechex(crc32($contents)); if ($crc32_new !== $crc32) { $strError_tmp .= "[UUGZA073] ".str_replace("#FILE#", $curpath, GetMessage("SUPP_UGA_FILE_CRUSH")).".
"; break; } else { CUpdateSystem::CheckDirPath($updates_dir_full.$curpath, true); if (!($fp1 = fopen($updates_dir_full.$curpath, "wb"))) { $strError_tmp .= "[UUGZA074] ".str_replace("#FILE#", $updates_dir_full.$curpath, GetMessage("SUPP_UGA_CANT_OPEN_WR")).".
"; break; } if ($contents <> '' && !fwrite($fp1, $contents)) { $strError_tmp .= "[UUGZA075] ".str_replace("#FILE#", $updates_dir_full.$curpath, GetMessage("SUPP_UGA_CANT_WRITE_F")).".
"; @fclose($fp1); break; } fclose($fp1); if ($strongUpdateCheck == "Y") { $crc32_new = dechex(crc32(file_get_contents($updates_dir_full.$curpath))); if ($crc32_new !== $crc32) { $strError_tmp .= "[UUGZA0761] ".str_replace("#FILE#", $curpath, GetMessage("SUPP_UGA_FILE_CRUSH")).".
"; break; } } } } if ($bCompressionUsed) gzclose($zp); else fclose($zp); } if ($strError_tmp == '') { if ($DelArch=="Y") @unlink($archiveFileName); } CUpdateSystem::AddMessage2Log("TIME UnGzipArchive ".Round(CUpdateSystem::getmicrotime()-$stime, 3)." sec"); if ($strError_tmp <> '') { CUpdateSystem::AddMessage2Log($strError_tmp, "CUUGZA"); $strError .= $strError_tmp; return false; } else return true; }