Поддержка серверов

CUpdateSystem::getHTTPPage: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=176345

//    CUpdateSystem::getHTTPPage()
//    /bitrix/modules/main/classes/general/update_class.php:3344

    public static function getHTTPPage($page, $strVars, &$strError)
    {
        global $SERVER_NAME, $DB;

        CUpdateSystem::AddMessage2Log("exec CUpdateSystem::getHTTPPage");

        $ServerIP = COption::GetOptionString("main", "update_site", "www.bitrixsoft.com");
        $ServerPort = 80;

        $proxyAddr = COption::GetOptionString("main", "update_site_proxy_addr", "");
        $proxyPort = COption::GetOptionString("main", "update_site_proxy_port", "");
        $proxyUserName = COption::GetOptionString("main", "update_site_proxy_user", "");
        $proxyPassword = COption::GetOptionString("main", "update_site_proxy_pass", "");

        $bUseProxy = (strlen($proxyAddr) > 0 && strlen($proxyPort) > 0);

        if ($bUseProxy)
        {
            $proxyPort = IntVal($proxyPort);
            if ($proxyPort <= 0)
                $proxyPort = 80;

            $requestIP = $proxyAddr;
            $requestPort = $proxyPort;
        }
        else
        {
            $requestIP = $ServerIP;
            $requestPort = $ServerPort;
        }

        $FP = fsockopen($requestIP, $requestPort, $errno, $errstr, 120);

        if ($FP)
        {
            $strRequest = "";

            if ($bUseProxy)
            {
                $strRequest .= "POST http://".$ServerIP."/bitrix/updates/".$page." HTTP/1.0\r\n";
                if (strlen($proxyUserName) > 0)
                    $strRequest .= "Proxy-Authorization: Basic ".base64_encode($proxyUserName.":".$proxyPassword)."\r\n";
            }
            else
                $strRequest .= "POST /bitrix/updates/".$page." HTTP/1.0\r\n";

            $CRCCode = COption::GetOptionString("main", "crc_code", "");
            $strVars .= "&spd=".urlencode($CRCCode);
            if (defined('BX_UTF'))
                $strVars .= "&utf=".urlencode("Y");
            else
                $strVars .= "&utf=".urlencode("N");
            $dbv = $DB->GetVersion();
            $strVars .= "&dbv=".urlencode($dbv != false ? $dbv : "");

            $strRequest .= "User-Agent: BitrixSMUpdater\r\n";
            $strRequest .= "Accept: */*\r\n";
            $strRequest .= "Host: ".$ServerIP."\r\n";
            $strRequest .= "Accept-Language: en\r\n";
            $strRequest .= "Content-type: application/x-www-form-urlencoded\r\n";
            $strRequest .= "Content-length: ".strlen($strVars)."\r\n\r\n";
            $strRequest .= "$strVars";
            $strRequest .= "\r\n";

            fputs($FP, $strRequest);

            $bChunked = False;
            while (!feof($FP))
            {
                $line = fgets($FP, 4096);
                if ($line != "\r\n")
                {
                    if (preg_match("/Transfer-Encoding: +chunked/i", $line))
                        $bChunked = True;
                }
                else
                {
                    break;
                }
            }

            /*
            while (($line = fgets($FP, 4096)) && $line != "\r\n")
            {
                if (preg_match("/Transfer-Encoding: +chunked/i", $line))
                    $bChunked = True;
            }
            */

            $content = "";
            if ($bChunked)
            {
                $maxReadSize = 4096;

                $length = 0;
                $line = FGets($FP, $maxReadSize);
                $line = StrToLower($line);

                $strChunkSize = "";
                $i = 0;
                while ($i < StrLen($line) && in_array($line[$i], array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")))
                {
                    $strChunkSize .= $line[$i];
                    $i++;
                }

                $chunkSize = hexdec($strChunkSize);

                while ($chunkSize > 0)
                {
                    $processedSize = 0;
                    $readSize = (($chunkSize > $maxReadSize) ? $maxReadSize : $chunkSize);

                    while ($readSize > 0 && $line = fread($FP, $readSize))
                    {
                        $content .= $line;
                        $processedSize += StrLen($line);
                        $newSize = $chunkSize - $processedSize;
                        $readSize = (($newSize > $maxReadSize) ? $maxReadSize : $newSize);
                    }
                    $length += $chunkSize;

                    $line = FGets($FP, $maxReadSize);

                    $line = FGets($FP, $maxReadSize);
                    $line = StrToLower($line);

                    $strChunkSize = "";
                    $i = 0;
                    while ($i < StrLen($line) && in_array($line[$i], array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")))
                    {
                        $strChunkSize .= $line[$i];
                        $i++;
                    }

                    $chunkSize = hexdec($strChunkSize);
                }
            }
            else
            {
                while ($line = fread($FP, 4096))
                    $content .= $line;
            }

            fclose($FP);
        }
        else
        {
            $content = "";
            $strError .= GetMessage("SUPP_GHTTP_ER").": [".$errno."] ".$errstr.". ";
            if (IntVal($errno)<=0) $strError .= GetMessage("SUPP_GHTTP_ER_DEF")." ";

            CUpdateSystem::AddMessage2Log("Error connecting 2 ".$ServerIP.": [".$errno."] ".$errstr."", "ERRCONN");
        }
        return $content;
    }
';

Блог разработчика

9 августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение