2015-05-24 88 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状态码。