使用php在webroot外面阅读视频文件

时间:2017-01-17 07:14:21

标签: php moodle

我正在使用moodle 3.1+。我试图使用readfile函数读取webroot外的文件。该文件是一个视频文件,但没有任何扩展名保存。现在,当我执行脚本时,我收到错误"视频无法播放,因为文件已损坏"。

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

请帮忙

2 个答案:

答案 0 :(得分:0)

不确定你的目标,但我不认为以这种方式访问​​moodledata是个好主意。你如何处理权限?以及如何处理文件被删除的情况?

为什么不通过moodle本身服务呢?我假设你想提供下载文件? /ressource/view.php将是一个很好的切入点。您可以根据重定向构建自定义脚本,该重定向使用view.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);

答案 1 :(得分:0)

我能够使用以下代码显示该文件。

$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