Пытаюсь передать файл на сервер, использую CURL
Запрос формируется так:
$postdata = array(
'FileToLoad' => "@".$this->file."; filename=\"$this->filename\";",
'fileId' => $this->fileId);
$this->file содержит полный путь до файла на сервере /var/www/site/data/www/site.ru/tmp/file.pdf
Отправляю так:
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl,CURLOPT_ENCODING, '');
curl_setopt($curl, CURLOPT_COOKIE, ".ASPXAUTH=$this->token;");
$out = curl_exec($curl);
curl_close($curl);
}
Запрос проходит успешно, но данные попадают в $_POST, а я их очень хочу увидеть в $_FILES. Где я ошибаюсь?
Ответ
Как выяснили в комментариях, речь о PHP 5.6. Начиная с этой версии загрузка файлов синтаксисом через @ отключена по-умолчанию. Теперь файлы нужно загружать через класс CURLFile, как-то так:
$postdata = array(
'FileToLoad' => new CURLFile($this->file, null /*или mime-type*/, $this->filename),
'fileId' => $this->fileId,
);
Код самого запроса остаётся тем же самым.
Как видно, исправляется несложно. Но для полноты ответа добавлю, что для старого кода включить обратно передачу файлов через синтаксис @ пока возможно опцией CURLOPT_SAFE_UPLOAD
Комментариев нет:
Отправить комментарий