2017-06-10 15 views
2

CURLFilecurl_setoptを使用して複数のファイルをアレイにアップロードするにはどうすればよいですか?複数のファイルをカールでアップロードする

データ配列を使用するとエラーが発生し(配列を文字列に変換できません)、http_build_queryというデータを使用するとCURLFileオブジェクトが破損します。

私がアップロードする必要があり、データは以下のようになります。CURLFileを使用せずにファイルを作成する機能を有している5.5+

[ 
    'mode' => 'combine', 
    'input' => 'upload', 
    'format' => $outputformat, 
    'files' => [ 
     [0] => CURLFile object, 
     [1] => CURLFile object, 
     [x] => ... 
    ] 
] 

答えて

1

PHP:curl_file_createを。

あなたは、このように複数のファイルをアップロードすることができます。これはfile投稿フォームがあった場合と同じ下のアレイとしてサーバー上で受信されます

<?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); 

、これは$_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 
) 
+0

問題は、サーバーがあるということですAPIとファイルは "ファイル"配列に配置する必要があります。 –

+0

あなたは、データを投稿したようなファイル、またはファイルの内容のbase64でエンコードされた文字列など、他の形式のファイル配列をファイルの配列としていますか? – sjdaws

+0

ファイルまたはbase64のいずれかですが、後者のオプションは大きなファイルではお勧めしません。 –

関連する問題