Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在不公开访问的情况下返回视频文件_Php - Fatal编程技术网

PHP在不公开访问的情况下返回视频文件

PHP在不公开访问的情况下返回视频文件,php,Php,长话短说,我想在我的网站上向登录的人播放一段视频。没有登录,你就不能看到它们或公开访问它们 这意味着我把视频文件放进了一个没有公共访问权限的文件夹,只能通过www数据访问 现在,为了使它更简单一些,我将使用基本的html和php文件。假设我使用的是uikit视频播放器 video.html <div id="video-box" class="video-card__box" style="display: none"> <video id="video" class

长话短说,我想在我的网站上向登录的人播放一段视频。没有登录,你就不能看到它们或公开访问它们

这意味着我把视频文件放进了一个没有公共访问权限的文件夹,只能通过www数据访问

现在,为了使它更简单一些,我将使用基本的html和php文件。假设我使用的是uikit视频播放器

video.html

<div id="video-box" class="video-card__box" style="display: none">
     <video id="video" class="uk-responsive-width" width="auto" height="auto">
         <source src="fileHandler.php?file=video.mp4"></source>
     </video>
</div>

我希望你能理解我的处境。我已经想了好几天了,就在今晚,我试图解决这个问题

您正在考虑通过PHP传递视频文件,这不是一个好主意,因为:

  • 对于每个视频流,您将得到1个PHP进程连续运行,这将消耗内存和资源,并延长您的最大执行时间。如果你的网站上有适度的负载,那么通过这种方式很容易耗尽进程
  • 你将很难实现正常HTTP服务器免费提供的HTTP功能。就像从文件中间流式传输一样

一个合适的解决方案:使用PHP代码只处理授权,然后nginx将进行视频流处理(它非常擅长)。

当用作HTML5视频标签的源代码时,它肯定不会尝试下载它?我认为你的方法是正确的,只要确保mp4文件不可公开访问就行了
if (Auth::check())
{
      header('Content-Type: video/mp4');
      header('Content-Length: ' . $size); // Lets say I know the filesize
      fpassthru(fopen($_GET['file']), 'rb'));
}