是否可以在服务器上运行带有HTML的PHP 文件

问题描述 投票:1回答:2

通常,当您有.PHP文件并且客户端请求它时,PHP代码在服务器上运行,并且HTMLJavaScript被发送到客户端。

问题

服务器是否可以请求网页(本地)并在服务器上同时运行PHP代码和HTMLJavaScript?我创建了一个.html文件,该文件在本地处理3秒后会为给定视频的缩略图创建图像数据。

为什么

我需要为视频生成缩略图。我使用了共享托管,但是托管服务提供商不支持ffmpeg。但是,您可以使用canvasJavaScript生成缩略图。我已经给客户施加了很大压力。如果可以的话,上传和下载时间将比使用客户端明显缩短。

尝试

我已经尝试使用file_get_contents(),但是它没有运行代码(使您理解)。有没有一种方法可以让它打开并运行x秒,然后抓取内容?

我尝试使用curl使用this function here获取文件。我相信它与我先前的尝试相似,因为它获取文件内容,但是从不执行它们。

我最后的尝试是使用new DOMDocument()。我什至无法加载页面。首先,我无法使用video标签对其进行解析。它给出了这个错误:

Warning: DOMDocument::load(): Specification mandates value for attribute controls in 
file:\path\to\html\document.html, line: 53 in C:\path\to\php\document.php on line 50

如果要删除视频标签(这是必需的),则在解析JavaScript时会出错。因此,该尝试也无效。

有什么方法可以让PHP在获取内容之前x秒内处理代码(用于服务器上的某些内容)?这样会留出时间来生成缩略图数据。如果还有另一种方法可以在不使用服务器上的ffmpeg的情况下这样做,那就太好了。

javascript php html html-parsing
2个回答
1
投票

所以正如我在评论中提到的,我要解释的只是一个选择(不是最好的选择,只是回答您对运行html代码的需求!)

在哪里做?

我个人比较喜欢在管理员的浏览器上传视频时执行此操作,最好的方法是,您可以在发布过程中执行此操作。因此,在您要完成此过程的页面中,放置一个不可见的iframe,如下所示。

<iframe id="myIframe" style="display: none;"></iframe>

如何开始该过程?

我不知道您用来上传视频的方式(确实并不那么重要!),但让我们假设您要使用formdata。视频上传后,您需要了解一些独特的信息来寻址视频(例如,一个ID)。因此,在视频上传之后,我们可以接收诸如id:20, initiateThumbnail:true之类的代码作为结果json数据。然后,我们可以简单地使用该隐藏的iframe作为您一直要求的浏览器,如下所示:

$("#myIframe").attr("src","dothething.php?video=20");

现在执行您想在其中执行的任何操作,并在完成后更改其内容。现在您需要等待结果!

$('#myIframe').load(()=>{
    let result = $("#myIframe").contents();
    // checking result!
});

您已经考虑过,可以通过处理结果来处理任何错误。

注意

  1. 我们同时开始制作缩略图时也会触发用于iframe(iframe.load)的事件监听器。因此,请注意检查结果的过程(该iframe的内容!)
  2. [如果您不使用ajax或formdata,那么简单的表单动作就是我用作iframe的东西。
  3. 一个问题?如果网络连接在此过程中断开,会发生什么?简单的答案!您可以通过多种方式检查缩略图是否存在。如果没有,您可以在用户在浏览器中请求它之后立即创建它,并将其上传回服务器并永久保存(就像您在管理面板中所做的一样!)

0
投票

[我认为除了使用ffmpeg,没有其他方法可以在php服务器上生成缩略图。我想,您唯一可以做的就是在尚未加载页面时强制生成画布。

无论如何,您正在尝试做错事。 PHP不会评估html代码,它只是一个预处理器,而不是像浏览器一样的解释器。您可以等待世界上所有的时间,但永远不会获得只有浏览器才能生成的图像内容。

© www.soinside.com 2019 - 2024. All rights reserved.