• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/wizard_util.php
  • Класс: ifCWizardUtil
  • Вызов: CWizardUtil::ReplaceMacrosRecursive
static function ReplaceMacrosRecursive($filePath, $arReplace)
{
	clearstatcache();

	if ((!is_dir($filePath) && !is_file($filePath)) || !is_array($arReplace))
		return;

	$root = (defined("WIZARD_SITE_ROOT_PATH")? WIZARD_SITE_ROOT_PATH : $_SERVER["DOCUMENT_ROOT"]);
	$root = trim($root, "/");

	if ($handle = @opendir($filePath))
	{
		while (($file = readdir($handle)) !== false)
		{
			if ($file == "." || $file == ".." || (trim($filePath, "/") == $root && ($file == "bitrix" || $file == "upload")))
				continue;
				
			if (is_dir($filePath."/".$file))
			{
				self::ReplaceMacrosRecursive($filePath.$file."/", $arReplace);
			}
			elseif (is_file($filePath."/".$file))
			{
				if(GetFileExtension($file) <> "php")
					continue;

				if (!is_writable($filePath."/".$file))
					continue;

				$size = filesize($filePath."/".$file);

				if($size == 0)
				{
					continue;
				}

				@chmod($filePath."/".$file, BX_FILE_PERMISSIONS);

				if (!$handleFile = @fopen($filePath."/".$file, "rb"))
					continue;

				$content = @fread($handleFile, $size);
				@fclose($handleFile);

				if (!($handleFile = @fopen($filePath."/".$file, "wb")))
					continue;

				if (flock($handleFile, LOCK_EX))
				{
					$arSearch = array();
					$arValue = array();

					foreach ($arReplace as $search => $replace)
					{
						$arSearch[] = "#".$search."#";
						$arValue[] = $replace;
					}

					$content = str_replace($arSearch, $arValue, $content);
					@fwrite($handleFile, $content);
					@flock($handleFile, LOCK_UN);
				}
				@fclose($handleFile);

			}
		}
		@closedir($handle);
	}
}