PHP执行时间过长导致Discuz的计划任务失效

2013年10月30日 分类: Discuz, PHP (112 个脚步)

最近这俩个星期都收到会员的抱怨,说几天过去了,论坛每天的可用上传量还是只有可怜的几百K,搞得想上传附件都不行。

一开始还以为是论坛经过一系列的DDOS攻击后修改了部分配置所导致的,排查了很久都没发现问题,到最后面只能是临时调整用户组的上传额度。

但这个也不是个办法啊,论坛的空间有限,只能是限制每天最多上传50M。

今天又接到一个会员的抱怨,我就怀疑是不是论坛的程序上出现了什么问题。

在discuz的代码中找了半天,终于发现原来每天会更新上传量和个数的地方。看了一下,代码没啥问题啊~~去后台编辑了这个文件的执行时间后保存,发现这个脚本就自动执行了,1分钟过去了,页面直接提示500错误。

好吧,原因终于找到了。因为我们的数据库非常大,执行起来就超出了nginx所设定的数值,然后就提示500错误了。在网上找寻了一番后,发现了一个在后台执行任务的神器—-fastcgi_finish_request

页面如果加上这个函数后,使用浏览器打开页面,在它前面部分的语句按照正常的顺序执行到fastcgi_finish_request后,页面响应就已经结束了,但是,后面在fastcgi_finish_request()后面的语句还是会在服务端继续执行下去,直到所有的任务完成后才结束。

所以,这个东西对于我们来说是一个很好的消息,将fastcgi_finish_request();这个函数加入到脚本的顶端,让脚本直接从服务端运行,不影响正常的网页浏览,而且还不会造成页面由于长时间查询导致的500错误。考虑到我们的数据量有点大,所以我们决定将某系语句改写成每次只执行几万条,循环执行结束。这样就减轻了单次删除或者更新全部数据的压力了。

这个对于大型的论坛或者其他大数据量的网站来说是非常不错的,既不影响用户的体验,又能实时的将数据进行更新操作。推荐使用。

 

PHP执行时间过长导致Discuz的计划任务失效 【声明】本文 PHP执行时间过长导致Discuz的计划任务失效 为柠之漠然原创文章,转载请注明出自 枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2013/10/php-execution-time-is-too-long-leads-to-failure-in-discuz/ , 转载请保留本声明!

标签:
目前还没有任何评论.
你必须要启用 Javascript