Les funcions d'escriptura de PHP cURL han de retornar el nombre de bytes gestionats
Respecteu el contracte de recompte de bytes en consumir fragments de resposta del proxy i distingiu un error d'escriptura local d'una connexió de proxy fallida.
El proxy lliura dades. La vostra funció d'escriptura retorna el valor equivocat. Llavors libcurl avorta i el codi del voltant informa d'una altra «fallada de descàrrega a través del proxy».
La funció ha d'informar quants bytes rebuts ha gestionat realment. Retornar un recompte diferent indica fallada. Per a un destí d'escriptura deliberadament bloquejant, un fragment pot ser així:
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;
}
);Això pressuposa que l'aplicació existent posseeix el handle i el destí d'escriptura. Una escriptura fallida o curta avorta en lloc d'afirmar en silenci que tot el fragment s'ha desat. Un destí no bloquejant necessita un disseny adequat d'emmagatzematge i pausa/represa; el fragment petit no el proporciona.
Compteu bytes, no caràcters mostrats. Les dades poden ser binàries o formar part d'una seqüència de text multibyte. Una crida no és necessàriament una línia, un document JSON o un missatge del servei.
L'anàlisi incremental necessita estat propi entre crides. A la inversa, acumular cada fragment fins a completar-se pot ser correcte per a una resposta petita i limitada, però no és una política de memòria per a un flux gran o infinit.
Conserveu el resultat de la transferència i l'evidència de fallada de la crida. Un error local de disc o un avortament de l'analitzador pot ocórrer després d'establir una ruta de proxy vàlida. Si voleu aturar-vos després d'un prefix, marqueu aquesta aturada deliberada per separat. Substituir l'adreça del proxy no pot reparar un destí que ha deixat d'acceptar dades.