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)