• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/backup.php
  • Класс: CDirRealScan
  • Вызов: CDirRealScan::ProcessFile
function ProcessFile($f)
{
	global $tar;
	while(haveTime())
	{
		$f = str_replace('\', '/', $f);
		if (preg_match('#/bitrix/(php_interface/dbconn.php|.settings.php)$#', $f, $regs))
		{
			if (!$arInfo = $tar->getFileInfo($f))
				return false;

			if ($regs[1] == '.settings.php')
			{
				if (!is_array($ar = include($f)))
				{
					$this->err[] = 'Can't parse file: '.$f;
					return false;
				}

				if (is_array($ar['connections']['value']))
				{
					foreach($ar['connections']['value'] as $k => $arTmp)
					{
						$ar['connections']['value'][$k]['login'] = '******';
						$ar['connections']['value'][$k]['password'] = '******';
						$ar['connections']['value'][$k]['database'] = '******';
					}
				}

				$strFile = "<"."?phpnreturn ".var_export($ar, true).";n";
			}
			else // dbconn.php
			{
				if (false === $arFile = file($f))
				{
					$this->err[] = 'Can't read file: '.$f;
					return false;
				}

				$strFile = '';
				foreach($arFile as $line)
				{
					if (preg_match("#^[ t]*".'$'."(DB(Login|Password|Name))#",$line,$regs))
						$strFile .= '$'.$regs[1].' = "******";'."n";
					else
						$strFile .= str_replace("rn","n",$line);
				}
			}

			$arInfo['size'] = strlen($strFile);
			if (!$tar->writeHeader($arInfo))
				return false;

			$i = 0;
			while($i < $arInfo['size'])
			{
				if (!$tar->writeBlock(pack("a512", substr($strFile, $i, 512))))
					return false;
				$i += 512;
			}

			return true;
		}

		if ($tar->addFile($f) === false)
			return false; // error
		if ($tar->ReadBlockCurrent == 0)
			return true; // finished
	}
	return 'BREAK';
}