首先感謝[鳥哥](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上的測試環節和管理都是不熟悉的,一定會把這部分缺口補齊的!
加了個油!
- 前言
- php編寫RSS源
- PHP編寫rss源(續)
- ubuntu 上給PHP安裝擴展 Msgpack 和 Yar
- PHPCMS廣告模塊詳細分析——廣告的生成
- Yii配合Yar在php5.3.3環境下的錯誤以及解決方案
- 【Yaf】Yaf的環境安裝遇到的問題以及解決方案
- 【PHP擴展】centos給PHP安裝擴展
- 【MYSQL】PHPMYADMIN出現的問題以及解決方案
- 【PHP】阿里云升級PHP到5.5詳解
- 【phpMyAdmin】修改配置文件連接到其他服務器
- 【PHP】PHP5.4.0版本ChangeLog詳解(上)
- 【PHP】編譯安裝 PHP5.6.13遇到問題以及解決方案
- 【翻譯】PHP7——新特性
- 【PHP】數組foreach引發的小問題
- 【CURL】PHP的CURL開發項目最佳實踐
- 【PHP】PHP轉換圖片為ico格式源碼
- 【PHP】PHP圖像裁剪縮略裁切類源代碼及使用方法