空的$\u POST和$\u文件,但不为空php://input 关于多部分/表单数据请求,iOS AFN网络库

空的$\u POST和$\u文件,但不为空php://input 关于多部分/表单数据请求,iOS AFN网络库,php,ios,yii,multipartform-data,Php,Ios,Yii,Multipartform Data,我正在PHP5.4上实现一个多部分请求(更具体地说,使用Yii框架),其中两个参数是纯文本,另一个是图像文件。问题是,如果我使用标题内容类型:multipart/form data,当我执行请求时,我会收到以下消息 内部服务器错误 未定义索引:myTextVar1 使用文件获取内容('php://input)要检查服务器是否收到参数,我可以看到所有信息都已到达。但是$\u POST和$\u FILES数组都是空的 如果我删除标题内容类型,请求工作正常,$\u POST和$\u FILES数组被正

我正在PHP5.4上实现一个多部分请求(更具体地说,使用Yii框架),其中两个参数是纯文本,另一个是图像文件。问题是,如果我使用标题
内容类型:multipart/form data
,当我执行请求时,我会收到以下消息

内部服务器错误

未定义索引:myTextVar1

使用
文件获取内容('php://input)
要检查服务器是否收到参数,我可以看到所有信息都已到达。但是$\u POST和$\u FILES数组都是空的

如果我删除标题
内容类型
,请求工作正常,$\u POST和$\u FILES数组被正确填充。我曾在Postman Chrome工具、AngularJS和Android上试用过,在任何情况下都是一样的

我们正在使用iOS上的库AFNetworking,它会自动添加内容类型标题,我们希望坚持使用它,而不是尝试使用其他解决方案

有没有可能在PHP上解决这个问题,或者我们应该尝试在iOS上使用替代库

编辑:iOS请求的代码

[会话管理器帖子:路径参数:nil 构造体WithBlock:^(id formData){


我们在NSMutableURLRequest的帮助下,通过使用我们自己的多部分POST请求实现解决了iOS上的问题。但这仍然不能回答为什么我们不能使用AFNetworking或将内容类型头放在Postman、Android和AngularJS上。我们强烈感觉AFNetworking的问题在于发送请求nked(header
transfer encoding:chunked
)。实际上,我们在定制的iOS实现上发送
内容类型:多部分/表单数据,所以不知何故,问题根本不是这个header

在服务器端,当使用Postman工具设置Content Type头时,我可以验证数据是否通过php://input,但没有达到,php://stdin、$\u POST和$\u文件

我们没有尝试在Apache上禁用分块,但这也可能解决问题

我在下面留下了一些相关的链接,可以在将来对其他人有所帮助。。。


你的代码在哪里?
公共函数actionMyRequest(){if(!is_null($\u POST[“myTextVar1”]){//已经在这里崩溃了}
但是应该定义内容类型,这难道不符合逻辑吗?我发现很有趣的是,请求在不设置内容类型的情况下工作,但告诉服务器是多部分的请求会导致请求失败。无论如何,感谢您的回答:)@alex-I似乎,OP使用了AFNetworking,它可以构造多部分消息,您只需指定输入源。但是没有代码,我们只能猜测。OP:请重新表述您的问题,以澄清这一点。iOS代码似乎很好(对不起,我以为您手动将
内容类型设置为其他类型)。为了防止崩溃,您应该使用
isset()
而不是
is\u null()
,但是,这并不能解释为什么参数不在
$\u POST
中。
        [formData appendPartWithFormData:[myTextVar1 dataUsingEncoding:NSUTF8StringEncoding] name:@"myTextVar1"];

        [formData appendPartWithFormData:[myTextVar2 dataUsingEncoding:NSUTF8StringEncoding] name:@"myTextVar2"];

        [formData appendPartWithFileData:dataToUpload name:@"imageAnswer" fileName:@"image.jpg" mimeType:@"image/jpeg"];

    } success:^(NSURLSessionDataTask *task, id responseObject) {
        successBlock();
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        failureBlock();
    }];