Yii配合Yar在php5.3.3环境下的错误以及解决方案

最后更新于:2022-04-01 09:55:48

首先感谢[鸟哥](http://weibo.com/laruence),解决这个问题!这里做个简单的总结。 ### 问题 在阿里云服务器上,安装了最新版本的yar和yii,上传了项目代码,但是调用yar封装的接口时,始终提示错误。 ~~~ curl exec failed 'Server returned nothing (no headers, no data)' ~~~ ### 分析 查看错误日志,发现这样的问题。 ~~~ GET /path/to/url HTTP/1.1" 500 16933 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0 ~~~ 服务器的500错误,再检查server的日志,httpd下的error_log。 ~~~ [Thu Jan 02 14:08:22 2014] [notice] child pid 29414 exit signal Segmentation fault (11) ~~~ 发现的情况是这样的。 服务器没有打开coredump,所以暂时还没有core产生。 ### 解决 然后,经过鸟哥4个小时的排查错误,发现,这是由于php5.3.3的bug导致的。 gdb作为测试工具,测试脚本。 修改了yii框架的代码。 ~~~ /framework/web/actions/CInlineAction.php ~~~ 原来是这样的 ~~~ public function runWithParams($params) { $methodName='action'.$this->getId(); $controller=$this->getController(); $method=new ReflectionMethod($controller, $methodName); if($method->getNumberOfParameters()>0) return $this->runWithParamsInternal($controller, $method, $params); else return $controller->$methodName(); } ~~~ 修改后 ~~~ public function runWithParams($params) { $methodName='action'.$this->getId(); $controller=$this->getController(); $method=new ReflectionMethod($controller, $methodName); if($method->getNumberOfParameters()>0) $ret = $this->runWithParamsInternal($controller, $method, $params); else $ret = $controller->$methodName(); return $ret; } ~~~ 这样就ok啦。 ### 后记 鸟哥对自己的作品负责的态度真是佩服,连夜为我们测试,十分感动,谢谢鸟哥的帮助。 对于自己的知识体系来说,在linux上的测试环节和管理都是不熟悉的,一定会把这部分缺口补齐的! 加了个油!![奋斗](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-17_56c446a99dec4.gif)
';