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

时间:2009-07-15 21:53:31

标签: php xml curl

我正在使用亚马逊AIMS 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并且没有INFILE,但我得到了相同的错误。

关于XML响应,我得到“NO_FILE_ATTACHED”所以显而易见的问题是将文件附加到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);

我得到了同样的NO_FILE_ATTACHED回复。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

这对我有用:

$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);

答案 1 :(得分:0)

您正在将PUTPOST合并到一个卷曲操作中,这将无效。有关如何使用POST上传文件的示例,请参阅example #2手册页的curl_setopt

答案 2 :(得分:0)

你有$ filename和$ FILENAME,文件大小调用应该在你的情况下文件大小($ FILENAME)......

希望有帮助