cURL-i kirjutamise callback võib hoida piiratud keha eesliidet ja peatada ülekande, kui see piir on saavutatud. Kasutage oma lippu, et eristada seda meelega peatamist muust kirjutusveast.

Värske handle'i jaoks, mille siht-URL on juba seadistatud:

$limit = 32768;
$prefix = '';
$limitReached = false;

curl_setopt_array($ch, [
    CURLOPT_PROXY => 'socks5h://proxy.example.net:1080',
    CURLOPT_HEADER => false,
    CURLOPT_WRITEFUNCTION => function ($handle, $chunk)
        use (&$prefix, &$limitReached, $limit) {
        $remaining = $limit - strlen($prefix);
        $prefix .= substr($chunk, 0, $remaining);

        if (strlen($prefix) >= $limit) {
            $limitReached = true;
            return 0;
        }

        return strlen($chunk);
    },
]);

$result = curl_exec($ch);
$error = curl_errno($ch);

$expectedStop = $limitReached && $error === CURLE_WRITE_ERROR;
if ($result === false && !$expectedStop) {
    throw new RuntimeException(curl_error($ch), $error);
}

Puhverserveri URL-i socks5h skeem palub puhverserveril sihtkoha hostinimi lahendada. Näidatud värske handle'i puhul lubatud avaliku sihtmärgi testiks võib SOCKS5 puhverserverite loendist pärit kontota kirje selle lõpp-punkti anda. TLS-sertifikaadi kontroll jätab tavapärased seaded.

Nulli tagastamine mitte-tühja tüki eest ütleb libcurlile, et callback ei võtnud antud andmeid vastu. See katkestab veaga CURLE_WRITE_ERROR. Siin peetakse oodatuks ainult selle vea ja callbacki limitReached lipu kombinatsiooni.

Piirist lühem vastus lõpeb tavaliselt. Piiril või sellest kõrgemal hoiab prefix maksimaalselt 32 KiB, isegi kui viimane callback saab suurema tüki. Tükisuurused erinevad; nõutud puhvri suurus ei taga fikseeritud pikkusega kutseid.

See piirab alles hoitavat keha, mitte iga baiti, mis on juba puhverdatud või ühendusel üle kantud. Eesliide võib lõppeda mitmebaidise märgi, JSON-väärtuse või HTML-elemendi sees, seega ärge eeldage, et see on täielik jäsendatav dokument.

Seotud artiklid