如何使用PHP cURL XML调用附加文件

如何使用PHP cURL XML调用附加文件,php,xml,curl,Php,Xml,Curl,我正在使用AmazonAIMS API上传一个清单文件,我对上传文件的cURL调用有一个问题。文档非常有限,因此没有示例代码对此有所帮助 这就是我到目前为止对cURL调用的了解: // $FILENAME is filename of the CSV file being uploaded: $inventory = fopen($FILENAME, 'r') or die("Can't open file!"); echo $inventory; curl_setopt($ch, CURL

我正在使用AmazonAIMS API上传一个清单文件,我对上传文件的cURL调用有一个问题。文档非常有限,因此没有示例代码对此有所帮助

这就是我到目前为止对cURL调用的了解:

// $FILENAME is filename of the CSV file being uploaded:

$inventory = fopen($FILENAME, 'r') or die("Can't open file!");
echo $inventory;

curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_INFILE, $inventory);
curl_setopt($ch, CURLOPT_POSTFIELDS, ''); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filename));
curl_setopt($ch, CUROPT_PUT, TRUE);


$response = curl_exec($ch);
curl_close($ch);
我尝试将$inventory放入CURLOPT_POSTFIELDS,但没有填充,但我得到了相同的错误

在XML响应中,我得到“
没有附加任何文件”
”,因此明显的问题是将文件附加到XML调用

我还尝试上传,正如第一响应者使用php.net上curl_setopt页面上的示例2所说的那样

为此,我使用了以下代码:

$data = array('@/tmp/amazon_export.csv');

curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 


$response = curl_exec($ch);
curl_close($ch);
我收到了相同的
无附加文件
回复


有什么想法吗?

您正在将
PUT
POST
组合到一个单独的curl操作中,这将不起作用。有关如何使用POST上载文件的示例,请参阅手册页的第页。

这对我很有用:

$hCurl = curl_init();
curl_setopt($hCurl, CURLOPT_PUT,            true);
curl_setopt($hCurl, CURLOPT_HEADER,         true);
curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($hCurl, CURLOPT_CONNECTTIMEOUT, CURL_TIMEOUT_SECS);
curl_setopt($hCurl, CURLOPT_URL,            "$oMessage->url/att/$fid");
curl_setopt($hCurl, CURLOPT_HTTPHEADER,     $aCurlHeaders);
// TODO it could be possible that fopen() would return an invalid handle or not work altogether.  Should handle that
$fp = fopen ($finfo['tmp_name'], "r");
curl_setopt($hCurl, CURLOPT_INFILE,         $fp);
curl_setopt($hCurl, CURLOPT_INFILESIZE,     $finfo['size']);

$sResp = curl_exec($hCurl);

如果您有$filename和$filename,那么filesize调用应该是在您的情况下filesize($filename)


希望这对我有所帮助

我仍然会收到与此相同的NO_FILE_ATTACHED错误:$data=array('@/tmp/amazon_export.csv');curl_setopt($ch,CURLOPT_URL,$URL);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);卷曲设置($ch,卷曲设置桩,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$data);这与示例中的相同。