【问题标题】:Get download size on-the-fly with cURL使用 cURL 即时获取下载大小
【发布时间】:2014-07-08 06:53:06
【问题描述】:

我编写了一个 PHP 脚本,它使用 cURL 获取一个远程文件并将其提供给客户端。

它像代理一样工作......

电话:

<?php
[...]
    public function streamContent($url)
    {
        $curl = curl_init();

        curl_setopt($curl,  CURLOPT_URL, $url);
        curl_setopt($curl,  CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl,  CURLOPT_FILETIME, true);

        if($this->cookie) {
            curl_setopt($curl,    CURLOPT_COOKIEFILE,     $this->cookie);
            curl_setopt($curl,    CURLOPT_COOKIEJAR,      $this->cookie);
        }

        if($this->follow) {
            curl_setopt($curl,    CURLOPT_FOLLOWLOCATION, 1);
        }

        curl_setopt($curl,  CURLOPT_HEADERFUNCTION, array($this, "streamHeader"));
        curl_setopt($curl,  CURLOPT_WRITEFUNCTION,  array($this, "myProgressFunc"));
        $data = curl_exec($curl);
        curl_close($curl);
    }

    private function streamHeader($curl,$string)
    {
        $stringTrim = trim($string);
        if(!empty ($stringTrim)) {
            if(!preg_match('~chunk~i', $stringTrim)) header($stringTrim);
        }

        return strlen($string);
    }

    private function myProgressFunc($curl, $str)
    { 
        echo $str;

        return strlen($str);
    }
[...]
$object->streamContent('http://url_to_distant_file');
?>

现在,我想知道客户端下载了多少字节(实时,即使下载已停止)

我想我可以在 myProgressFunc() 上写一些东西来获得这个,但我不知道如何:/

有人知道如何实现吗?

谢谢!

编辑: 嗯... myProgressFunc() 返回 strlen(),所以它是下载的字节大小,对吧?

【问题讨论】:

标签: php curl


【解决方案1】:

使用curl_setopt($curl, CURLOPT_PROGRESSFUNCTION, "myProgressFunc") 而不是WRITEFUNCTION。见这里:cURL download progress in PHP

【讨论】:

  • 我可以使用 CURLOPT_PROGRESSFUNCTION 和 CURLOPT_WRITEFUNCTION 吗? CURLOPT_PROGRESSFUNCTION 的回调是否在 CURLOPT_WRITEFUNCTION 之前将内容返回给客户端?
猜你喜欢
  • 2012-06-15
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
相关资源
最近更新 更多