Make cURL write data as it receives it

前端 未结 4 1712
隐瞒了意图╮
隐瞒了意图╮ 2021-01-07 02:58

I have the following php code which I found here:

function download_xml()
{
    $url = \'http://tv.sygko.net/tv.xml\';

    $ch = curl_init($url);
    $timeo         


        
4条回答
  •  臣服心动
    2021-01-07 03:35

    Here comes a fully working example:

    public function saveFile($url, $dest) {
    
            if (!file_exists($dest))
                    touch($dest);
    
            $file = fopen($dest, 'w');
            $ch = curl_init();
    
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progressCallback');
            curl_setopt($ch, CURLOPT_BUFFERSIZE, (1024*1024*512));
            curl_setopt($ch, CURLOPT_NOPROGRESS, FALSE);
            curl_setopt($ch, CURLOPT_FAILONERROR, 1);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_TIMEOUT, 15);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
            curl_setopt($ch, CURLOPT_FILE, $file);
    
            curl_exec($ch);
            curl_close($ch);
    
            fclose($file);
    }
    ?>
    

    The secret lies withing setting CURLOPT_NOPROGRESS to FALSE, and then, CURLOPT_BUFFERSIZE will make the callback report for every CURLOPT_BUFFERSIZE bytes reached. The smaller value, the more frequently it will report. This also depends on your download speed, etc, so don't count on it to report every X seconds, since it will report for every X bytes received/transferred.

提交回复
热议问题