您好我的问题,因为我的Mamp Pro在我的MacOS开发系统上升级了新的PHP 5.3.29版本。
我在浏览器中使用AngularJS并将带有PUT / POST-Request的Form-Data发送到服务器。
POST请求:
{"checklistentyp":"SB Rollout","anzahl_filialen":"12","kam":"1","kb":"1"}
在服务器端我使用PHP 5.3.29宽度ZendFramework 1.12.8和RESTful
当我转储请求数据时:var_dump($this->_request->getParams());
我在索引0的数组中有我的JSON-String
array(5) {
["module"]=> string(3) "api"
["controller"]=> string(10) "checkliste"
["action"]=> string(4) "post"
["format"]=>string(4) "json"
[0]=>string(73) "{"checklistentyp":"SB Rollout","anzahl_filialen":"12","kam":"1","kb":"1"}"
}
My Prodserver with Linux和PHP 5.3.10没有这个问题,一切正常。
在升级到新的MAMP版本之前,我的MacOS开发系统一切正常。
更新 用PHP 5.3.14同样的问题。我用于RESTful这个库https://github.com/codeinchaos/restful-zend-framework
更新2: 我想我发现了这个问题。当我这样做时:
$fc = Zend_Controller_Front::getInstance();
$cp = $fc->getRequest()->getHeader('Content-Type');
var_dump($cp);
转储输出为bool(false)
所以我认为问题出在Zend和PHP之间。 RESTful库中的context-Switcher无法检测Content-Typ并返回原始主体。有什么想法来解决这个问题?
答案 0 :(得分:1)
Mac OSX中存在一个PHP错误,目前已打开。见https://bugs.php.net/bug.php?id=66606&thanks=6
Zend Framework在某些环境中受到影响,因为该bug会阻止正确确定标头类型。 restful-zend-framework依赖于$ fc-> getRequest() - > getHeader(' Content-Type')方法来确定响应。见http://framework.zend.com/issues/browse/ZF-5705。本文档包含一种解决方法。
将以下代码添加到public / index.php应该修复。
if (isset($_SERVER['CONTENT_TYPE'])
&& !isset($_SERVER['HTTP_CONTENT_TYPE'])
) {
$_SERVER['HTTP_CONTENT_TYPE'] = $_SERVER['CONTENT_TYPE'];
}