2014-09-24 63 views
0

我想在家里创建一个电影流媒体网站,以便它可以通过网络浏览器在家中的任何地方到达。现在,我被困在浏览器中,因为它位于另一个磁盘上,而不是在网站站点文件夹中,因而无法加载资源。PHP家庭电影流媒体

下面是代码:

<!DOCTYPE html> 
<html> 
<body> 

<?php 
$type = "video/mp4"; 
$src = "E:/Movies/Movie.mp4"; 
if (file_exists($src)) { 
    echo "<p>File exists."; 
    echo '<video> 
       <source type="$type" src="$src"> 
      </video>'; 
    }?> 
</body> 
</html> 

我怎么将使加载资源?

+0

我不想让你分心,这显然是一个有趣的项目,但是你之前是否遇到过像[Plex](https://plex.tv/)这样的东西? – Clive 2014-09-24 17:40:38

+1

您可能需要在apache中设置别名以将远程目录指向文档根目录下的文件夹,或者只需创建一个位于文档根目录下的php脚本,然后发送正确的标题并调用'readfile($ src );'。 – 2014-09-24 17:40:39

+0

@Clive,谢谢我听说过Plex,但是我希望像您建议的那样将其作为一个项目自己完成。:) – Warosaurus 2014-09-24 17:49:33

回答

2

从逻辑上考虑你在这里做什么。虽然服务器端代码确实可以看到该文件,但客户端浏览器当然不能。和代码当前依赖于通过发送给客户:

<source type="video/mp4" src="E:/Movies/Movie.mp4"> 

想着文件本身,而不是,想想浏览器需要对文件中的要求。浏览器实际上是使请求在这里:

  1. 一个用于PHP输出
  2. 一个在src属性

对于第二个请求该文件的HTML,你需要另一个PHP“页面”。 (虽然该“页面”不会返回网页,但它将返回实际的文件。)第二页将需要知道哪个文件被请求并且将需要两件事:

  1. 它需要知道客户希望
  2. 它需要的文件流式传输到客户端

在第一部分,你可以将文件名本身添加到URL上的查询字符串的文件。 你会在这里小心,因为客户端可以请求任何文件,所以在你的服务器端代码,你要确保未经授权的文件请求被拒绝。但本质上是代码可能是这个样子:

$src = "streamMovie.php?file=" . urlencode("E:/Movies/Movie.mp4"); 

这将导致类似:

<source type="video/mp4" src="streamMovie.php?file=E%3A%2FMovies%2FMovie.mp4"> 

现在steamMovie.php知道通过检查$_GET["file"]值所请求的文件。然后它只需要流式传输该文件。我可能进入该部分的细节,但它已经是answered elsewhere

+1

我只是想说,要非常小心这样的事情。您基本上允许访问系统上的任何文件,包括敏感文件和php源文件。这里需要有一些保护来防止加载电影目录之外的文件。 – 2014-09-24 18:00:52