Пример #1
0
	function CheckFolderUpdatability($destFolder, $srcFolder, &$strError)
	{
		$strError_tmp = "";

		$destFolder = str_replace("\\", "/", $destFolder);
		$destFolder = Trim($destFolder, " \t\n\r\0\x0B/\\");
		if (strlen($destFolder) > 0)
			$destFolder = "/".$destFolder;

		if ($srcFolder && strlen($srcFolder) > 0)
		{
			$srcFolder = str_replace("\\", "/", $srcFolder);
			$srcFolder = Trim($srcFolder, " \t\n\r\0\x0B/\\");
			if (strlen($srcFolder) > 0)
				$srcFolder = "/".$srcFolder;

			$srcFolderFull = $_SERVER["DOCUMENT_ROOT"].$srcFolder;
			if (!file_exists($srcFolderFull) || !is_dir($srcFolderFull))
				$strError_tmp .= "[UCFU01] ".str_replace("#FILE#", $srcFolderFull, GetMessage("SUPN_NO_FOLDER_EX")).".<br>";

			if (strlen($strError_tmp) <= 0)
			{
				if (!is_readable($srcFolderFull))
					$strError_tmp .= "[UCFU02] ".str_replace("#FILE#", $srcFolderFull, GetMessage("SUPN_CU_RD_TMP_CAT")).".<br>";
			}

			if ($handle = @opendir($srcFolderFull))
			{
				while (($file = readdir($handle)) !== false)
				{
					if ($file == "." || $file == "..")
						continue;

					if (is_dir($srcFolderFull."/".$file))
					{
						CUpdateSystem::CheckFolderUpdatability($destFolder."/".$file, $srcFolder."/".$file, $strError_tmp);
					}
					elseif (is_file($srcFolderFull."/".$file))
					{
						$destFileFull = $_SERVER["DOCUMENT_ROOT"].$destFolder."/".$file;
						if (file_exists($destFileFull))
						{
							if (!is_writeable($destFileFull))
								$strError_tmp .= "[UCFU03] ".str_replace("#FILE#", $destFileFull, GetMessage("SUPP_CU_MAIN_ERR_FILE")).".<br>";
						}
						else
						{
							$p = CUpdateSystem::bxstrrpos($destFileFull, "/");
							$destFileFull = substr($destFileFull, 0, $p);

							while (strlen($destFileFull) > 1 && substr($destFileFull, strlen($destFileFull) - 1, 1) == "/")
								$destFileFull = substr($destFileFull, 0, strlen($destFileFull) - 1);

							$p = CUpdateSystem::bxstrrpos($destFileFull, "/");
							while ($p > 0)
							{
								if (file_exists($destFileFull) && is_dir($destFileFull))
								{
									if (!is_writable($destFileFull))
										$strError_tmp .= "[UCFU04] ".str_replace("#FILE#", $destFileFull, GetMessage("SUPP_CU_MAIN_ERR_CAT")).".<br>";

									break;
								}
								$destFileFull = substr($destFileFull, 0, $p);
								$p = CUpdateSystem::bxstrrpos($destFileFull, "/");
							}
						}
					}
				}
				@closedir($handle);
			}
		}
		else
		{
			$destFolderFull = $_SERVER["DOCUMENT_ROOT"].$destFolder;
			if (!file_exists($destFolderFull) || !is_dir($destFolderFull))
				$strError_tmp .= "[UCFU05] ".str_replace("#FILE#", $destFolderFull, GetMessage("SUPN_NO_FOLDER_EX")).".<br>";

			if (strlen($strError_tmp) <= 0)
			{
				if (!is_writeable($destFolderFull))
					$strError_tmp .= "[UCFU06] ".str_replace("#FILE#", $destFolderFull, GetMessage("SUPP_CU_MAIN_ERR_CAT")).".<br>";
			}

			if ($handle = @opendir($destFolderFull))
			{
				while (($file = readdir($handle)) !== false)
				{
					if ($file == "." || $file == "..")
						continue;

					if (is_dir($destFolderFull."/".$file))
					{
						CUpdateSystem::CheckFolderUpdatability($destFolder."/".$file, "", $strError_tmp);
					}
					elseif (is_file($destFolderFull."/".$file))
					{
						if (!is_writeable($destFolderFull."/".$file))
							$strError_tmp .= "[UCFU07] ".str_replace("#FILE#", $destFolderFull."/".$file, GetMessage("SUPP_CU_MAIN_ERR_FILE")).".<br>";
					}
				}
				@closedir($handle);
			}
		}

		if (strlen($strError_tmp) > 0)
		{
			CUpdateSystem::AddMessage2Log($strError_tmp, "CUCFU");
			$strError .= $strError_tmp;
			return False;
		}
		else
			return True;
	}