PHP cURL - как загрузить содержимое переменной в виде файла через HTTP-запрос? - PullRequest
0 голосов
/ 24 января 2019

Существует множество ответов на вопрос «загрузить файл с помощью php curl», и все они требуют наличия физического файла на компьютере.Он загружается путем ссылки на символ @ перед именем файла в полях POST.

Однако у меня есть данные файла уже в переменной PHP: $ data.Как я могу загрузить это напрямую, без необходимости сначала записать его в файл?

Я пробовал это:

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => SERVER_URL . '/test.php?abc=def&ghi=jkl',
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => 120,
    CURLOPT_POST => 1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => ['file' => $data],
    CURLOPT_HTTPHEADER => ["Content-type: multipart/form-data"],
    CURLOPT_HEADER => true,
    CURLOPT_INFILESIZE => strlen($data)
]);

$response = curl_exec($ch);

Но мой сервер выдает ошибку, что POST Content-Length превышает ограничение сервера8388608 байт.Тем не менее, в моем файле php.ini на сервере у меня есть upload_max_filesize = 500M.Таким образом, похоже, что этот POST не рассматривается как загрузка файла, состоящего из нескольких частей, а вместо этого пытается замять все данные файла в запрос POST.

Спасибо за любой совет.

1 Ответ

0 голосов
/ 24 января 2019

Вы можете сначала записать свою строку в файл в папке / tmp.Я не уверен, но я думаю, что вам может потребоваться сделать это, если вы хотите опубликовать файл.Документация гласит:

7.0.0 Поддержка отключения опции CURLOPT_SAFE_UPLOAD была удалена.Все загрузки файла curl должны использовать CURLFile .

РЕДАКТИРОВАТЬ: Пожалуйста, проверьте документы на post_max_size :

post_max_size integer

Устанавливает максимально допустимый размер данных поста.Этот параметр также влияет на загрузку файлов.Для загрузки больших файлов это значение должно быть больше upload_max_filesize .Вообще говоря, memory_limit должно быть больше, чем post_max_size ...

...