Отдача файлов с другим именем в Битрикс

В htaccess добавить:

RewriteCond %{REQUEST_URI} !\/get_file.php$
RewriteCond %{QUERY_STRING} ^name=
RewriteRule ^(.*)$ /get_file.php? [R=301,L,QSA]

Содержимое файла get_file.php:

 

<?php
if($_REQUEST[«name»]!=»»){
if($_REQUEST[«path»]!=»»){
$name = urldecode($_REQUEST[«name»]);
$path = $_SERVER[«DOCUMENT_ROOT»].urldecode($_REQUEST[«path»]);
file_force_download($path,$name);
}
}

function file_force_download($file,$name=»») {
if (file_exists($file)) {
// сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
// если этого не сделать файл будет читаться в память полностью!
if (ob_get_level()) {
ob_end_clean();
}
// заставляем браузер показать окно сохранения файла

$filename = basename($file);
if(end(explode(«.»,$filename))!=»php»){
if($name!=»»){
$filename = $name.».».end(explode(«.»,$filename));
}
header(‘Content-Description: File Transfer’);
header(‘Content-Type: application/octet-stream’);
header(‘Content-Disposition: attachment; filename=’ . $filename);
header(‘Content-Transfer-Encoding: binary’);
header(‘Expires: 0’);
header(‘Cache-Control: must-revalidate’);
header(‘Pragma: public’);
header(‘Content-Length: ‘ . filesize($file));
// читаем файл и отправляем его пользователю
readfile($file);
}else{
die(«Не шали!»);
}
exit;
}
}
?>

 

В шаблоне вывода свойств у элементов:

$res = CFile::GetList(array(«ORIGINAL_NAME»=>»asc»), array(«@ID»=>$arResult[‘PROPERTIES’][‘FILES’][‘VALUE’]));
while($arr_res = $res->Fetch())
{
$files[] = $arr_res;
}

foreach($files as $key => $file):

$path = CFile::GetPath($file[«ID»]);

$file[«CONTENT_TYPE»] = (mime_content_type($_SERVER[‘DOCUMENT_ROOT’].$path));

<a href=»<?=$path?><?if (!empty($file[‘DESCRIPTION’])){ echo «?name=».$file[‘DESCRIPTION’].»&path=».urlencode($path);}?>» class=»arr_r» download></a>

endif;