PHP cURL-skriuwcallbacks moatte it oantal ferwurke bytes weromjaan
Hâld de byte-telling-oerienkomst oan by it ferwurkjen fan proxy-antwurdstikken en ûnderskied in pleatslike skriuwflater fan in mislearre proxyferbining.
De proxy leveret gegevens. Jo skriuwcallback jout de ferkearde wearde werom. Dan brekt libcurl ôf, en de omlizzende koade meldt noch in “proxy-downloadflater”.
De callback moat melde hoefolle ûntfongen bytes er eins ferwurke hat. In oar oantal weromjaan betsjut in flater. Foar in bewust blokkearjende skriuwsink kin in fragmint der sa útsjen:
curl_setopt($handle, CURLOPT_PROXY, 'http://proxy.example:8080');
curl_setopt($handle, CURLOPT_WRITEFUNCTION,
function ($handle, $chunk) use ($sink) {
$written = fwrite($sink, $chunk);
return $written === false ? 0 : $written;
}
);Dit giet derfan út dat de besteande applikaasje de handle en de skriuwsink besit. In mislearre of koarte skriuw brekt ôf ynstee fan stil te bewearen dat it hiele stik bewarre is. In net-blokkearjende sink hat in passend buffer- en pauze/hervat-ûntwerp nedich; it lytse fragmint leveret dat net.
Tel bytes, net werjûn tekens. De gegevens kinne binêr wêze of diel fan in multibyte-tekstsekwinsje. Ien callback is net needsaaklikerwize ien rigel, in JSON-dokumint of in berjocht fan 'e tsjinst.
Inkremintele parsing hat syn eigen steat tusken callbacks nedich. Oarsom kin it sammeljen fan elk stik oant foltôging goed wêze foar in lyts beheind antwurd, mar it is gjin ûnthâldbelied foar in grutte of einleaze stream.
Bewarje it resultaat fan 'e oerdracht en it bewiis fan callback-flaters. In pleatslike skiuvflater of parserôfbrek kin foarkomme nei't in jildige proxy-route oanlein is. As jo fan doel binne om nei in foarheaksel te stopjen, markearje dy bewuste callback-stop apart. It ferfangen fan it proxy-adres kin in sink net reparearje dy't opholden is mei it akseptearjen fan gegevens.