Как загрузить несколько файлов в массиве с помощью CURLFile
и curl_setopt
?
Использование массива данных, поскольку это вызовет ошибку (не может преобразовать массив в строку), а http_build_query
по данным приведет к CURLFile
объектов CURLFile
.
Данные, которые я должен загрузить, выглядят следующим образом:
[ 'mode' => 'combine', 'input' => 'upload', 'format' => $outputformat, 'files' => [ [0] => CURLFile object, [1] => CURLFile object, [x] => ... ] ]
PHP 5.5+ имеет функцию для создания файлов без использования CURLFile: curl_file_create
.
Вы можете загрузить несколько файлов следующим образом:
<?php $files = [ '/var/file/something.txt', '/home/another_file.txt', ]; // Set postdata array $postData = ['somevar' => 'hello']; // Create array of files to post foreach ($files as $index => $file) { $postData['file[' . $index . ']'] = curl_file_create( realpath($file), mime_content_type($file), basename($file) ); } $request = curl_init('https://localhost/upload'); curl_setopt($request, CURLOPT_POST, true); curl_setopt($request, CURLOPT_POSTFIELDS, $postData); curl_setopt($request, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($request); if ($result === false) { error_log(curl_error($request)); } curl_close($request);
Это будет получено на сервере как массив под file
же, как если бы была размещенная форма, это $_FILES
:
Array ( [file] => Array ( [name] => Array ( [0] => 1.txt [1] => 2.txt ) [type] => Array ( [0] => text/plain [1] => text/plain ) [tmp_name] => Array ( [0] => /private/var/folders/cq/7262ntt15mqdmylblg9p1wf80000gn/T/phpp8SsKD [1] => /private/var/folders/cq/7262ntt15mqdmylblg9p1wf80000gn/T/php73ijEP ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 6 [1] => 6 ) ) )
Это $_POST
:
Array ( [somevar] => hello )