标签:php javascript ajax progress
我见过许多实现进度条的网络应用程序,但是,我的问题与非上传类型有关.
许多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绝对是去这里的方式.
标签:php,javascript,ajax,progress 来源: https://codeday.me/bug/20190709/1417311.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。