我见过很多实现进度条的网页应用,不过,我的问题与非上传类型有关。
许多PHP Web应用程序(phpBB,Joomla等)实现了一个“智能”安装程序,不仅可以指导您完成软件的安装,还可以让您了解它当前正在做什么。例如,如果安装程序正在创建SQL表或编写配置文件,它将报告此情况而不要求您单击。 (基本上,坐下来放松安装。)
另一个很好的例子是Joomla的Akeeba Backup(以前的Joomla Pack)。当您执行Joomla安装的备份时,它会创建安装目录的完整存档。然而,这需要很长时间,因此需要更新进度。但是,服务器本身对PHP脚本执行时间有限制,因此似乎要么
我的一般猜测(不是Akeeba特有的)是#3,即:
Web page JS -> POST foo/installer.php?doaction=1 SESSID=foo2 Server -> ERRCODE SUCCESS Web page JS -> POST foo/installer.php?doaction=2 SESSID=foo2 Server -> ERRCODE SUCCESS Web page JS -> POST foo/installer.php?doaction=3 SESSID=foo2 Server -> ERRCODE SUCCESS Web page JS -> POST foo/installer.php?doaction=4 SESSID=foo2 Server -> ERRCODE FAIL Reason: Configuration.php not writable! Web page JS -> Show error to user
我99%肯定不是这种情况,因为这会对用户产生非常讨厌的依赖关系以启用Javascript。
我想我的问题归结为以下几点:
此脚本的环境是启用safe_mode的位置,限制通常为30秒。 (基本上是一个限制性的,免费的0美元主机。)这个脚本针对所有受众(将被公开),所以我对它将在哪个主机上没有权力。 (这假设我不会责怪最终用户有一个坏主人。)
我不一定需要代码示例(虽然非常感谢!),我只需要知道实现它的逻辑流程。
答案 0 :(得分:1)
通常,这种东西存储在$ _SESSION变量中。就执行超时而言,我通常做的是有一个JavaScript超时,它将每个x秒的更新状态div的innerHTML设置为PHP脚本。当这个脚本执行时,它不会“等待”或类似的东西。它只是从会话中获取当前状态(通过正在执行安装的脚本更新)然后以我认为合适的任何花哨方法输出(状态栏等)。
我不建议任何直接I / O进行状态更新。你是对的,它是凌乱和低效的。我会说$ _SESSION绝对是去这里的方式。