实时查看PHP视图执行状态,是否可行?

3

我正在使用ubuntu和mktorrent,我想知道是否可以将mktorrent命令的输出实时传输到我的php应用中?这样我就可以观看创建torrent的状态了。 目前,exec只是坐在那里等待(有时长达一小时:O),直到torrent完成制作为止。 PHP进程打开命令是否类似于此,还是我必须找出某种疯狂的ajax与一个屏幕会话设置?


PHP完全在服务器上执行,渲染的页面会发送到您的浏览器。为了显示任何进度并进行更新,您必须反复从服务器请求(或者让服务器通过套接字或长轮询等方式发送进度,但思路是相同的)。 - sachleen
这并不完全正确,我认为我有一个脚本可以从YouTube下载视频,在脚本执行完成之前就能给我实时的进度视图,或者这只是因为file_get_contents()是非阻塞的或类似的原因? - Goulash
:( 是的,ajax 定期从服务器获取文件大小,它只是在与同一脚本的活动下载同时启动...所以我需要想出某种 ajax >屏幕会话设置? - Goulash
如果你可以让mktorrent命令将进度输出到一个文件中,你就可以让php在页面加载时读取该文件并将其回显给用户。你可以使用一个简单的meta刷新标签,在几秒钟后刷新进度页面。 - sachleen
啊,好的,谢谢:P 如果您能在答案中写点什么,那我就可以把这个问题标记为已回答:) - Goulash
显示剩余3条评论
1个回答

2

PHP完全在服务器上执行,渲染后的页面会发送到您的浏览器。为了显示任何进度并进行更新,您需要反复请求服务器(或者让服务器通过套接字、长轮询等方式发送进度,但其基本思想相同)。

您需要一种方法让服务器从命令中发布进度更新,并使用某种JS(AJAX)与服务器通信以获取这些更新。

如果您可以让mktorrent命令将进度输出到文件中,您可以让php在页面加载时读取该文件并将其回显给用户。您可以使用简单的meta refresh标签在几秒钟后刷新进度页面。

有关在PHP中异步执行shell命令的信息,请参见Asynchronous shell exec in PHP


不完全正确,请参见flush() - HellaMad
@DC_ 你是对的,我没有考虑到那一点。虽然如果你使用 flush,你必须知道有些浏览器希望在输出任何内容之前输出一定数量的字符。如果你把这个放到一个完整的答案里,我会点赞的。 - sachleen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接