【问题标题】:Is it possible to run a PHP file with HTML on the server是否可以在服务器上运行带有 HTML 的 PHP 文件
【发布时间】:2020-07-16 17:58:44
【问题描述】:

通常当您有一个.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,那就太好了。

【问题讨论】:

  • 看看stackoverflow.com/questions/21179522/…。希望这会有所帮助。
  • @Deepak,谢谢!这就是我目前正在做的事情。我只是在寻找一种在服务器上运行该脚本的方法,而不必在客户端上运行它以减少客户端的文件传输时间和压力。
  • 我的建议当然不是一个好主意,但您是否考虑过使用隐藏 iframe 之类的东西?例如考虑谷歌登录。一个页面打开,你登录,它保存在某个地方,你使用 API 从它那里得到响应,现在你可以使用隐藏的 iframe 做类似的事情。
  • @MohsenNemati,好的,我没想到。你建议把它放在哪里?管理员用户何时提交视频?还是当视频显示普通用户时?就我而言,管理员用户几乎无法在客户端完成任何处理,这确实限制了我。
  • 我会解释为答案。

标签: javascript php html html-parsing


【解决方案1】:

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

【讨论】:

  • 感谢您的回答,这与仅在页面中包含 dothething.php 有何不同?它会因为iframe而启动一个新线程吗?抱歉,回复晚了,我没有看到 SO 通知我。
  • @Jack dothething.php 负责创建缩略图。我解释的概念很重要,根据代码的工作方式,您可以设计结构。例如,如果您需要来自服务器的一些信息来编辑每个视频,您应该每次使用 iframe 加载数据或使用 ajax 获取该数据(我个人选择 ajax。)如果不需要,那么您是对的,不需要使用 iframe。
【解决方案2】:

我认为除了 ffmpeg 之外,没有其他方法可以在 php 服务器上生成缩略图。 我想,你唯一能做的就是在页面加载时强制生成画布(如果你还没有这样做的话)。

无论如何,您都在尝试做错事。 Php 不评估 html 代码,它只是一个预处理器,而不是像浏览器那样的解释器。您可以一直等待,但您永远无法获得只有浏览器才能生成的图像内容。

【讨论】:

  • 是的,这就是我做对的事情。这就是我所害怕的。
猜你喜欢
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2011-11-11
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
相关资源
最近更新 更多