近日对一旧版本CMS升级,更新到框架Thinkphp5.0.xx。在服务器迁移的过程中,开发环境中正常的代码在生产环境下报错了,查明原因后做此记录。
开启Thinkphp5调试功能后,报错信息为"Can't use function return value in write context",定位代码内容为:
if(!empty(input("get."))) {
//do something
}
原因很简单:官方文档中说明“PHP empty() 函数用于检查一个变量是否为空”,因此,检测任何非变量都将导致解析错误!
Thinkphp5.0支持的最低版本为php5.4,上述写法在php5.5环境下上述代码正常运行,在php5.4中则报错“HTTP ERROR 500”。并不是php5.5改进了empty()函数,而是php5.5屏蔽了empty()报错而已。同样在使用isset()函数的过程中,也要注意这个问题。
建议采用更严谨的写法:
$get_arr = input("get.");
if(!empty($get_arr)) {
//do something
}
问题解决。