PHP新手在这里。我正在尝试制作一个简单的页面,您可以在其中上传mp4文件,并且该文件会自动显示在另一页面上。但是,在更改视频的src内容时遇到困难。
这是我的upload.php
:
<!DOCTYPE html>
<html>
<body>
<form action="" method="post" enctype="multipart/form-data">
Select video to upload:
<input type="file" name="file" id="file">
<br>
<input type="submit" value="submit" name="submit">
</form>
</body>
</html>
<?php
if (isset($_POST)) {
if (isset($_FILES['file'])) {
$file_name = $_FILES['file']['name'];
$file_tmp = $_FILES['file']['tmp_name'];
$file_type = $_FILES['file']['type'];
$file_ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if ($file_ext != "mp4") {
echo "Please select an mp4 file.";
} else {
move_uploaded_file($file_tmp, "./video.mp4");
header("Location: success.php");
}
}
}
?>
和我的index.php
在同一目录中:
<html>
<body>
<video autoplay loop muted>
<source src="video.mp4" type="video/mp4">
</video>
</body>
</html>
如果我上传了mp4,它确实可以在index.php
上正确显示。但是,如果我随后上传了不同的mp4,尽管内容有所变化,它仍会显示第一个mp4(我知道这是因为如果我进入控制台并单击src
标签中的video
,这是我上传的第二个视频。)
因此,如果用户在其浏览器中打开了index.php
,并且使用upload.php
添加了新文件,则可以自动更新{{1 }} 无需刷新页面?我没有找到关于此的任何在线解决方案,也许我只是在搜索错误的问题。
感谢您的帮助。
答案 0 :(得分:1)
我不确定您是如何实现的。您甚至离开了index.php页面来上传视频(即通过AJAX进行此操作),还是去了upload.php页面然后回到index.php页面并希望看到新视频?此外,视频名称始终是video.mp4,即使它是其他视频文件也是如此。有很多方法可以解决此类问题,如果视频文件的名称是静态的,则可能会出现缓存问题。
对于图像,一种处理方法是在文件名称后添加一些内容作为查询字符串,但这存在一些问题,并且Apache服务器具有Etag功能可能会有所帮助。对于查询字符串,类似:
“ type =” video / mp4“>,尽管这样做的问题是,即使视频没有更改,它也可能会强制重新加载视频。使用SessionID可能是一种选择,因为在整个Session中都不会更改。还有一个PHP filemtime()函数可以为文件提供修改时间,就缓存问题而言,使用唯一的url更为合适。
还有其他一些SO帖子可以解决。您的问题(我认为)。
您可能想阅读以下内容:
答案 1 :(得分:1)
有。 我在图片上也遇到过类似情况。 我认为浏览器会保存缓存数据,以便播放第一个视频。
在这种情况下,您可以按照以下步骤进行操作。
<video autoplay loop muted>
<source src="video.mp4?<?php echo time();?>" type="video/mp4">
</video>
这可防止浏览器缓存video.mp4文件。