2015-05-24 85 views
0

我使用AWS-SDK的putObject()函數PHP時收到以下錯誤:亞馬遜s3 | MalformedXML狀態代碼:400

PHP Fatal error: Uncaught Aws\S3\Exception\MalformedXMLException: AWS Error Code: MalformedXML, 
Status Code: 400, AWS Request ID: 7E36EB414B2A9436, AWS Error Type: client, 
AWS Error Message: The XML you provided was not well-formed or did not validate against our published schema, 
User-Agent: aws-sdk-php2/2.5.4 Guzzle/3.8.1 curl/7.26.0 PHP/5.5.19-1~dotdeb.1 
    thrown in /sites/sitename/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php on line 91 

即使我接收到錯誤,則進程繼續順利運行,這些文件被移到s3。我知道這很可能與我在函數中包含的參數有關,但我不確定還有什麼需要在那裏,因爲aws api for php只顯示需要的'bucket'和'key'參數。我的配置如下:

$config = array(); 
$config['Bucket'] = IMAGE_BUCKET; 
$config['Key'] = $imageName; 
$config['SourceFile'] = $sourceImageDir; 
$config['ACL'] = 'public-read'; 
$config['ContentLength'] = filesize($sourceImageDir); 

$response = $s3->putObject($config); 

如果我知道該服務需要什麼樣的格式我敢肯定,我可以抓住它變成一個XML字符串後,並將其與比較,我所發送的請求,但我似乎無法找到它。如果存在。我會假設有這樣的事情?

+1

這似乎特別奇怪,因爲REST層的'PUT'(object)不涉及*向S3發送任何XML。 –

回答

0

感謝Michael的評論,我能夠進一步追蹤這個問題。事實證明,問題實際上來自對deleteObjects()的調用。這些命令在cli上的shell腳本中執行,結果是在putObject()的最後一次調用之前還有另一個調用。它試圖發送空數組到s3服務......這顯然會返回給定的MalformedXML狀態碼。