cURL не отправляет файл

Zak2009
На сайте с 27.05.2010
Offline
93
3572

Всем привет.

Есть код


$post=array(
"file1" => "@".$img.";filename=".basename($img).";type=".getimagesize($img)["mime"]);

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, "http://mysite.ru/tmp/POST.php");//$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

curl_setopt($ch, CURLOPT_VERBOSE, 1);
$answer=curl_exec($ch);
$information = curl_error($ch)."\r\n".implode("\r\n",curl_getinfo($ch));
curl_close($ch);

return $answer.$information;

Мне нужно отправить файл, но файл не отправляется, а отправляется обычный POST-массив. Сам файл существует, права доступа настроены, getimagesize возвращает все значения.

Уже вторые сутки шары долблю. В чем косяк?

Спасибо.

L
На сайте с 30.10.2015
Offline
34
#1


$post = array('filename' => basename(realpath('./kartinka.jpeg')),'file1'=>'@'.realpath('./kartinka.jpeg'));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://mysite.ru/tmp/POST.php");
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result=curl_exec ($ch);
curl_close ($ch);
...
edogs software
На сайте с 15.12.2005
Offline
775
#2

Zak2009, в принципе у Вас почти все верно, но при таком способе передачи post параметров неплохо бы проверять на допустимость символов или конвертировать в допустимые.

Попробуйте тот же самый скрипт на простом файле типа 1.jpg, если сработает - вот он Ваш косяк.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Zak2009
На сайте с 27.05.2010
Offline
93
#3

levchernenko, картина аналогичная

---------- Добавлено 10.02.2016 в 22:52 ----------

edogs,


$post = array('filename' => basename($_SERVER['DOCUMENT_ROOT'].'/tmp/1.jpg'),'file1'=>'@'.$_SERVER['DOCUMENT_ROOT'].'/tmp/1.jpg'); // отправляю

// приходит
Array ( [filename] => 1.jpg [file1] => @/web/www/web/mysite.ru/tmp/1.jpg ) Array ( )
<?php
print_r($_POST);
print_r($_FILES);
?>
edogs software
На сайте с 15.12.2005
Offline
775
#4

А код точно именно тот, что Вы используете?

Т.е. явно mysite там не должно быть, может что-то где-то при копи-пасте или редактировании потерялось?

p.s.: И путь проверьте. /web/www/web/ - странно что 2 раза web встречается. Может документ.рут криво настроен?

Zak2009
На сайте с 27.05.2010
Offline
93
#5

код точно тот, каталог верный, mysite.ru я вставляю чтобы не палить домен.

ДП
На сайте с 23.11.2009
Offline
203
#6

Если у вас php новее 5.5 - то там теперь по дефолту надо по-другому отправлять файлы.

Курите ман по опции CURLOPT_SAFE_UPLOAD тут http://php.net/manual/en/function.curl-setopt.php и http://php.net/manual/en/class.curlfile.php

Zak2009
На сайте с 27.05.2010
Offline
93
#7

Дикий пионер, вы правы, вот теперь все отправляется корректно. Спасибо.

Вот функция если кому надо


function sendimg($url,$img){

$cfile = curl_file_create($img,getimagesize($img)['mime'],basename($img));
$post=array("file1" => $cfile);

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$answer=curl_exec($ch);
curl_close($ch);

return $answer;
}


---------- Добавлено 11.02.2016 в 00:23 ----------

P.S. ***91; - знак [, ***93; - ]

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий