A PHP cURL írási callbackjeinek a kezelt bájtok számát kell visszaadniuk
Tartsa be a bájtszám-szerződést a proxy válaszrészeinek feldolgozásakor, és különböztesse meg a helyi írási hibát a sikertelen proxykapcsolattól.
A proxy adatot szállít. Az írási callbackje rossz értéket ad vissza. Ekkor a libcurl megszakít, és a környező kód újabb „proxy letöltési hibát” jelent.
A callbacknek jelentenie kell, hány fogadott bájtot dolgozott fel ténylegesen. Más szám visszaadása hibát jelez. Egy szándékosan blokkoló írási célpont esetén egy töredék így nézhet ki:
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;
}
);Ez feltételezi, hogy a meglévő alkalmazás birtokolja a handle-t és az írási célpontot. A sikertelen vagy rövid írás megszakít, ahelyett hogy csendben azt állítaná, a teljes darab elmentésre került. A nem blokkoló célpont megfelelő pufferelési és szüneteltetés/folytatás tervezést igényel; a kis töredék nem nyújt ilyet.
Bájtokat számoljon, ne megjelenített karaktereket. Az adat lehet bináris vagy egy többbájtos szövegsorozat része. Egy callback nem feltétlenül egy sor, egy JSON-dokumentum vagy egy üzenet a szolgáltatástól.
Az inkrementális feldolgozásnak saját állapotra van szüksége a callbackek között. Fordítva, az egyes darabok gyűjtése a befejezésig helyes lehet egy kis, korlátozott válasz esetén, de nem memóriapolitika nagy vagy végtelen adatfolyamhoz.
Őrizze meg az átvitel eredményét és a callback hibájának bizonyítékait. Helyi lemezhiba vagy elemző megszakadás történhet egy érvényes proxyútvonal létrehozása után. Ha egy előtag után kíván megállni, jelölje meg azt a szándékos callback-megállítást külön. A proxy címének cseréje nem tudja helyreállítani azt a célpontot, amely már nem fogad adatot.