我想在家里创建一个电影流媒体网站,这样就可以通过网络浏览器在家里的任何地方访问它。现在我遇到了浏览器不允许加载资源的问题,因为它位于另一个磁盘上,而不在网站文件夹中。
这是代码:
<!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>
如何启用加载资源?
从逻辑上考虑您在这里做什么。虽然服务器端代码确实可以看到文件,但客户端浏览器当然不能。目前,代码通过将其发送到客户端来依赖于此:
<source type="video/mp4" src="E:/Movies/Movie.mp4">
与其考虑文件本身,不如考虑浏览器需要对文件发出的请求。浏览器实际上在这里发出两个请求:
- 一个用于PHP输出的HTML
- 一个用于
src
属性中的文件
对于第二个请求,您需要制作另一个PHP"页面"。(虽然这个"页面"不会返回网页,但它会返回实际的文件。)第二个页面需要知道请求的是哪个文件,并且需要两件事:
- 它需要知道客户端想要哪个文件
- 它需要将文件流式传输到客户端
对于第一部分,您可以将文件名本身添加到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"]
中的值来知道正在请求哪个文件。然后它只需要流式传输该文件。我可以深入了解这部分的细节,但其他地方已经回答了。