Zapisovacie callbacky PHP cURL musia vracať počet spracovaných bajtov
Dodržiavajte zmluvu o počte bajtov pri spracovaní častí odpovede cez proxy a rozlišujte lokálnu chybu zápisu od neúspešného pripojenia k proxy.
Proxy dodáva dáta. Váš zapisovací callback vracia nesprávnu hodnotu. libcurl potom preruší a okolitý kód hlási ďalšie „zlyhanie sťahovania cez proxy“.
Callback musí hlásiť, koľko prijatých bajtov skutočne spracoval. Vrátenie iného počtu znamená zlyhanie. Pre úmyselne blokujúci zapisovací cieľ môže fragment vyzerať takto:
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 predpokladá, že existujúca aplikácia vlastní handle a zapisovací cieľ. Neúspešný alebo krátky zápis preruší, namiesto toho aby ticho tvrdil, že celý fragment bol uložený. Neblokujúci cieľ potrebuje vhodný návrh bufferovania a pozastavenia/obnovenia; malý fragment ho neposkytuje.
Počítajte bajty, nie zobrazené znaky. Dáta môžu byť binárne alebo súčasťou viacbajtovej textovej sekvencie. Jeden callback nemusí byť jeden riadok, dokument JSON ani správa od služby.
Inkrementálne parsovanie potrebuje vlastný stav medzi callbackmi. Naopak, hromadenie každého fragmentu do dokončenia môže byť správne pre malú obmedzenú odpoveď, ale nie je pamäťovou politikou pre veľký alebo nekonečný tok.
Uchovajte výsledok prenosu a dôkazy o zlyhaní callbacku. Lokálna chyba disku alebo prerušenie parsera môže nastať po nadviazaní platnej trasy cez proxy. Ak chcete po prefixe zastaviť, označte toto úmyselné zastavenie callbacku zvlášť. Nahradenie adresy proxy nemôže opraviť cieľ, ktorý prestal prijímať dáta.