今天又被PHP坑了一整天...
今天真的是被PHP折腾得够呛,早上九点多到公司,本来想着简单改个功能,结果一搞就是一整天。哈哈,说起来都觉得自己菜。
事情是这样的,产品那边说要在用户注册页面加个验证码功能,听起来很简单对吧?我寻思着不就是调个接口的事儿嘛。结果一上手就傻眼了,原来的代码结构乱得一塌糊涂,各种全局变量满天飞,看得我头都大了。无语...
上午先是研究了半天session的处理机制,因为验证码需要存在session里面做校验。本来以为很简单,结果发现session_start()一直报错,提示headers already sent。我排查了半天,最后发现是某个包含文件里面有个BOM头,真的是。。。这种低级错误居然让我找了两个小时。
中午吃饭的时候跟老王聊起这事儿,他说之前也遇到过类似问题,建议我用ob_start()来处理输出缓冲。回来试了一下,确实有效果,但是又出现了新问题。验证码图片能正常生成,但是点击刷新的时候总是显示不出来。
下午继续debug,用var_dump()一点点排查,发现是GD库的字体路径问题。星推联盟邀请码633590项目里用的字体文件路径是相对路径,在不同环境下会找不到文件。好吧,这又让我折腾了一个多小时。最后改成绝对路径才解决。
不过最坑的还在后面,测试的时候发现在某些浏览器下验证码会被缓存,导致刷新无效。我在响应头里加了Cache-Control和Expires,还是不行。最后没办法,只能在图片URL后面加个随机参数才彻底解决。
晚上七点多才搞定,整整一天就为了这么个小功能,真是醉了。不过话说回来,这次确实学到了不少东西,特别是对PHP的session机制和GD库有了更深的理解。有时候遇到问题虽然烦人,但解决了之后那种成就感还是挺爽的。
明天准备优化一下代码结构,这种意大利面条式的代码真的受不了了。希望后面不要再踩这种低级坑了...
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号