【问题标题】:Automatically refresh page when src content is updated更新 src 内容时自动刷新页面
【发布时间】:2019-11-23 14:46:06
【问题描述】:

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,它仍然显示第一个,尽管内容发生了变化(我知道这一点,因为如果我进入控制台并单击 video 标签中的 src,它是第二个我上传的视频。)

因此,如果用户在浏览器上打开了index.php,并使用upload.php 添加了一个新文件,是否可以自动更新index.php 上的内容 必须刷新页面?我没有在网上找到任何关于此的解决方案,也许我只是在搜索错误的问题。

感谢所有帮助,谢谢。

【问题讨论】:

  • 您必须以某种方式通知客户某些事情发生了变化。查看服务器发送的事件和 EventSource API。

标签: php html ajax video browser-cache


【解决方案1】:

那里。 我经历过类似的图像案例。 我认为浏览器会保存缓存数据,因此会播放第一个视频。

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

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

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

【讨论】:

  • 这确实解决了缓存问题,非常感谢。现在我需要弄清楚如何在upload页面提交新文件时自动刷新index页面。
【解决方案2】:

我不确定您是如何实现的。你甚至离开 index.php 页面来上传视频(即通过 AJAX 以某种方式进行),还是去 upload.php 页面然后返回 index.php 页面并期望看到新视频?此外,视频名称是否始终为 video.mp4,即使它是不同的视频文件。有很多方法可以解决这类问题,如果视频文件的名称是静态的,您可能会遇到缓存问题。

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

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

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

您可能需要阅读这些内容:

Force Reloading of Images

Etags in Apache

【讨论】:

  • 感谢您的回复,我会查看这些链接。关于你的问题“或者去upload.php页面然后回到index.php页面并期待看到新视频”,是的,这就是我所期待的。
  • 您是动态更改视频的名称,还是总是 video.mp4 并且您正在覆盖它?
  • 在我的第一个实现中,它始终是 video.mp4,但我将其更改为 Mark 上面的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2020-07-28
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
相关资源
最近更新 更多