Я создаю репозиторий файлов с помощью веб-интерфейса. Пользователи смогут войти в систему (простую систему авторизации PHP) и просмотреть свои файлы, хранящиеся на сервере. Каждый каталог имеет имя, которое определяет, к какому пользователю он принадлежит.PHP - защита локального файла repo
Я борюсь за обеспечение всего этого - я не могу просто выбросить все файлы в корень документа, потому что каждый сможет получить к ним доступ. Все ответы, связанные с этой проблемой, предполагают, что все конфиденциальные и конфиденциальные данные должны размещаться вне корня документа. Это то, что я сделал, но теперь я не могу найти способ показать эти файлы пользователю при входе в систему.
Как мне подойти к этой проблеме? Хранение их в базе данных, поскольку BLOB-это плохая идея, потому что каждый файл имеет более 1.5G. Тот факт, что это видеофайлы, которые будут воспроизводиться с помощью плагина javascript, также важен - им необходимо напрямую обращаться к браузеру пользователя.
UPDATE
Для тех, кто борется с той же проблемой: я сделал, как Sherif предложил в своем ответе. Вам нужно установить mod_xsendfile и добавить
XSendFile On
XSendFilePath "/var/www/"
в файл конфигурации Apache в разделе <Directory>
. Конечно, измените путь в соответствии с вашими потребностями. Затем создайте файл PHP, который будет обрабатывать запросы. Вот пример PHP-как псевдо-код:
$file = $_GET["file"];
if (user_logged_in() && user_allowed_to_download($file)){
$absoluteFilePath = "/var/www/".$file;
header("X-Sendfile: ".$absoluteFilePath);
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$file);
}
Затем вы можете использовать его с jwplayer, VLC и т.д., как так:
<div class="embed_vlc_wrapper">
<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org" version="VideoLAN.VLCPlugin.2"
width="500"
height="500"
version="VideoLAN.VLCPlugin.2"
target="http://localhost/xsend.php?file=1.mp4"
pluginspage="http://www.videolan.org"
/>
</div>
Вы можете хранить файлы в любом месте, и сохранить имена файлов в базе данных. –
@AlexBlex Я знаю, но пользователям необходимо получить к ним доступ напрямую, чтобы просмотреть их содержимое. Недостаточно имени файла. Конечно, я мог бы написать сценарий, который будет временно скопировать каждый файл в корень документа по запросу, а затем (после его загрузки пользователем) удалите его. Но это ужасная идея. –
Если «доступ к ним напрямую» означает «скачать», вы можете использовать [readfile] (http://php.net/manual/en/function.readfile.php). –