Funkcije pisanja PHP cURL morajo vrniti število obdelanih bajtov
Spoštujte pogodbo o številu bajtov pri porabi delov odgovora prek proxyja in ločite lokalno napako pisanja od neuspešne povezave s proxyjem.
Proxy dostavlja podatke. Vaša funkcija pisanja vrne napačno vrednost. libcurl nato prekine, okoliška koda pa poroča še eno »napako prenosa prek proxyja«.
Funkcija mora poročati, koliko prejetih bajtov je dejansko obdelala. Vračanje drugega števila pomeni napako. Za namerno blokirajočo pisalno ponor lahko delček izgleda takole:
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;
}
);To predpostavlja, da obstoječa aplikacija poseduje handle in pisalno ponor. Neuspešno ali kratko pisanje prekine, namesto da bi tiho trdilo, da je bil celoten delček shranjen. Neblokirajoči ponor potrebuje ustrezen načrt medpomnjenja in zaustavitve/nadaljevanja; majhen delček tega ne zagotavlja.
Štejte bajte, ne prikazanih znakov. Podatki so lahko binarni ali del večbajtnega besedilnega zaporedja. En klic ni nujno ena vrstica, en dokument JSON ali eno sporočilo storitve.
Inkrementalno razčlenjevanje potrebuje lastno stanje med klici. Nasprotno pa je kopičenje vsakega delčka do dokončanja lahko pravilno za majhen omejen odgovor, ni pa pomnilniška politika za velik ali neskončen tok.
Shranite izid prenosa in dokaze o napaki klica. Lokalna diskovna napaka ali zaustavitev razčlenjevalnika se lahko zgodi po vzpostavitvi veljavne poti prek proxyja. Če se nameravate ustaviti po predponi, to namerno zaustavitev klica označite ločeno. Zamenjava naslova proxyja ne more popraviti ponora, ki je prenehal sprejemati podatke.