Чтение видеофайла вне webroot с помощью php

Я использую moodle 3.1+. Я пытаюсь прочитать файл вне webroot с помощью функции readfile. Файл представляет собой видеофайл, но сохраняется без какого-либо расширения. Теперь, когда я exeute сценарий я получаю ошибку «видео не может быть воспроизведен, потому что файл поврежден».

header('Content-Type: video/mp4');
readfile('../../../../moodledata/filedir/17/73/17735b4721faa7d59e1fd8a2300135a3f04c9ea6');

Пожалуйста помочь

2 ответа

  1. Не уверен в вашей цели, но я не думаю, что это хорошая идея, чтобы получить доступ к moodledata таким образом. Как вы обрабатываете разрешения? И как вы будете обрабатывать случай, что файл удаляется?

    Почему бы не подавать его через сам moodle? Я предполагаю, что вы хотите предложить файлы в качестве загрузки? / ressource / view.php был бы хорошей точкой входа. Можно создать пользовательский сценарий на основе перенаправления, использующего представление.php для перенаправления в определенный репозиторий.

    $path = '/'.$context->id.'/mod_resource/content/'.$resource->revision.$file->get_filepath().$file->get_filename();
    $fullurl = moodle_url::make_file_url('/pluginfile.php', $path, $displaytype == RESOURCELIB_DISPLAY_DOWNLOAD);
    redirect($fullurl);
    
  2. Я смог показать файл, используя код ниже.

    $fs = get_file_storage();
    $file = $fs->get_file_by_hash(sha1($filepath));
    send_stored_file($file, 0, 0); 
    

    где $filepath генерируется динамически, как показано ниже

    "/$context->id/mod_lesson/mediafile/0".$lesson->mediafile