src内容更新时自动刷新页面

时间:2019-07-14 19:41:49

标签: php html ajax video browser-cache

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 }} 无需刷新页面?我没有找到关于此的任何在线解决方案,也许我只是在搜索错误的问题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我不确定您是如何实现的。您甚至离开了index.php页面来上传视频(即通过AJAX进行此操作),还是去了upload.php页面然后回到index.php页面并希望看到新视频?此外,视频名称始终是video.mp4,即使它是其他视频文件也是如此。有很多方法可以解决此类问题,如果视频文件的名称是静态的,则可能会出现缓存问题。

对于图像,一种处理方法是在文件名称后添加一些内容作为查询字符串,但这存在一些问题,并且Apache服务器具有Etag功能可能会有所帮助。对于查询字符串,类似:

“ type =” video / mp4“>,尽管这样做的问题是,即使视频没有更改,它也可能会强制重新加载视频。使用SessionID可能是一种选择,因为在整个Session中都不会更改。还有一个PHP filemtime()函数可以为文件提供修改时间,就缓存问题而言,使用唯一的url更为合适。

还有其他一些SO帖子可以解决。您的问题(我认为)。

您可能想阅读以下内容:

Force Reloading of Images

Etags in Apache

答案 1 :(得分:1)

有。 我在图片上也遇到过类似情况。 我认为浏览器会保存缓存数据,以便播放第一个视频。

在这种情况下,您可以按照以下步骤进行操作。

<video autoplay loop muted> <source src="video.mp4?<?php echo time();?>" type="video/mp4"> </video>

这可防止浏览器缓存video.mp4文件。