В PHP 8.1 появится нативный класс для этого CURLStringFile
https://www.php.net/manual/ru/migration81.new-feat...
Для версии PHP < 8.1 можете использовать полифилл
if(!class_exists('CURLStringFile')) {
class CURLStringFile extends CURLFile {
public function __construct(string $data, string $postname, string $mime = "application/octet-stream") {
$this->name = 'data://'. $mime .';base64,' . base64_encode($data);
$this->mime = $mime;
$this->postname = $postname;
}
}
}
$jpg_curlfile = new \CURLStringFile($res, 'screenshot.jpg', 'image/jpeg');
$ch = curl_init('http://example.com/upload.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => $jpg_curlfile]);
curl_exec($ch);
2. Можно полностью эмулировать Multipart/form-data и вручную расставлять boundry и тд
3. Можно использовать временные файлы функцией
tmpfile() и тогда файл сам удалится при завершении скрипта (кроме аварийных случаев завершения)