我有一个网站,人们可以在上面请求处理某些文件,处理在我的服务器上完成,然后处理后的文件可供下载。我想让我的网站管理员从网站上看到处理代码是否正在运行,已经失败,正在等待等。
所以我想我只想在网页上有一行写着"等待","活动","失败"等。我希望它使用php
这是总体轮廓,特别是我的系统是这样工作的:
•当用户选择一个处理任务时,它被添加到mysql数据库中使用php。
•一个名为monitor_database.py的python代码在屏幕实例中运行,它监视数据库并在注意到数据库中有新请求时启动适当的处理作业。
•一旦处理完成,数据库就会更新。
所以我希望能够从我的网页上看到屏幕会话和我的monitor_database.py是否正在运行,以及monitor_database.py是否已经发送了任何要处理的东西,或者正在等待。
谁有什么建议,如何最好地实现这一点?
如果你不采用IE,你可以使用WebSockets。
这个答案和你的问题一样笼统;-)
最常用的方法是使用Ajax调用。例如,看看有多少旅游网站在搜索航班时显示状态屏幕。
具体的方法取决于应用程序,但原则上你有一个"状态"页面(可以是用户上传文件的页面)。状态页包含JavaScript,每30秒调用服务器上的PHP脚本;PHP脚本依次查询数据库以查找当前文件的状态,并返回一些XML或JSON。网页上的JavaScript会解释XML或JSON,并使用结果更新页面。这里有更多的描述。这里有样例代码。
这是我最终选择的解决方案…
首先,我在我的数据库上创建了一个新的mysql表,它只包含一行,描述我的代码的状态(等待,做这个,做那个,等等)
现在我的页面上有以下php代码:
exec( "ps aux | grep process_name.py | grep -v grep | grep -v emacs", $pids );
// This looks for any processes named 'process_name.py', ignoring those caused by emacs,
// and the one caused by grep itself.
$r_process = @mysqli_query($database, "SELECT status FROM process_status WHERE status_id=1");
// This checks the status of the file in the database.
$Monitor = mysqli_fetch_array($r_process);
$StatusName = $Monitor['status'];
if ( empty($pids) )
{
$Status = 'Failed';
}
else
{
$Status = 'Operating';
}
现在,在我的html中,我可以有一个显示"在process1上失败"或"在process2上操作"的东西,这取决于我的进程是如何进行的。我必须刷新我的页面才能让它改变。我相信前面的答案假设我希望避免刷新页面,并建议避免刷新的方法,但实际上我只是想要一种简单的方法来检查进程是否正在运行。exec ( gps... )
是关键。