2013-12-03 4 views
0

У меня есть следующий код, который отлично подходит для отправки $ xml. Однако, когда я пытаюсь добавить файл, который будет отправлен вместе с xml, я получаю сообщение об ошибке. Я попытался использовать массив postData, но затем получил массив для строковой ошибки. Теперь у меня есть это, но он отправляет xml не файл. Любые идеи о том, как я могу отправить @file с полями postfields? Любая помощь приветствуетсяОтправка файла изображения и xml с помощью cURL

$header = array('Content-Type: multipart/form-data'); 
$xml['xml'] = '<UploadPhoto>'; 
$xml['xml'] .= '<ID>12345</ID>'; 
$xml['xml'] .= '<PhotoID>myphoto</PhotoID>'; 
$xml['xml'] .= '<Filename>myphoto.jpg</Filename>'; 
$xml['xml'] .= '<Instructions>Need cheeks less rosy</Instructions>'; 
$xml['xml'] .= '</UploadPhoto>'; 

$postData = array(
'file' => '@/myphoto.jpg', 
'xml' => $xml 
); 

$connection = curl_init(); 
curl_setopt($connection, CURLOPT_URL, "http://www.myurl.com/api"); 
curl_setopt($connection, CURLOPT_HTTPHEADER, $header); 
curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($connection, CURLOPT_POST, 1); 
curl_setopt($connection, CURLOPT_POSTFIELDS, $xml); 
curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1); 
set_time_limit(108000); 

$output = curl_exec($connection); 
curl_close($connection); 
print_r($output); 
+1

http://www.php.net/manual/en/function.curl-setopt.php#110442 – zeflex

+0

Это показывает размещение полей формы, но у меня уже есть строка XML представление. Когда я объединять их с файлом, используя @, он не работает, как массив для преобразования строк. Как обеспечить, чтобы строка xml, которую я создал, оставила массив? –

+0

Часть, которую я написал, касалась файлов, а не только поля формы. – zeflex

ответ

0
curl_setopt($connection, CURLOPT_POSTFIELDS, http_build_query($postData)); 
+0

Это похоже не работает, поскольку API не видит XML правильно. Однако, по крайней мере, он отвечает. im не получает массив для строковой ошибки –

+0

В настоящее время вы отправляете только строку, а не содержимое файла в $ postData. $ PostData = массив ( \t \t 'Файл' => file_get_contents ('myphoto.jpg'), \t \t 'XML' => $ XML \t); – zeflex

+0

хорошо приближается, но XML не рассматривается API на другой стороне. Так что что-то еще не так. –

Смежные вопросы