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

Is it possible to run a PHP file with HTML on the server

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

问题

是否可以让服务器在服务器上请求网页(本地)和 运行 同时使用 PHP 代码和 HTML with JavaScript?我创建了一个 .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 的情况下执行此操作,那就太好了。

我认为没有其他方法可以在 php 服务器上生成缩略图,而不是使用 ffmpeg。 我想你唯一能做的就是在页面加载时强制生成 canvas 如果你还没有这样做的话。

不管怎么说,你都在尝试做错事。 Php 不计算 html 代码,它只是一个预处理器,而不是像浏览器那样的解释器。你可以一直等待,但你永远得不到只有浏览器才能生成的图像内容。

所以正如我在评论中提到的,我要解释的只是一个选项(不是最好的选项,只是回答您对 运行 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. 一个问题?如果在此过程中 网络连接 出现故障会怎样?简单的答案!您可以通过多种方式检查缩略图是否存在。如果没有,您可以在用户在他的浏览器中请求它时创建它,并将其上传回服务器并永久保存(就像您在管理员面板中所做的那样!)