簡體   English   中英

空的$ _POST和$ _FILES,但在multipart / form-data請求上非空的php:// input,iOS AFNetworking庫

[英]Empty $_POST and $_FILES, but non empty php://input on multipart/form-data request, iOS AFNetworking library

我正在PHP 5.4上實現一個多部分請求(更具體地說,使用Yii Framework),其中兩個參數是純文本,另一個參數是圖像文件。 問題是,如果我使用標題Content-Type: multipart/form-data ,則在執行請求時會收到以下消息

內部服務器錯誤

未定義索引:myTextVar1

使用file_get_contents('php://input')檢查服務器是否接收到參數,我可以看到所有信息都已到達。 但是$ _POST和$ _FILES數組均為空。

如果我刪除標題Content-Type ,則請求工作正常,$ Content-Type POST和$ _FILES數組已正確填充。 我曾在Postman Chrome工具,AngularJS和Android上嘗試過這種方法,但每種情況下都一樣。

我們正在使用iOS上的AFNetworking庫,該庫會自動添加Content-Type標頭,我們希望堅持使用它,而不是嘗試使用其他解決方案。

有什么可能的方法可以在PHP上解決此問題,還是我們應該嘗試在iOS上使用替代庫?

編輯: iOS請求的代碼

[sessionManager POST:路徑參數:無ConstructingBodyWithBlock:^(id formData){

  [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(); }]; 

在NSMutableURLRequest的幫助下,我們通過使用自己的多部分POST請求實現來解決了iOS上的問題。 但這仍然不能回答為什么我們不能使用AFNetworking或將Content-Type標頭放置在Postman,Android和AngularJS上的原因。 我們強烈感覺到AFNetworking的問題是將請求分塊發送(標頭transfer-encoding: chunked )。 實際上,我們在自定義iOS實現中發送了Content-Type: multipart/form-data ,所以某種程度上問題根本不是那個標頭。

在服務器端,當使用Postman工具設置Content-Type標頭時,我可以驗證數據是否通過php:// input到達,但沒有到達php:// stdin,$ _ POST和$ _FILES。

我們尚未嘗試在Apache上禁用分塊,但這也可以解決該問題。

我在下面留下了一些相關的鏈接,這些鏈接將來可能對其他人有幫助... https://serverfault.com/questions/142512/problem-with-transfer-encoding-chunked-in-apache-2-2/143965# 143965

https://serverfault.com/questions/59047/apache-sending-transfer-encoding-chunked

https://bugs.php.net/bug.php?id=50210

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM