我正在使用Web界面进行基本数据输入以运行模拟。这些输入修改数据文件,该数据文件在一些需要很长时间(> 10分钟)的物理模拟中使用。它将生成模拟的图形和mp4视频。我对HTML / PHP缺乏经验,所以我不确定解决这个问题的最佳方法是什么。
我正想着以某种方式创建一个页面,该页面随着模拟中的每个步骤进行更新(尾部输出文件并以某种方式将其输出到页面作为进度的指示)。但我不知道如何处理用户关闭页面或会话是否关闭(工作仍在后台运行,只是没有访问权限。)
有任何想法/建议吗?
答案 0 :(得分:0)
这听起来不像PHP的经典用例。 无论如何,你应该考虑一些选择:
答案 1 :(得分:0)
创建一个PHP页面,修改模拟参数并启动模拟(除非它已在运行)。每次调用此PHP页面时,都会显示模拟的最新状态(在请求时)。页面已经呈现后,使用AJAX定期轮询服务器以获取模拟的更新。
基本上,PHP页面永远不会挂起。它应该始终提供模拟的立即状态并完成。定期的AJAX轮询将为用户提供更新。这也意味着用户可以刷新页面而不会破坏任何内容。
答案 2 :(得分:0)
什么不该做:在典型的PHP文件中创建所有内容(可能包含所包含的文件)。您的用户将打开该页面,他们的Web浏览器将被冻结10分钟。更糟糕的是,许多浏览器有超时60秒;更糟糕的是,PHP有一个默认的30秒超时。
相反,使用某种异步处理。这是我推荐的策略:用PHP / JavaScript创建一个前端,用你选择的语言创建一个后端。
前端将启动PHP exec()
命令,该命令在shell中运行命令。格式如下:
exec("command path/to/script &")
&符号在后台运行命令。命令可以是PHP,Python,Java ......语言取决于你!
您的后端程序会定期将其进度写入某种临时进度文件。
您的前端网页会定期与AJAX沟通以取得进展。完成后,它将转到一个加载输出的新PHP页面。