通常,当您有.PHP
文件并且客户端请求它时,PHP
代码在服务器上运行,并且HTML
和JavaScript
被发送到客户端。
服务器是否可以请求网页(本地)并在服务器上同时运行PHP
代码和HTML
和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
的情况下这样做,那就太好了。
所以正如我在评论中提到的,我要解释的只是一个选择(不是最好的选择,只是回答您对运行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.load
)的事件监听器。因此,请注意检查结果的过程(该iframe的内容!)[我认为除了使用ffmpeg,没有其他方法可以在php服务器上生成缩略图。我想,您唯一可以做的就是在尚未加载页面时强制生成画布。
无论如何,您正在尝试做错事。 PHP不会评估html代码,它只是一个预处理器,而不是像浏览器一样的解释器。您可以等待世界上所有的时间,但永远不会获得只有浏览器才能生成的图像内容。