我目前正在开发一个PHP,它收集信息,分析信息,将其发送到另一个程序,收集输出并将其呈现给用户。
正常情况下它工作得很好。但有时,另一个程序可能要花费很长时间才能完成(大约2到15个小时,我让它在一夜之间运行,它在早上就完成了)。我想要实现一个杀死按钮,允许用户取消程序,因为它不仅要花很长时间才能完成,而且还要绑定服务器,同时阻止用户做任何其他事情。
当前设置它的方式如下: page1.php收集所有用户输入。the检查用户输入。如果是坏的,它会打印错误。如果输入是好的,它会解析它并通过一个系统调用将它发送到另一个程序。当这一切发生时,一个“算计.”gif出现在屏幕上。程序完成后,输出将显示在页面上。
最理想的是,我希望“杀死”按钮与计算的gif同时出现(并且只在同一时间出现),并且我希望它能够杀死进程(并让输出反映进程已被终止的事实)。
到目前为止,我已经能够让按钮出现在我想要的时间和地点。然而,我没有能够得到实际的杀人功能,我正在寻找。目前,我已经设置了它,以便使用带有javascript函数的html按钮创建按钮,该函数在单击时执行。javascript函数包含带有系统调用的php代码,系统调用查找目标进程并杀死它们(我知道系统调用工作正常,因为我可以在我的终端窗口使用它,它工作得很好)。
以下是相关代码:
startload("calculating");
$opt->run_optimization($output);
stopload("calculating");
这就设置了计算gif和gif按钮,然后运行一个进行系统调用的函数,然后删除计算gif和gif按钮。
system("./optimi/optimi < $infile > $outfile");
这是对另一个程序的系统调用(最优)。
print <<< KILLBUTTON
<br/>
<button type="button" onclick="kill();">Kill</button>
<br/>
<script type="text/javascript">
function kill(){
<?php
system("ps -Af | grep optimi | grep -v grep | awk '{print $2}' | xargs sudo kill");
?>
}
</script>
KILLBUTTON;
这是我的杀人按钮,现在似乎什么也没做。
我应该指出,重写优化程序是我想不惜一切代价避免的事情,考虑到我不是编写它的人,也不是我对它所用的编程语言有经验。
谢谢。
发布于 2012-05-12 00:47:13
您似乎不明白web服务器是如何与浏览器交互的。
当您向运行php的web服务器发送请求时,web服务器加载所请求的文件,解释任何相关的php代码,然后向浏览器发送文本文件。
如果该文本文件中有javascript,您的浏览器将尝试解释/执行它。您不能将php代码放入javascript函数中,并期望当用户执行某些操作时--页面上的所有php都执行一次--当页面被请求时,它就会被执行。
如果您想要运行php代码来响应用户交互,那么您需要为这个php脚本设置一个ajax请求。
https://stackoverflow.com/questions/10560139
复制相似问题