Почему вместо файла cURL передает на сервер путь к нему?

Добрый день!

Пытаюсь наладить передачу файла по средствам PHP (cURL) с одного сервера на другой. На передающем сервере скрипт выглядит так:
<?php
	$cho = curl_init();
	$postdata['file'] = '@/var/www/html/file.jpg';		
	curl_setopt($cho, CURLOPT_URL, 'https://site.ru/upload.php');
	curl_setopt($cho, CURLOPT_POST, true);
	curl_setopt($cho, CURLOPT_POSTFIELDS, $postdata);
	curl_exec($cho); 
	curl_close($cho);
?>

На принимающем сервере при этом следующий код:
<?php
print_r($_POST);
echo '<br>';
print_r($_FILES);
?>

Принимающий скрипт при этом выводит:
Array ( [file] => @/var/www/html/file.jpg ) 
Array ( )


Другими словами, cURL файл почему-то не передает, а оставляет его в виде пути (т.е. не распознает, что от него требуется). Ошибок при этом нигде и никаких не выводится.
Если попробовать отправить на upload.php файл с помощью html формы, файл нормально обрабатывается и пишется в массив $_FILES.
100 раз уже такое делал, а тут почему-то не работает - с самого утра пытаюсь заставить работать :)
  • Вопрос задан
  • 332 просмотра
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
php.net/manual/en/function.curl-setopt.php

CURLOPT_SAFE_UPLOAD
TRUE to disable support for the @ prefix for uploading files in CURLOPT_POSTFIELDS, which means that values starting with @ can be safely passed as fields. CURLFile may be used for uploads instead.

Added in PHP 5.5.0 with FALSE as the default value. PHP 5.6.0 changes the default value to TRUE.

curl_setopt($cho, CURLOPT_SAFE_UPLOAD, false); // required as of PHP 5.6.0
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы