Проблемы PHP curl с fopen и $_FILES[photo_file][tmp_name]

У меня были рабочие отношения с сервером Java и сервером PHP, использующим curl из php.

Используя curl, я отправил массив с данными изображения и некоторыми строковыми значениями.

В PHP изображение было взято напрямую (хранилище tmp) из формы HTTP POST и успешно помещено в массив. Но теперь мне нужно сначала move_uploaded_file перейти в указанный каталог и прочитать его обратно с помощью fopen в другой документ PHP, использующий curl.

Разница лишь в том, что я использовал $_FILES["photo"]["tmp_name"], а теперь использую fopen. Код:

// $image = $_FILES["photo"]["tmp_name"]; Had success with this one from FORM POST
// $filename = basename($_FILES['photo']['name']);

$filename = $_POST["filename"]; // file name from ajax post

$image = fopen('C:\\xampp\\htdocs\\app\\uploads\\'.$filename, "rw"); // the sinner?

$data = array(
    'uploaded_file' => '@' . $image . ';filename=' . $filename,
);
....
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url); // the Java web service URI
curl_setopt($c, CURLOPT_HEADER, false);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $data);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($c);

Ошибка:

Erreur curl : couldn't open file "Resource id #3" 
Array
(
     [uploaded_file] => @Resource id #3;filename=480x_13197743.jpg
)

ИЗМЕНИТЬ:

Я напечатал массив из рабочего решения, и он по-другому указывает на файл/ресурс:

Array
(
    [uploaded_file] => @C:\xampp\tmp\php20EA.tmp;filename=magn.png
)

Или, лучше сказать, у него есть только строка пути к файлу. Итак, это исправлено, используя только путь к файлу и игнорируя любую копию двоичных данных. Ответил на мой вопрос =|


person gorn    schedule 27.03.2012    source источник
comment
Знаете ли вы, что после выполнения php-скрипта файл $_FILES[photo][tmp_name] будет удален. Вы должны переместить его в другое место.   -  person Matej Baćo    schedule 27.03.2012
comment
Что вы хотите поместить в массив? Имя файла? Или сам файл (в каком-то закодированном формате)? С fopen вы получите дескриптор обратно.   -  person initall    schedule 27.03.2012
comment
Вот что я сказал с move_uploaded_file. Интересно, есть ли какая-то разница в кодировке файлов или что-то, что не подходит для использования с массивом, невежественный банкомат.   -  person gorn    schedule 27.03.2012
comment
@inital, само содержимое файла   -  person gorn    schedule 27.03.2012


Ответы (1)


См. пример «Загрузка файла» по адресу http://php.net/manual/en/function.curl-setopt.php

Просто укажите путь к файлу в массиве, а не дескриптор ресурса, который fopen возвращает.

person initall    schedule 27.03.2012