• Модуль: clouds
  • Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage_service_google.php
  • Класс: CCloudStorageService_GoogleStorage
  • Вызов: CCloudStorageService_GoogleStorage::ListFiles
function ListFiles($arBucket, $filePath, $bRecursive = false)
{
	global $APPLICATION;

	$result = array(
		"dir" => array(),
		"file" => array(),
		"file_size" => array(),
		"file_mtime" => array(),
		"file_hash" => array(),
		"last_key" => "",
	);

	$filePath = trim($filePath, '/');
	if($filePath <> '')
	{
		$filePath .= '/';
	}

	if($arBucket["PREFIX"])
	{
		if(mb_substr($filePath, 0, mb_strlen($arBucket["PREFIX"]) + 2) != "/".$arBucket["PREFIX"]."/")
			$filePath = $arBucket["PREFIX"]."/".ltrim($filePath, "/");
	}
	$filePath = $APPLICATION->ConvertCharset($filePath, LANG_CHARSET, "UTF-8");
	$filePath = str_replace(" ", "+", $filePath);

	$marker = '';
	while(true)
	{
		$response = $this->SendRequest(
			$arBucket["SETTINGS"]["ACCESS_KEY"],
			$arBucket["SETTINGS"]["SECRET_KEY"],
			'GET',
			$arBucket["BUCKET"],
			'/',
			'?'.($bRecursive? '': 'delimiter=/&').'prefix='.rawurlencode($filePath).'&marker='.rawurlencode($marker)
		);
		if(
			$this->status == 200
			&& is_array($response)
			&& isset($response["ListBucketResult"])
			&& is_array($response["ListBucketResult"])
			&& isset($response["ListBucketResult"]["#"])
			&& is_array($response["ListBucketResult"]["#"])
		)
		{
			if(
				isset($response["ListBucketResult"]["#"]["CommonPrefixes"])
				&& is_array($response["ListBucketResult"]["#"]["CommonPrefixes"])
			)
			{
				foreach($response["ListBucketResult"]["#"]["CommonPrefixes"] as $a)
				{
					$dir_name = mb_substr(rtrim($a["#"]["Prefix"][0]["#"], "/"), mb_strlen($filePath));
					$result["dir"][] = $APPLICATION->ConvertCharset($dir_name, "UTF-8", LANG_CHARSET);
				}
			}

			if(
				isset($response["ListBucketResult"]["#"]["Contents"])
				&& is_array($response["ListBucketResult"]["#"]["Contents"])
			)
			{
				foreach($response["ListBucketResult"]["#"]["Contents"] as $a)
				{
					$file_name = mb_substr($a["#"]["Key"][0]["#"], mb_strlen($filePath));
					$result["file"][] = $APPLICATION->ConvertCharset($file_name, "UTF-8", LANG_CHARSET);
					$result["file_size"][] = $a["#"]["Size"][0]["#"];
					$result["file_mtime"][] = mb_substr($a["#"]["LastModified"][0]["#"], 0, 19);
					$result["file_hash"][] = trim($a["#"]["ETag"][0]["#"], '"');
					$result["last_key"] = $file_name;
				}
			}

			if(
				isset($response["ListBucketResult"]["#"]["IsTruncated"])
				&& is_array($response["ListBucketResult"]["#"]["IsTruncated"])
				&& $response["ListBucketResult"]["#"]["IsTruncated"][0]["#"] === "true"
				&& $response["ListBucketResult"]["#"]["NextMarker"][0]["#"] <> ''
			)
			{
				$marker = $response["ListBucketResult"]["#"]["NextMarker"][0]["#"];
				continue;
			}
			else
			{
				break;
			}
		}
		else
		{
			if (defined("BX_CLOUDS_ERROR_DEBUG"))
			{
				AddMessage2Log($this);
			}
			$APPLICATION->ResetException();
			return false;
		}
	}

	return $result;
}