@webpixel

Как быть с CURLOPT_POSTFIELDS и file_get_contents?

Приветствую, знатоки! Столкнулся с такой ситуацией, нужно на один сервис выгружать бекапы, средний размер файлов 1-2 GB, у этого сервиса есть API для выгрузки файлов, в котором используется вот такой метод для отправки файлов:

curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($file));


Как Вы знаете file_get_contents помещает весь файл в ОЗУ и по-этому с таким размером файлов как у меня, я естественно получаю ошибку нехватки памяти.

Подскажите как обойти этот не приятный момент, если нет физической возможности увеличить размер выделяемой памяти? на сервере всего 512 ОЗУ. Большое спасибо.
  • Вопрос задан
  • 246 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_INFILE, fopen('pathtofile', 'rb'));

Должно быть то что нужно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@heahoh
Full stackoverflow developer
Не уверен, но возможно используя @ перед путем к файлу curl будет вытягивать содержимое через какой-нибудь fopen+fread

The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path. The filetype can be explicitly specified by following the filename with the type in the format ';type=mimetype'. This parameter can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data. As of PHP 5.2.0, value must be an array if files are passed to this option with the @ prefix. As of PHP 5.5.0, the @ prefix is deprecated and files can be sent using CURLFile. The @ prefix can be disabled for safe passing of values beginning with @ by setting the CURLOPT_SAFE_UPLOAD option to TRUE.
Ответ написан
Ваш ответ на вопрос

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

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