function GetNewsEx($SITE, $PORT, $PATH, $QUERY_STR, $bOutChannel = False) { global $APPLICATION; $cacheKey = md5($SITE.$PORT.$PATH.$QUERY_STR); $bValid = False; $bUpdate = False; if ($db_res_arr = CIBlockRSS::GetCache($cacheKey)) { $bUpdate = True; if (strlen($db_res_arr["CACHE"])>0) { if ($db_res_arr["VALID"]=="Y") { $bValid = True; $text = $db_res_arr["CACHE"]; } } } if (!$bValid) { $FP = fsockopen($SITE, $PORT, $errno, $errstr, 120); if ($FP) { $strVars = $QUERY_STR; $strRequest = "GET ".$PATH.(strlen($strVars) > 0? "?".$strVars: "")." HTTP/1.0\r\n"; $strRequest.= "User-Agent: BitrixSMRSS\r\n"; $strRequest.= "Accept: */*\r\n"; $strRequest.= "Host: $SITE\r\n"; $strRequest.= "Accept-Language: en\r\n"; $strRequest.= "\r\n"; fputs($FP, $strRequest); $headers = ""; while(!feof($FP)) { $line = fgets($FP, 4096); if($line == "\r\n") break; $headers .= $line; } $text = ""; while(!feof($FP)) $text .= fread($FP, 4096); $rss_charset = "windows-1251"; if (preg_match("/<"."\?XML[^>]{1,}encoding=[\"']([^>\"']{1,})[\"'][^>]{0,}\?".">/i", $text, $matches)) { $rss_charset = Trim($matches[1]); } elseif($headers) { if(preg_match("#^Content-Type:.*?charset=([a-zA-Z0-9-]+)#m", $headers, $match)) $rss_charset = $match[1]; } $text = preg_replace("/<!DOCTYPE.*?>/i", "", $text); $text = preg_replace("/<"."\\?XML.*?\\?".">/i", "", $text); $text = $APPLICATION->ConvertCharset($text, $rss_charset, SITE_CHARSET); fclose($FP); } else { $text = ""; } } if (strlen($text) > 0) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/xml.php"); $objXML = new CDataXML(); $res = $objXML->LoadString($text); if($res !== false) { $ar = $objXML->GetArray(); //$ar = xmlize_rss($text1); if (!$bOutChannel) { $arRes = $ar["rss"]["#"]["channel"][0]["#"]; } else { $arRes = $ar["rss"]["#"]; } $arRes["rss_charset"] = strtolower(SITE_CHARSET); if (!$bValid) { $ttl = (strlen($arRes["ttl"][0]["#"]) > 0)? IntVal($arRes["ttl"][0]["#"]): 60; CIBlockRSS::UpdateCache($cacheKey, $text, array("minutes" => $ttl), $bUpdate); } } return $arRes; } else { return array(); } }
$this->IncludeComponentTemplate(); } else { $this->AbortResultCache(); ShowError(GetMessage("PHOTO_ELEMENT_NOT_FOUND")); @define("ERROR_404", "Y"); if ($arParams["SET_STATUS_404"] === "Y") { CHTTP::SetStatus("404 Not Found"); } } } if (array_key_exists("AJAX", $arResult) && $_REQUEST["AJAX_CALL"] != "Y") { //13* //Сохраняем в БД кеш if (!is_array($_SESSION["iblock.vote"])) { $_SESSION["iblock.vote"] = array(); } if (!array_key_exists($arResult["AJAX"]["SESSION_KEY"], $_SESSION["iblock.vote"])) { $arCache = CIBlockRSS::GetCache($arResult["AJAX"]["SESSION_KEY"]); if (!$arCache || $arCache["VALID"] != "Y") { CIBlockRSS::UpdateCache($arResult["AJAX"]["SESSION_KEY"], serialize($arResult["AJAX"]["SESSION_PARAMS"]), 24 * 30, is_array($arCache)); } $_SESSION["iblock.vote"][$arResult["AJAX"]["SESSION_KEY"]] = true; } if (!defined("ADMIN_SECTION") || ADMIN_SECTION !== true) { //14* //Подключаем поддержку (библиотеку) IncludeAJAX(); } //15* //Продолжение экскурсии в файле jscript.php }