Nasıl bir PHP cURL XML Çağrı ile bir dosyayı ekleyebilirsiniz

3 Cevap php

Ben Amazon bir envanter dosya yüklemek için API HEDEFLER kullanıyorum ve dosya yüklemek için cURL çağrısı ile bir sorun yaşıyorum. Belgeler çok sınırlı olduğunu, bu nedenle bu yardımcı oluyor hiçbir kod örneği yoktur.

Bu şimdiye kadar cURL aramanın ne var:

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

Ben CURLOPT_POSTFIELDS içine $ envanter koyarak ve bir INFILE sahip değil denemek, ama ben aynı hatayı alıyorum.

XML yanıt, ben "NO_FILE_ATTACHED" yani açık sorunu XML çağrısına eklenecek dosyayı oluyor alıyorum.

Ilk cevap php.net üzerinde curl_setopt sayfasında Örnek # 2 kullanarak dediği gibi ben de yüklemeyi denedim.

Bunun için, ben aşağıdaki kod kullanılır:

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

Ben tekrar aynı NO_FILE_ATTACHED tepki var.

Herhangi bir fikir?

3 Cevap

Bu benim için çalışıyor:

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

Sen işe yaramaz olan, tek bir bukle operasyonda PUT ve POST birleştiriyoruz. POST kullanarak bir dosya yüklemek için nasıl bir örnek için example #2 curl_setopt kılavuz sayfası bakın.

Eğer $ dosya ve $ dosya var, dosya boyutu çağrı sizin durumda dosya boyutu ($ dosya) olmalıdır ...

Umut şu olur