我想在PHP中创建类似于加载器的东西,所以我使用了这段代码:
<?php
$x=1;
while($x<=100) {
echo "Loading: $x %<br>";
$x++;
}
?>
Run Code Online (Sandbox Code Playgroud)
这样它将显示从"加载1%"到"加载100%".但是,这将导致所有出现的一个在新线出现后不会消失.因此,我想知道如何使新行显示并且旧的消失,并且这在页面加载后开始,因此用户将能够观看实际加载的加载器从1%到100%.
更新:我知道我应该使用JS和/或Ajax来实现它,我只是想知道是否有办法在PHP中也这样做:)
如何在长循环期间更新进度条 (html) (php -- 数据库导出/导入 mysqli)
我不想使用文件或数据库来存储临时值或循环进程,因为这会导致使用太多 IO(并且在基于文件的解决方案的情况下,客户端最终经常在数据之前读取文件已写)
我正在考虑一些事件类型的情况,但是输出缓冲需要很长时间才能更新显示。
其次,我正在考虑其他人强加的一些向浏览器吐出 javascript 的方法,但这最终导致输出的 HTML 过多(也就是 1,000,000 多条记录被转储)。
基本上,我对如何更新 Web 浏览器中的进度条持开放态度,而 PHP 中正在发生一些非常长的过程(这不是 file_upload 的东西——我意识到有 PHP 的扩展允许获取进度,但是似乎没有任何东西可以获取服务器循环的进度)。
有任何想法吗 ??--- 我真的不想从 PHP/JavaScript/HTML 偏离到其他平台,例如 node.js / cocoa / 等。
我想构建一个实时仪表板,只要有任何更新,脚本就可以轮询并将更新推送到仪表板.任何人都可以告诉你最好的方法是什么.node.js会帮忙吗?
美好的一天.
首先,抱歉我的英语不好=)
所以.我创建了脚本:
<?
sleep(10);
?>
Run Code Online (Sandbox Code Playgroud)
我的Apache有MPM模块,我显然没有在这个脚本中使用会话,只是...只是睡觉(10).当我同时在浏览器中打开2个选项卡时,第一个选项卡在10秒内加载,第二个选项卡加载 - 20秒.
但.当我在两个不同的浏览器中同时打开此脚本时,它会在10秒后加载到每个浏览器中.
所以,我开始思考,我的问题是"连接:保持活力".我改变了我的脚本:
<?
header('Connection: close');
phpinfo();
sleep(10);
?>
Run Code Online (Sandbox Code Playgroud)
phpinfo() - 可以肯定的是,标题是在sleep()之前发送的.Buuuut ......我遇到了同样的问题.在Chrome的第一个标签中,我使用"Connection:close"获取标题,在第二个标签中,当第一个脚本未结束时,我无法获得响应标头.在两个不同的浏览器中 - 一切正常.
而现在我完全没有想到我做错了什么.为什么Chrome无法对我的网站进行2次并行查询?我应该怎么做才能解决这个问题?
PS我不想为我的所有网站禁用keep-alive.我不介意,如果它会加快css,图像和其他东西的加载.甚至其他脚本.但我希望能够在一个浏览器中并行运行一些脚本.PPS例如:在一个页面上将是非常长的ajax查询,例如 - 在服务器端处理一些大数据和用一些小间隔处理ajax查询 - 以获得执行第一个查询的状态.显然,它们必须是平行的.