Как убрать Deprecated в данном случае?

$files = array('file1' => '@'.$filename); 
$ch = curl_init("https://...");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $files);
$response = curl_exec($ch);

Ошибка в первой строке. Собака '@' перед именем файла устарела с версии 5.5.0.
curl_setopt(): The usage of the @filename API for file uploading is deprecated.
Please use the CURLFile class instead in

Но если убрать её то файл не передаётся, в доках пишут использовать CURLFile вместо неё. Попытки сделать:
$myfile = curl_file_create($filename,'image/jpg','testpic');
    $files = array('file1' => $myfile );

Или
$files = new CURLFile($filename);
Что бы потом $files передать в CURLOPT_POSTFIELDS успехом не увенчались, файл тогда не педаётся, от другого сервера приходит ошибка
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
glebovgin
@glebovgin
Full Stack Web Developer
У меня эта задача прекрасно решилась так:

$file  = '/path/to/file.ext';
$mime_type = 'application/x-shockwave-flash'; // подставить нужный mime
$curl_file = new CURLFile($file, $mime_type, basename($file));
$post['file'] = $curl_file;

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $post_url); // $post_url подставить свой
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($curl); 
curl_close($curl);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@springimport
Кроме курла ничего не придумали?

docs.guzzlephp.org/en/latest/quickstart.html
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы