$u="http://abc.com/文件很大.rar";
$ch=curl_init();
$a_opt=array(
         CURLOPT_URL => $u,
         CURLOPT_HEADER => 0,
         CURLOPT_RETURNTRANSFER => 1,
         CURLOPT_NOPROGRESS => 0,//手册上说这个关掉可以显示进度,我怎么没看到?
         CURLOPT_READFUNCTION => 'abc', //这个手册上说设置一个回调函数,这个怎么用?
        );
curl_setopt_array($ch,$a_opt);
$str=curl_exec($ch);
$f=fopen('本地文件.rar','w');
fwrite($f,$str);function abc(){//该函数与CURLOPT_READFUNCTION 对应?但函数体怎么写?}
请问怎么能显示文件下载的当前进度?
谢谢了

解决方案 »

  1.   

    用curl_getinfo去获取CURLINFO_SIZE_DOWNLOAD,再除以文件大小。
      

  2.   

    http://www.aiduv.com/archives/3
      

  3.   

    to 1楼:$str=curl_exec($ch);//这条语句执行完就下载完成了,在这语句执行的过程中没有办法再调用curl_getinfo,等执行完成,再调用也没意义
      

  4.   

    to 2楼:想用纯PHP实现我用一种方法可以实现,用fsockopen打开链接,然后再循环fread($filehandl,1024),这虽然可以实现进度,却有致命缺点,在程序对很多链接进行处理时,会有些链接打不开(该链接确实有效)。就像file_get_contents取远程内容时,时有时无头痛的很。
    所以想用curl来处理
      

  5.   

    CURL应该支持回调的,查一下手册吧。
    http://curl.haxx.se/
    -------
    http://bbs.cnsoftware.cn/
      

  6.   

    非常感谢 coolbaby在官网找到了答案解决了
    $ch=curl_init();
    ......
    CURLOPT_HEADERFUNCTION => 'read_header',
    CURLOPT_WRITEFUNCTION => 'read_body'//设置回调
    ......
    function read_header($ch,$string){
       ......//你的语句 
       return strlen($string);
    }
    function read_body($ch,$string){
       ......//你的语句 
       return strlen($string);
    }