簡體   English   中英

使用cURL即時獲取下載大小

[英]Get download size on-the-fly with cURL

我編寫了一個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(),所以它是下載內容的大小(以字節為單位),對嗎?

使用curl_setopt($curl, CURLOPT_PROGRESSFUNCTION, "myProgressFunc")代替WRITEFUNCTION 參見此處: cURL在PHP中的下載進度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM