upload multiple files to php server using curl command line

后端 未结 2 2087
温柔的废话
温柔的废话 2020-12-03 03:29

I need to upload multiple files to a server using the curl command line utility. for a single file I have no problem using:

curl -F \"image=@file1.gif\"   ht         


        
相关标签:
2条回答
  • 2020-12-03 03:37

    The trick is to name the file uploading parameters unique.

    curl -F "image=@file1.gif" -F "image2=@file2.gif"  http://localhost:8888/web/Upload.php
    

    This will show up in the $_FILES superglobal as $_FILES['image'] and $_FILES['image2'].

    To make the files grouped under one $_FILES index you need to name the parameters as arrays:

    curl -F "image[]=@file1.gif" -F "image[]=@file2.gif"  http://localhost:8888/web/Upload.php
    
    0 讨论(0)
  • 2020-12-03 03:55

    You can use curl_multi_init(). I was working on a project, and since I'm a newbie, not even a year probably, it was terrible hard for me. I needed to upload to a server using an api (anonfiles.com)

    NOTE: My script is based on multiple files input from users. The code is as follows.

    <?php
    if (isset($_POST['btnUpload'])){
        $total = count($_FILES['file']['name']);
        for( $i=0 ; $i < $total ; $i++ ) {
          $filename = $_FILES['file']['name'][$i];
          $filedata = $_FILES['file']['tmp_name'][$i];
          $filetype = $_FILES['file']['type'][$i];
          $chfile = new CURLFile($filedata, $filetype, $filename); //creating a CURL object
          $request[]=['file'=>$chfile]; //making an asscoiative array with [1]=>['file'=>'curlobject'] and so on
          $urls[] = "https://api.anonfiles.com/upload?token=ced2abXXXXXXX";//added this each time because this was the only one url
        }
    
        print_r($request);//just for verification
        echo "<br>";
        print_r($urls);//verification
        echo "<br>";
        echo "<br>";
        $mh = curl_multi_init(); //initialise multi curl
        foreach ($urls as $key => $url) {
            $chs[$key] = curl_init($url);
            //set your own opts, these are the minimum required
            curl_setopt($chs[$key], CURLOPT_RETURNTRANSFER, true);
            curl_setopt($chs[$key], CURLOPT_POST, true);
            curl_setopt($chs[$key], CURLOPT_POSTFIELDS, $request[$key]);//adding file data
            curl_setopt($chs[$key], CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));//make sure this header is there for it to act like data
    
    
            curl_multi_add_handle($mh, $chs[$key]);//add them to the handle that we initialised
        }
    
        //running the requests
        $running = null;
        do {
          curl_multi_exec($mh, $running);
        } while ($running);
    
        //getting the responses
        $responsearray = array();//Just to store the responses
        foreach(array_keys($chs) as $key){
            $error = curl_error($chs[$key]);
            $last_effective_URL = curl_getinfo($chs[$key], CURLINFO_EFFECTIVE_URL); 
            $time = curl_getinfo($chs[$key], CURLINFO_TOTAL_TIME);//response time
            $response = curl_multi_getcontent($chs[$key]);  // get results
            array_push($responsearray, $response);
            curl_multi_remove_handle($mh, $chs[$key]);//removing it as a handle
        }
        // close current handler
        curl_multi_close($mh);
        echo "<br>";
        echo "<br>";
        echo "<br>";
        echo "<br>";
        print_r($responsearray);
    }
    
    0 讨论(0)
提交回复
热议问题