Доставлять одно и то же видео или файл с динамическим именем каждый раз в PHP

У меня есть видео. Предположим, его зовут sample.mp4

Но я хочу, чтобы это служило еще одним динамичным и неповторяющимся именем.

Например:

data-videomp4 = "assets/video/sample.mp4"

должно быть так

data-videomp4 = "assets/video/123456789.mp4"

ИЛИ ЖЕ

data-videomp4 = "assets/video/any_RANDOM_NAME.mp4"

Файл должен остаться только один. Я могу копировать файлы с разными именами во время выполнения, но это будет неразумно.

Поэтому мне нужно что-то вроде динамического МАРШРУТА, который всегда будет связан с одним файлом.

Размер файла всегда меньше 10 мегабайт.

вы используете компонент маршрутизации? если нет, используйте один! и если вы не хотите, возитесь с директивами виртуального хоста .htaccess и настройте перенаправление на файл php, который будет обслуживать ваш файл. Используя маршрутизатор, вы можете установить регулярное выражение, например #assets/video/\w+.mp4#

delboy1978uk 08.05.2018 10:46

Я использую Codeigniter. Как реализовать динамическую маршрутизацию для одного файла? Приведите пример.

Hardik Trivedi 08.05.2018 10:48

Пожалуйста, проверьте документацию codeigniter для динамической маршрутизации codeigniter.com/user_guide/general/routing.html

delboy1978uk 08.05.2018 10:50

Вы пробовали создать символическая ссылка динамически?

Agnius Vasiliauskas 08.05.2018 10:51

Как вы определяете, какой файл обслуживать? В assets/video/ есть только один файл? Тогда файл .htaccess с RewriteRule ^ sample.mp4 сделает свое дело ...

deceze 08.05.2018 11:03

Да есть только один файл. Можете ли вы предоставить мне точную строку, которую я могу где-то разместить? Поставить один и тот же файл с другим именем?

Hardik Trivedi 08.05.2018 11:06

В этом случае я хочу, чтобы файл обслуживался под другим именем. Не перенаправляю на этот файл, ребята. Я знаю твои предложения. Благодарю за помощь. Но ничто здесь не поможет сделать так, чтобы исходное имя файла никуда не разглашалось. Также файл должен доставляться по случайному имени.

Hardik Trivedi 08.05.2018 11:10
"оригинальное имя файла никогда не должно никому разглашаться" - Какой в ​​этом смысл? Если файл доступен через имя любой, то какое значение имеет его "оригинальное название"?
deceze 08.05.2018 11:12

^ Я также не понимаю, почему это необходимо. если вы просто пытаетесь обойти кеш, просто добавьте ?<?php echo time(); ?> или что-то в этом роде. Пользователь по-прежнему сможет загрузить файл, даже если имя будет другим, при условии, что он может получить к нему доступ, а вы не разбиваете выходные данные.

Alex 08.05.2018 21:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
9
60
2

Ответы 2

Я не уверен в правилах перезаписи, применяемых Codeigniter по умолчанию, и в том, как они могут или не могут конфликтовать с ними, но в основном все, что вам нужно, - это заставить ваш веб-сервер обслуживать один конкретный файл независимо от того, к какому URL-адресу осуществляется доступ. Для этого в Apache вы помещаете файл с именем .htaccess в папку assets/video/ со следующим содержимым:

RewriteEngine on
RewriteRule ^ sample.mp4

^ просто соответствует любому запросу и заменяет его на sample.mp4. См. https://stackoverflow.com/a/20563773/476.

Попробуйте генерировать символические ссылки (ярлыки) на лету, работа должна быть быстрой:

<?php

$real_file = 'sample.mp4';

// generating new symbolic link (shortcut)
$rnd_name = md5(random_bytes(100)) . '.mp4';
$cmd = "ln -s {$real_file} {$rnd_name} 2>&1";
$rez = shell_exec($cmd);

// check for errors - for example, no write permission for apache user by default
if ($rez !==null) {
  var_dump($rez);
  exit;
}

echo "<a href='{$rnd_name}' 
         target='blank'>{$rnd_name}
      </a><br><br>
     <video id='myVideo' src='{$rnd_name}' controls='true'>
     </video>";

// don't forget to unlink (delete) created symlinks after some time

?>

Любые объяснения, почему кто-то отклонил мое рабочее решение?

Agnius Vasiliauskas 09.05.2018 08:55

Другие вопросы по теме