使用cURL而不是fopen

I have a function that I'm using to download a file on the server side, the file contents is echoed out at the same time as reading it from the url:

public function Download(){
    if(fopen_available()){
        $f=fopen($url, 'rb');
        while($r=fgets($f)){
            echo $r;
        }
    }
    if(curl_available()){
        /*???*/
    }
    return false;
}

I need to put something in that last block for curl, so that fopen isn't enabled on the server then it can use curl instead.

I would prefer not to have curl write to a file if possible, and I don't want to store the whole file in memory either as it could be quite large. If it weren't for those 2 limitations then there wouldn't be a problem.

Is there any way to do this with curl (or other function)?


My reason for doing this is that I'm building a solution that will be used in many different environments (including shared hosting), I know that some hosts will turn off allow_url_fopen and need to find an alternative.

The default behavior of cUrl is to send received data to stdout. To prevent the internal buffer to hog your memory limit, set it to something really small.

The stream should be flushed each 64 bytes with this code:

if (curl_available()) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_BUFFERSIZE, 64);

    if (!curl_exec($ch)) {
        die(curl_error($ch));
    }
    curl_close($ch);
}