程序好好的,突然报 cannot use a scalar value as an array 错误,提示错误行内容为:

$data[‘host_list’] = implode(‘|’,$tmp_host_list);

之前一直以为是$tmp_host_list这个数组的问题,在前面加了N多调试信息后发现改到哪还是一样的问题。

纠结了很长时间还是不得其解,同事提示我查看下这两天提交过哪些代码,我回忆了下,之前是更新过一段代码为限制IP之用,今天下午开启了,难道是它的问题?可是它和这个页面是2个不同的进程呢,于是在后台把它关闭,总算是好了,很是奇怪。

但还是希望找到问题的根源,最后终于找到了问题所在。

原来,在接口进入页面我设置了一个session数据存放在memcache里,然后开启IP屏蔽后,本来是应该修改这个数组里的一个键的值,结果我写成了把整个数组赋值成1.

结果导致此接口页面登录成功跳转到下一个页面后获取session的值为1,而我虽然判断了,但是只是简单的if (!$data){…}这样跳转,而错误的把数组设置成了1后,这个判断不成立,于是执行到下面。

$data[‘host_list’] = implode(‘|’,$tmp_host_list);

这样就明白了,原来,此时$data=1,而设置$data[‘host_list’] 的值就会导致 cannot use a scalar value as an array 错误。之前我一直以为是$tmp_host_list数组的问题,所以找错了地方,还一度认为PHP报错的地方错了。。。