工作中经常会遇到:
- 由于程序问题导致数据错误,把程序改正后还需要写脚本修复数据;
- 需要写个临时脚本组装数据并插入到数据库中;
最简单暴力的解决方式(我在工作中时常遇到)是通过浏览器访问脚本来达到目的,在数据量少的情况下,这样做没问题,但是一旦数据量大了,极有可能出现超时问题:PHP超时或者Nginx超时。
接下来说说三种处理超时的方式:
- PHP超时的话就设置它永不超时,比如set_time_limit(0) 。PHP不超时了,Nginx却报504超时,需要研究不让nginx超时的设置方法;
- 通过分页的方式把数据切分,然后再通过改变url地址上的page参数值来处理切分后的数据;
- 想想解决超时问题的思路方向是否存在问题。
第1第2种方式都是属于反人类的解决问题的方式,因为web浏览器是拿给用户访问用的,不是用来超时的,除非网络问题,绝非代码问题;其次处理数据居然用浏览器还用分页的方式。。。(这种情况在工作中还不少见!);
运行PHP不光可以通过web浏览器,还可以通过命令行模式运行。
对于命令行模式,我以前也了解得不多,当我看到下面这张表时才知道里面知识点并不少:
注意这个max_execution_time设置选项,它可以保证通过CLI方式运行PHP代码时,不需要像在浏览器中运行还要设置set_time_limit(0)来保证不超时。
另外还有一点通过CLI方式运行PHP代码也可以避免Nginx 504超时错误,因为它压根和Nginx没有关系。
其它设置选项同样值得看看,很有意思。比如implicit_flush,通过浏览器的方式访问脚本时输出的信息不会马上显示而是要等到脚本都执行完了才显示,而在命名行模式中,会实时的输出内容,方便开发人员查看每条数据的处理结果。
所以当需要处理很多的数据时,不要尝试用浏览器访问脚本的方式去解决,试试CLI的方式,很多PHP框架还有专门的章节来讲它的用法。
解决问题的思维方式比解决问题本身更加重要。