Can anyone give me an example for PHP's CURLFile class?

前端 未结 5 1901
小鲜肉
小鲜肉 2020-12-02 11:16

I had a very simple PHP code to upload a file to a remote server; the way I was doing it (as has been suggested here in some other solutions) is to use cUrl to upload the fi

5条回答
  •  温柔的废话
    2020-12-02 11:54

    CURLFile has been explained well above, but for simple one file transfers where you don't want to send a multipart message (not needed for one file, and some APIs don't support multipart), then the following works.

    $ch = curl_init('https://example.com');
    
    $verbose = fopen('/tmp/curloutput.log', 'w+'); // Not for production, but useful for debugging curl issues.
    
    $filetocurl = fopen(realpath($filename), 'r');
    
    // Input the filetocurl via fopen, because CURLOPT_POSTFIELDS created multipart which some apis do not accept.
    
    // Change the options as needed.
    
    $options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_HTTPHEADER => array(
            'Content-type: application/whatever_you_need_here',
            'Authorization: Basic ' . $username . ":" . $password) // Use this if you need password login
        ),
        CURLOPT_NOPROGRESS => false,
        CURLOPT_UPLOAD => 1,
        CURLOPT_TIMEOUT => 3600,
        CURLOPT_INFILE => $filetocurl,
        CURLOPT_INFILESIZE => filesize($filename),
        CURLOPT_VERBOSE => true,
        CURLOPT_STDERR => $verbose  // Remove this for production
    );
    
    if (curl_setopt_array($ch, $options) !== false) {
        $result = curl_exec($ch);
        $info = curl_getinfo($ch);
        curl_close($ch);
    } else {
        // A Curl option could not be set. Set exception here
    }
    

    Note the above code has some extra debug - remove them once it is working.

提交回复
热议问题