在YII项目实施过程中,遇到一个问题,即,只在某一个module里需要获取IP的来源,并判断具体来自于何处。
默认在yii里取得客户端IP只有一个简单的方法,来自于ChttpRequest类,只是这里只有一个判断,即Remote_addr,而这个,一般来说是不准的,因此,我直接COPY了康盛的IP来源判断。
然后通过那个比较出名的iplocation类读取wry.dat,来获取IP的定位(iplocation仿佛是几年前王总写的还是andot写的?用来分析纯真IP库的。说起这个wry.dat,事实上,它的来源还真是要从以前的一款软件:追捕说起,但那个年代远了,早就消失在历史的长河中了。)
好吧,上面就是我要说的背景,于是,我认为,既然要在module里获取,那么我就在module的init方法里直接实现了吧。
然后,我把具体的获取IP,并且分析IP来源,并到数据库查询以获取Area_id的代码扔在了module 的 init 方法里,然后运行一看,直接502 bad gateway出现了。折腾了好久,发现都一直是502。
但是测试了一下,把这些代码COPY到Controller的action里面,又十分正常(因为没空研究module的实现),于是就把代码COPY到module的beforeAction方法中了。
然后问题解决。(没仔细想为什么,只是纯粹一个记录,让自己知道,尽量不要在init里写上一大堆实现代码。。。)