php - 数据太大&运行时间长导致500Internal Server Error错误怎么解决?
迷茫
迷茫 2017-04-11 10:18:17
[PHP讨论组]

checkAttendance()里面有个for循环,userList大概有一百多个用户,这样一循环,结果就是最后那个res_arrays肯定是很大的,时间也比较长,有办法解决这个问题吗?
程序应该没问题,我在where后面加上限制条件,比如只有几个用户的时候就可以算出来的。

代码是这样的,打了一些码,希望不影响。。
http://pic.027cgb.cn/20170303...

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(8)
怪我咯

换到服务器上跑没问题了....谢谢各位大大回答~

黄舟

谢邀!

对于数据量大的首先如果有field最好限制field,而且可以分批处理,每次取5000(固定数量):

    $userCount  = D('model')->count();
    for($i = 0; $i < ceil($userCount/5000); $i++) {
        $begin    = $i * 5000;
        $end      = ($i + 1) * 5000;
        $userList = D('model')->field('key_name')->limit($begin, $end)->select();
        foreach ($userList as $value) {
            ...
        }
    }
    

最后大批量的数据最好文件开头加上:

    set_time_limit(0);      //执行时间无限
    ini_set('memory_limit', '-1');    //内存无限
怪我咯

实现什么功能?

怪我咯

按道理几百个用户循环没什么问题的,看一下你的checkAttendance()方法里面,拖慢了运行速度

伊谢尔伦

在PHP文件开头添加:

set_time_limit(0);

这样即便超时,服务器也会允许程序继续执行

怪我咯

可以 sleep 几秒 然后 for循环的话 不如换成foreach 适量的做做优化 能加缓存就缓存 S 方法还是不错的

巴扎黑

看了一下,你的checkAttendance()方法里面还有查询SQL,首先检查一下SQL执行速度,另外可以在循环的外层一次性查出数据后在来php做过滤筛选,数据量大的情况下做分次查询。

PHP中文网

我觉得这个情况下,即使Php脚本一直在运行,但是你的web服务器应该会超时的,我觉得这样的操作不太好,应该改成异步的。下发这个任务,然后页面用ajax定时拉取一下执行结果,回显到页面给用户看比较好。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号