PHP读取具有另一个扩展名的MP4文件



我在一家博物馆工作,我们的网站有很多。MP4视频。我将它们的扩展名更改为。MUS使其更难下载(大多数人不知道如何右键单击网页,单击<video>标签下载,然后重命名(。视频显示良好。它看起来像这样:

<video width='640px' height='480px' controls='controls' />
<source type='video/mp4' src='dinos.mus'>   ◄█■■■
</video>

现在我把视频移到WWW之外的一个受保护的目录中,然后我用PHP读取它们,如下所示:

<video width='640px' height='480px' controls='controls' />
<source type='video/mp4' src='open_file.php?file=dinos.mp4'>   ◄█■■■
</video>

这是open_file.php:

header( "Content-Type: video/mp4" );
readfile( "/home/" . $_GET["file"] );

它运行良好。。。直到我从更改扩展名。MP4至。MUS,则视频不再显示

<video width='640px' height='480px' controls='controls' />
<source type='video/mp4' src='open_file.php?file=dinos.mus'>   ◄█■■■
</video>

我不明白为什么:这是同一个文件,我用PHP发送了正确的头,<video>标记有正确的类型。实际上,在没有PHP的情况下,<video>标记可以很好地使用。MUS文件,所以问题似乎是PHP。

我的问题是:我该如何阅读。MUS文件并将其发送为MP4?

我已经测试了你的代码,内容类型:video/mp4和readfile应该可以工作(它应该与文件扩展名无关,想象一下,如果你从BLOB获得文件数据,它也应该可以工作(

但是如果home目录是相对的,那么请使用"/home/";而不是"/home/";

请确保正确设置了目录/文件权限。假设确保主目录是EXECUTABLE(主目录为chmod a+x(,mus文件是READ-PERMITTED(mus文件为chmod a+r(

所以这个open_file.php起作用:

<?php
header("Content-Type: video/mp4");
readfile("./home/" . $_GET["file"]);
?>

请参阅此处的工作示例:

http://www.createchhk.com/SO/testSO20Nov2021b.php

代码如下:

<video width='640px' height='480px' controls='controls' />
<source type='video/mp4' src='open_file.php?file=test2.mus'> 
</video>

这并不能真正保护文件。你可以通过将文件托管在另一台服务器上,缓冲视频,然后为下一个用户重命名文件来保护文件,有效地删除文件,直到重新加载为止。不过,这需要一段时间才能进行编码。

不过,另一种不同的方法是使用blob-url。这些都是YouTube使用的,它阻止人们轻易找到视频URL。

你可以使用下面的PHP代码来做到这一点:

<?php // php at top of page
$video = file_get_contents('./location/to/file/from/page.mp4');
$video_code = base64_encode($video);
?>

然后,在你有视频文件的地方,你可以这样做:

<video width='640px' height='480px' controls='controls' controlslist='nodownload' />
<source type='video/mp4' src='<?php echo $video_code; ?>'>
</video>

如果有人试图获取视频URL并打开它,它会告诉他们文件已被移动。他们也无法下载该文件。我还建议在视频中添加oncontextmenu='return false;'以提高安全性。

我认为的MIME类型。MUS文件是应用程序/八位字节流
header( "Content-Type: application/octet-stream" );

最新更新