- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/update_client_partner.php
- Класс: CUpdateClientPartner
- Вызов: CUpdateClientPartner::loadFileBx
static function loadFileBx($requestedUrl, $realSize, $outputFilename, $timeout, $requestQueryString, &$errorMessage)
{
$timeout = intval($timeout);
$startTime = 0;
if ($timeout > 0)
$startTime = getmicrotime();
$addrParams = static::getAddr();
$socketHandler = fsockopen($addrParams["SOCKET_IP"], $addrParams["SOCKET_PORT"], $errorNum, $errorMsg, 30);
if (!$socketHandler)
{
$errorMessage .= static::getSocketError($errorMsg, $errorNum, $addrParams);
return "E";
}
$request = "";
if ($addrParams["USE_PROXY"])
{
$request .= "POST http://".$addrParams["IP"]."/bitrix/updates/smp_updater_modules.php HTTP/1.0rn";
if ($addrParams["PROXY_USERNAME"])
$request .= "Proxy-Authorization: Basic ".base64_encode(
$addrParams["PROXY_USERNAME"].":".$addrParams["PROXY_PASSWORD"]
)."rn";
}
else
{
$request .= "POST /bitrix/updates/smp_updater_modules.php HTTP/1.0rn";
}
$requestQueryString .= "&UFILE=".$requestedUrl;
$startSize = (file_exists($outputFilename.".tmp") ? filesize($outputFilename.".tmp") : 0);
$requestQueryString .= "&USTART=".$startSize."&verfix=2";
$request .= "User-Agent: BitrixSMUpdaterrn";
$request .= "Accept: */*rn";
$request .= "Host: ".$addrParams["IP"]."rn";
$request .= "Accept-Language: enrn";
$request .= "Content-type: application/x-www-form-urlencodedrn";
$request .= "Content-length: ".mb_strlen($requestQueryString)."rnrn";
$request .= $requestQueryString;
$request .= "rn";
fputs($socketHandler, $request);
$replyHeader = "";
while (($result = fgets($socketHandler, 4096)) && $result != "rn")
$replyHeader .= $result;
$replyHeaderArray = preg_split("#rn#", $replyHeader);
$contentLength = 0;
for ($i = 0, $cnt = count($replyHeaderArray); $i < $cnt; $i++)
{
if (strpos($replyHeaderArray[$i], "Content-Length") !== false)
{
$pos = mb_strpos($replyHeaderArray[$i], ":");
$contentLength = intval(trim(mb_substr($replyHeaderArray[$i], $pos + 1, mb_strlen($replyHeaderArray[$i]) - $pos + 1)));
}
}
if (($contentLength + $startSize) != $realSize)
{
$errorMessage .= "[ELVL001] ".GetMessage("ELVL001_SIZE_ERROR").". ";
return "E";
}
@unlink($outputFilename.".tmp1");
if (file_exists($outputFilename.".tmp"))
{
if (@rename($outputFilename.".tmp", $outputFilename.".tmp1"))
{
$fileHandler = fopen($outputFilename.".tmp", "wb");
if ($fileHandler)
{
$fh1 = fopen($outputFilename.".tmp1", "rb");
do
{
$data = fread($fh1, 8192);
if ($data == '')
break;
fwrite($fileHandler, $data);
}
while (true);
fclose($fh1);
@unlink($outputFilename.".tmp1");
}
else
{
$errorMessage .= "[JUHYT002] ".GetMessage("JUHYT002_ERROR_FILE").". ";
return "E";
}
}
else
{
$errorMessage .= "[JUHYT003] ".GetMessage("JUHYT003_ERROR_FILE").". ";
return "E";
}
}
else
{
$fileHandler = fopen($outputFilename.".tmp", "wb");
if (!$fileHandler)
{
$errorMessage .= "[JUHYT004] ".GetMessage("JUHYT004_ERROR_FILE").". ";
return "E";
}
}
$isFinished = true;
while (true)
{
if ($timeout > 0 && (microtime(true) - $startTime) > $timeout)
{
$isFinished = false;
break;
}
$result = fread($socketHandler, 40960);
if ($result == "")
break;
fwrite($fileHandler, $result);
}
fclose($fileHandler);
fclose($socketHandler);
CUpdateClientPartner::AddMessage2Log("Time - ".(microtime(true) - $startTime)." sec", "DOWNLOAD");
$sizeTmp = (file_exists($outputFilename.".tmp") ? filesize($outputFilename.".tmp") : 0);
if ($sizeTmp == $realSize)
{
$isFinished = true;
}
if ($isFinished)
{
@unlink($outputFilename);
if (!@rename($outputFilename.".tmp", $outputFilename))
{
$errorMessage .= "[JUHYT005] ".GetMessage("JUHYT005_ERROR_FILE").". ";
return "E";
}
@unlink($outputFilename.".tmp");
}
else
{
return "S";
}
return "U";
}