首頁 >後端開發 >php教程 >PHP 用 curl 讀取 HTTP chunked 數據

PHP 用 curl 讀取 HTTP chunked 數據

WBOY
WBOY原創
2016-07-29 09:00:061535瀏覽

 對於Web 伺服器返回的HTTP chunked 資料, 我們可能希望在每一個chunk 返回時得到回調, 而不是所有的回應返回後再回調. 例如, 當伺服器是 icomet 的時候.

   在PHP 中使用curl 代碼如下:

<?php  
$url = "http://127.0.0.1:8100/stream";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'myfunc');
$result = curl_exec($ch);
curl_close($ch);

function myfunc($ch, $data){
    $bytes = strlen($data);
    // 处理 data
    return $bytes;
}

   但是, 這裡有一個問題. 對於一個chunk, 回調函數可能會被調用多次, 每一次大概是16k 的數據. 這顯然不是我們希望得到的. 因為icomet 的一個chunk 是以"n"結尾, 所以回調函數可以做一下緩衝.

function myfunc($ch, $data){
    $bytes = strlen($data);
    static $buf = '';
    $buf .= $data;
    while(1){
        $pos = strpos($buf, "\n");
        if($pos === false){
            break;
        }
        $data = substr($buf, 0, $pos+1);
        $buf = substr($buf, $pos+1);

        // 处理 data
    }
}

問啊-定制化IT教育平台,牛人一對一服務,有問必答,開發編程社交頭條官方網站:www.wenaaa.com 下載問啊APP,參與官方懸賞,賺百元現金。

QQ群290551701 聚集許多網路菁英,技術總監,架構師,專案經理!開源技術研究,歡迎業內人士,大牛及新手有志從事IT行業人員進入!

以上就介紹了PHP 用 curl 讀取 HTTP chunked 數據,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn