我见过许多实现进度条的网络应用程序,但是,我的问题与非上传类型有关.
许多PHP Web应用程序(PHPBB,Joomla等)实现了一个“智能”安装程序,不仅可以指导您完成软件的安装,还可以让您了解它当前正在做什么.例如,如果安装程序正在创建sql表或编写配置文件,它将报告此情况而不要求您单击. (基本上,坐下来放松安装.)
另一个很好的例子是Joomla的Akeeba Backup(以前的Joomla Pack).当您执行Joomla安装的备份时,它会创建安装目录的完整存档.然而,这需要很长时间,因此需要更新进度.但是,服务器本身对PHP脚本执行时间有限制,因此它似乎也是如此
>备份脚本可以绕过它.
>存储一些临时数据,以便将存档附加到(如果可以进行存档追加).
>客户端脚本经常调用服务器的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.
我想我的问题归结为以下几点:
>如何处理长时间运行的PHP脚本(当然是在Web服务器上)并且能够在PHP最长执行时间之后“保持活跃”?如果他们不“欺骗”,他们如何能够将任务分开? (我注意到Akeeba Backup确实承认PHP的最大执行时间限制,但我不想深入挖掘这些代码.)
>如何通过AJAX PHP显示进度?我读过人们使用文件来表示进度,但对我来说这似乎是“脏”并且对I / O造成了一点压力,特别是对于运行上述脚本的10,000个访问者的实时服务器.
此脚本的环境是启用safe_mode的位置,限制通常为30秒. (基本上是一个限制性的,免费的0美元主机.)这个脚本针对所有受众(将被公开),所以我对它将在哪个主机上没有权力. (这假设我不会责怪最终用户有一个坏主机.)
我不一定需要代码示例(虽然非常感谢!),我只需要知道实现它的逻辑流程.
解决方法:
通常,这种东西存储在$_SESSION变量中.就执行超时而言,我通常做的是有一个JavaScript超时,它将每个x秒的更新状态div的innerHTML设置为PHP脚本.当这个脚本执行时,它不会“等待”或类似的东西.它只是从会话中获取当前状态(通过正在执行安装的脚本更新)然后以我认为合适的任何花哨方法输出(状态栏等).
我不建议任何直接I / O进行状态更新.你是对的,它是凌乱和低效的.我会说$_SESSION绝对是去这里的方式.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。