Отправить файл по HTTPS URL с использованием CURL и PHP - PullRequest
1 голос
/ 20 января 2011

Я пытаюсь отправить файл на URL Https с этим кодом:

$file_to_upload = array('file_contents'=>'@'.$target_path); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $target_url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSER, FALSE);
curl_setopt($ch, CURLOPT_UPLOAD, TRUE);
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'file='.$file_to_upload); 
$result = curl_exec($ch); 
$error = curl_error($ch);
curl_close ($ch); 
echo " Server response: ".$result; 
echo " Curl Error: ".$error;

Но по какой-то причине я получаю такой ответ:

Curl Error: Failed to open/read local data from file/application

Любой совет поможет, спасибо!

ОБНОВЛЕНИЕ: Когда я вынимаю CURLOPT_UPLOAD, я получаю ответ от целевого сервера, но он говорит, что в полезной нагрузке нет файла

Ответы [ 2 ]

6 голосов
/ 20 января 2011

Вы передаете довольно странный аргумент CURLOPT_POSTFIELDS. Попробуйте что-то вроде:

<?
$postfields = array('file' => '@' . $target_path);
// ...
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
?>

Кроме того, вы, вероятно, хотите, чтобы CURLOPT_RETURNTRANSFER было true, иначе $ result не получит вывод, вместо этого оно будет отправлено непосредственно в буфер / браузер.

Этот пример с php.net также может быть полезен:

<?php

$ch = curl_init();

$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);
?>
2 голосов
/ 09 мая 2017

поверх ответа coreward:

Согласно , как загрузить файл с помощью curl с php , начиная с php 5.5, вам нужно использовать curl_file_create($path) вместо "@$path".

Проверено: работает.

При использовании способа @ файл не загружается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...