隐藏html视频网址源/限制Linux文件夹到特定的php用户

问题描述 投票:0回答:2

我的PHP文件中有多个带有源URL的HTML视频标签:

<video class="d-block video-js vjs-default-skin col-video" width="100%" controls:false;>
    <source src="<?php echo $videoPath; ?>" type='video/mp4'>
</video>

由客户端加载,source属性在Web浏览器中如下所示:

<source src="./Username/videos/001_video.mp4" type='video/mp4'>
{...}
<source src="./Username/videos/002_video.mp4" type='video/mp4'>
{...}

我的问题是我不希望客户端通过更改视频标签的source属性上的URL来查看其他用户的视频。

这似乎被称为“用户限制内容/资源”(不确定,因为我是C / C ++ dev。)。

我没有在L.A.M.P上使用任何框架,纯PHP。 (Apache2)Web服务器。

我知道这是10年前制作的,并且通过使用框架或其他语言(如NodeJS)有很多新的解决方案,但目前我没有可能改变网站的架构(但它将在未来)。

这可以在Apache配置的服务器端完成(如果可以吗?),或者在HTML / PHP Web端。

我在问之前在网上看到的是像这样的解决方案(https://www.sitepoint.com/community/t/hide-video-url/225822/7),我尝试过:

<source src="video.php?show_the_video=VIDEO_ID/NAME_ENCRYPTED" type='video/mp4'>

在video.php中有这样的东西:

if (($_SERVER['REQUEST_METHOD'] === "GET") && ( isset($_GET['show_the_video']) )) {
    $uncryptedPath = decrypt($_GET['show_the_video']);
    $ctype = 'video/mp4';
    header('Content-Type: ' . $ctype);
    $file_path_name = $uncryptedPath;
    $handle = fopen($file_path_name, "rb");
    $contents = fread($handle, filesize($file_path_name));
    fclose($handle);
    echo $contents;
} else {
    echo "";
}

但它似乎对我不太好(可能因为我在同一页面上有很多视频标签)。它部分工作但加载页面的速度很慢......这对我来说是不可接受的。用大约20个视频标签加载页面需要花费很长时间。

有人可以通过路由我或提出解决方案来帮助我吗?

php html video tags apache2
2个回答
0
投票

@ Script47提出的解决方案很简单:

  • 保留视频源标记如下:
  • 但只能在一个视频标签上显示全屏视频(按型号),并用缩略图替换其他视频标签

我试过这个,但似乎加载1分钟(~8MB)的视频文件,在PHP中使用fopen()和fread()函数是如此之慢。

在PHP中从MP4文件流式传输到视频源标签的任何方式,但是比fopen()/ fread()快(或使它们更快)?


0
投票

那么使用RewriteMap呢?您的src标记包含加密的URL。我是你的.htaccess,你写下面的内容:

RewriteMap videos "txt:/path/to/map.txt"
RewriteRule "(crypted-pattern)" "/path/to/videos/${videos:$1}"

您的map.txt看起来像这样,并且必须在上传新视频时进行更新:

hash1 user1/video1.mp4
hash2 user1/video2.mp4
hash3 user2/video1.mp4
# and so on...

用户更改散列URL并获取有效视频文件的概率相当小。

您还可以使用SQL数据库或其他映射类型而不是普通的txt文件。

© www.soinside.com 2019 - 2024. All rights reserved.