是否可以在服务器上 运行 一个带有 HTML 的 PHP 文件
Is it possible to run a PHP file with HTML on the server
通常当您有一个 .PHP
文件并且客户端请求它时,PHP
代码在服务器上是 运行 而 HTML
和 JavaScript
发送给客户端。
问题
是否可以让服务器在服务器上请求网页(本地)和 运行 同时使用 PHP
代码和 HTML
with JavaScript
?我创建了一个 .html
文件,该文件在本地处理 3 秒后为给定视频的缩略图创建了图像数据。
为什么
我需要为视频生成缩略图。我使用共享主机,但我的主机提供商不支持 ffmpeg
。但是,您可以使用 canvas
和 JavaScript
生成缩略图。我已经给客户很大的压力了。如果可能的话,上传和下载时间将比使用客户端短得多。
尝试次数
我试过使用 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!
});
正如您已经想到的,您可以通过处理结果来处理任何错误。
备注
- 我们用于 iframe (
iframe.load
) 的事件侦听器也会在您开始制作缩略图时触发。所以要小心检查结果的过程(那个 iframe 的内容!)
- 如果您不使用 ajax 或 formdata,那么您的表单操作就是我用作 iframe 的操作。
- 一个问题?如果在此过程中 网络连接 出现故障会怎样?简单的答案!您可以通过多种方式检查缩略图是否存在。如果没有,您可以在用户在他的浏览器中请求它时创建它,并将其上传回服务器并永久保存(就像您在管理员面板中所做的那样!)
通常当您有一个 .PHP
文件并且客户端请求它时,PHP
代码在服务器上是 运行 而 HTML
和 JavaScript
发送给客户端。
问题
是否可以让服务器在服务器上请求网页(本地)和 运行 同时使用 PHP
代码和 HTML
with JavaScript
?我创建了一个 .html
文件,该文件在本地处理 3 秒后为给定视频的缩略图创建了图像数据。
为什么
我需要为视频生成缩略图。我使用共享主机,但我的主机提供商不支持 ffmpeg
。但是,您可以使用 canvas
和 JavaScript
生成缩略图。我已经给客户很大的压力了。如果可能的话,上传和下载时间将比使用客户端短得多。
尝试次数
我试过使用 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!
});
正如您已经想到的,您可以通过处理结果来处理任何错误。
备注
- 我们用于 iframe (
iframe.load
) 的事件侦听器也会在您开始制作缩略图时触发。所以要小心检查结果的过程(那个 iframe 的内容!) - 如果您不使用 ajax 或 formdata,那么您的表单操作就是我用作 iframe 的操作。
- 一个问题?如果在此过程中 网络连接 出现故障会怎样?简单的答案!您可以通过多种方式检查缩略图是否存在。如果没有,您可以在用户在他的浏览器中请求它时创建它,并将其上传回服务器并永久保存(就像您在管理员面板中所做的那样!)