Php 安装进度条
我有一个简单的安装程序,它不是按语法划分的,而是按逻辑划分的。下面是它的工作原理:Php 安装进度条,php,jquery,Php,Jquery,我有一个简单的安装程序,它不是按语法划分的,而是按逻辑划分的。下面是它的工作原理: if ($_POST['install'] == "Install") { // fetches user values // creates tables // creates some files // creates some emails // inserts relevant stuff into the database // finishes } 对于这个问题,代码太长,没有必要。这
if ($_POST['install'] == "Install")
{
// fetches user values
// creates tables
// creates some files
// creates some emails
// inserts relevant stuff into the database
// finishes
}
对于这个问题,代码太长,没有必要。这些步骤中的每一步都算作安装完成的20%,我如何制作一个进度条,向用户显示信息?我这样做有两个原因,一个是为了让他们保持跟踪,另一个是为了让他们知道不应该在浏览器选项卡关闭之前关闭它
现在我的想法是为代码的每一部分分配一个变量,例如第一部分$done=20%,第二部分$done=40%,等等,然后简单地显示基于该变量的进度条。我唯一不知道的是如何显示进度条
谢谢我推荐的解决方案: 为流程中的每个步骤创建单独的ajax请求,如下所示
// do first step
$.ajax({
url: myUrl + '?step=1',
success: function() {
// update progress bar 20%
}
});
// do second step
$.ajax({
url: myUrl + '?step=2',
success: function() {
// update progress bar 40%
}
});
// etc.
如果您想保持干燥,请尝试以下方法:
var steps = 5;
for (var i = 1; i <= steps; i++) {
$.ajax({
url: myUrl + '?step=' + i;
success: function() {
// update success incrementally
}
});
}
使用jQuery UI progressbar:
$(function() {
$("#progressbar").progressbar({
value: 0
});
var steps = 5;
for (var i = 1; i <= steps; i++) {
$.ajax({
url: myUrl + '?step=' + i;
success: function() {
// update success incrementally
$("#progressbar").progressbar('value', i * 20);
}
});
}
});
参考最佳做法是将进度值存储在db或键值存储系统(如APC、Memcache或Redis)中。然后使用ajax查询检索进度 一个好的jquery插件来自jquery ui,您可以使用json对进度值进行编码:
// GET /ajax/get-status.json
{
"progress":10,
"error":"",
"warning":""
}
页面:
<div id="error" style="color: red"></div>
<div id="warning" style="color: yellow"></div>
<div id="message"></div>
<div id="progressbar"></div>
<script type="text/javascript">
jQuery(document).ready(function() {
$("#progressbar").progressbar({ value: 0 });
$.ajaxSetup({ cache: false });
function updateProgress() {
jQuery.getJSON("/ajax/get-status.json", function(response) {
if (response.error) {
$("#error").html( response.error );
return;
} else {
$("#progressbar").progressbar( 'value', parseInt( response.progress ) ); // Add the new value to the progress bar
$("#message").html( response.message );
$("#warning").html( response.warning );
if(parseInt( response.progress ) < 100){
setTimeout(updateProgress, 1);
}
}
});
}
updateProgress();
});
</script>
您可以使用HTML5进度条 发送ajax请求并返回完成百分比。 更改进度标记的值
<progress id='p' max="100" value="50"></progress>
这个过程实际需要多长时间?是在一个请求中完成的还是向导式的安装?看起来它一次安装了所有的文件,创建了10个表,插入了一些数据,挂接到cpanel中创建了一些电子邮件,更改了一些文件名,创建了一个文件。我认为top大约需要1-2分钟,这取决于主机的负载。这一切都在一个步骤中完成,您填写一个表单,然后按install=此方法的另一个优点是每个部分都是独立的。如果一个失败了,你还没有失去一切。你可以在它停止的地方重新启动。听起来很简单。如果我说我真正了解ajax,您会建议我如何根据您的代码在这里显示进度条?非常感谢。您编写代码的方式会导致所有ajax函数一次启动,基本上是在同一时间执行每个步骤,当它们应该在步骤中完成时,一个接一个地完成。@SamFisher I使用jQuery UI progressbar实现更新了答案。@PatrickEvans True,因此最好使用for循环方法。如果并发性仍然是一个问题,那么您可以尝试在$.ajax方法中将async设置为false。虽然这是一个答案,但它是一个非常无用的答案。这是怎么回事?他不知道如何显示进度条。它很好,也很简单,我可以在整个php中重复那个html,并在屏幕上显示它。测试atm=我正在研究APC,但据我所知,用户将不得不手动安装它,我正试图使其尽可能简单。我将研究这里提供的所有解决方案,并实现一个,thank you=APC安装在服务器端如果您不想使用db或任何键值系统,您可以随时使用会话。