Роман Махин, парень, вот умеешь тупить (прости меня за выражения). Подучи пожалуйста как хранятся файлы в Битрикс24 - зачем нужна таблица b_file, что такое b_disk_object.
Вот кусочек кода, который делает почти все что нужно - перемещает логический файл с ID - 525 в физическую папку. Там много косяков (которые, я надеюсь, ты сам найдешь и исправишь).
Код |
---|
use \Bitrix\Main\Loader,
\Bitrix\Disk;
/* @var string Папка на сайте, куда будем копировать (нужно чтобы были права на нее) */
$toPath = '/upload/tmp/';
/* @var integer ID файла, который будем копировать */
$iFileId = 525;
try
{
if ( !Loader::includeModule('disk') )
{
throw new Exception("Не подклчюен модуль диска");
}
/* @var Disk\Driver Объект 'управленца' хранилищами */
$driver = Disk\Driver::getInstance();
/* @var Disk\FakeSecurityContext Объект прав - читаем все, а не то что доступно пользователю */
$securityContext = $driver->getFakeSecurityContext();
/* @var Disk\File Объект папки с которой начнем поиск */
$file = Disk\File::loadById($iFileId);
/* @var array Данные по файлу */
$arFileData = $file->getFile();
if ( file_exists($_SERVER['DOCUMENT_ROOT'].'/upload/'.$arFileData["SUBDIR"].'/'.$arFileData["FILE_NAME"]) )
{
if ( copy($_SERVER['DOCUMENT_ROOT'].'/upload/'.$arFileData["SUBDIR"].'/'.$arFileData["FILE_NAME"], $_SERVER['DOCUMENT_ROOT'].$toPath.$file->getName() ) )
{
echo 'Файл перемещен, скачать можно по ссылке <a href="'.htmlspecialchars($toPath.$file->getName()).'" download>'.$toPath.$file->getName().'</a>';
}
else
{
throw new Exception("Ошибка копирования файла!");
}
}
else
{
throw new Exception("Физический файл не найден");
}
}
catch( Exception $e )
{
echo "Произошла ошибка: \r\n";
var_dump($e->getMessage());
} |