%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/install/sample/mp3/ |
| Current File : //home/bitrix/www/bitrix/modules/sale/install/sample/mp3/download_private.php |
<?
function initialize_params($url)
{
if (strpos($url,"?")>0)
{
$par = substr($url,strpos($url,"?")+1,strlen($url));
$arr = explode("#",$par);
$par = $arr[0];
$arr1 = explode("&",$par);
foreach ($arr1 as $pair)
{
$arr2 = explode("=",$pair);
global ${$arr2[0]};
${$arr2[0]} = $arr2[1];
}
}
}
$arImageExts = array("gif", "jpg", "jpeg", "png", "bmp");
$DIR = dirname($_SERVER["REQUEST_URI"]);
$sapi = (stristr(php_sapi_name(), "cgi") !== false? "cgi":"");
set_time_limit(0);
$arr1 = explode("?", $_SERVER["REQUEST_URI"]);
$arr2 = explode("#", $arr1[0]);
$URI = $arr2[0];
$file = substr($URI, strlen($DIR) + 1);
$file = str_replace("..", "", $file);
$filename = urldecode($_SERVER["DOCUMENT_ROOT"].$DIR."/files/".$file);
$bRealyImage = False;
$arFilePathInfo = pathinfo($filename);
if (in_array($arFilePathInfo["extension"], $arImageExts))
$bRealyImage = True;
if(file_exists($filename))
{
include_once(dirname(__FILE__)."/init_vars.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if (CModule::IncludeModule("sale"))
{
$bCanAccess = False;
if ($USER->IsAuthorized())
{
$FILE_PERM = $APPLICATION->GetFileAccessPermission($DIR."/files/".$file, $USER->GetUserGroupArray());
$FILE_PERM = ((strlen($FILE_PERM) > 0) ? $FILE_PERM : "D");
if ($FILE_PERM >= "R")
if (CSaleAuxiliary::CheckAccess($USER->GetID(), $mp3AuxiliaryPrefix.$file, $mp3AccessTimeLength, $mp3AccessTimeType))
$bCanAccess = True;
}
if (!$bCanAccess)
{
LocalRedirect($mp3Url2Folder."auth.php?fname=".urlencode($file)."&DIR=".urlencode($DIR));
}
else
{
$filesize = filesize($filename);
$f = fopen($filename, "rb");
$cur_pos = 0;
$size = $filesize-1;
if ($bRealyImage)
{
$imageParams = CFile::GetImageSize($filename);
}
if ($_SERVER["REQUEST_METHOD"]=="HEAD")
{
if($sapi == "cgi")
header("Status: 200 OK");
else
header($_SERVER["SERVER_PROTOCOL"]." 200 OK");
header("Accept-Ranges: bytes");
header("Content-Length: ".$filesize);
if ($bRealyImage)
header("Content-Type: ".$imageParams["mime"]."; name=\"".$file."\"");
else
header("Content-Type: application/force-download; name=\"".$file."\"");
header("Last-Modified: ".date("r",filemtime($filename)));
}
else
{
$p = strpos($_SERVER["HTTP_RANGE"], "=");
if(intval($p)>0)
{
$bytes = substr($_SERVER["HTTP_RANGE"], $p+1);
$p = strpos($bytes, "-");
if($p!==false)
{
$cur_pos = IntVal(substr($bytes, 0, $p));
$size = IntVal(substr($bytes, $p+1));
if($size<=0)
$size = $filesize - 1;
if($cur_pos>$size)
{
$cur_pos = 0;
$size = $filesize - 1;
}
fseek($f, $cur_pos);
}
}
if(intval($cur_pos)>0 && $_SERVER["SERVER_PROTOCOL"] == "HTTP/1.1")
{
if($sapi=="cgi")
header("Status: 206 Partial Content");
else
header("HTTP/1.1 206 Partial Content");
}
else
{
session_cache_limiter('');
session_start();
if (CModule::IncludeModule("statistic"))
{
initialize_params($_SERVER["REQUEST_URI"]);
if (strlen($event1)<=0 && strlen($event2)<=0)
{
$event1 = "download";
$event2 = "private";
$event3 = $file;
}
$e = $event1."/".$event2."/".$event3;
if (!in_array($e, $_SESSION["DOWNLOAD_EVENTS"]))
{
$w = CStatEvent::GetByEvents($event1, $event2);
$wr = $w->Fetch();
$z = CStatEvent::GetEventsByGuest($_SESSION["SESS_GUEST_ID"], $wr["EVENT_ID"], $event3, 21600);
if (!($zr=$z->Fetch()))
{
CStatistic::Set_Event($event1, $event2, $event3);
$_SESSION["DOWNLOAD_EVENTS"][] = $e;
}
}
}
ob_end_clean();
session_write_close();
if($sapi=="cgi")
header("Status: 200 OK");
else
header($_SERVER["SERVER_PROTOCOL"]." 200 OK");
}
if ($bRealyImage)
header("Content-Type: ".$imageParams["mime"]."; name=\"".$file."\"");
else
header("Content-Type: application/force-download; name=\"".$file."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".($size-$cur_pos+1));
header("Accept-Ranges: bytes");
header("Content-Range: bytes ".$cur_pos."-".$size."/".$filesize);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
header("Pragma: public");
$str = "";
while($cur_pos<=$size)
{
$bufsize = 32768;
if($bufsize+$cur_pos>$size)
$bufsize = $size - $cur_pos + 1;
$cur_pos += $bufsize;
$p = fread($f, $bufsize);
echo $p;
flush();
}
fclose ($f);
die();
}
}
}
else
{
include($_SERVER["DOCUMENT_ROOT"]."/404.php");
}
}
else
{
include($_SERVER["DOCUMENT_ROOT"]."/404.php");
}
?>