Callbacks za uandishi za PHP cURL lazima zirudishe idadi ya baiti zilizoshughulikiwa
Heshimu mkataba wa hesabu ya baiti unapotumia vipande vya jibu la proksi na tofautisha hitilafu ya uandishi ya ndani na muunganisho wa proksi ulioshindwa.
Proksi huwasilisha data. Callback yako ya uandishi hurudisha thamani isiyo sahihi. Kisha libcurl husimama, na msimbo unaozunguka huripoti “kushindwa kwa upakuaji kupitia proksi” kingine.
Callback lazima iripoti baiti ngapi zilizopokewa ambazo ilizishughulikia kwa kweli. Kurudisha idadi tofauti huashiria kushindwa. Kwa sinki ya uandishi inayozuia kwa makusudi, kipande kinaweza kuonekana hivi:
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;
}
);Hii inadhani kwamba programu iliyopo inamiliki handle na sinki ya uandishi. Uandishi ulioshindwa au mfupi husimama badala ya kudai kimya kwamba kipande chote kilihifadhiwa. Sinki isiyozuia inahitaji muundo ufaao wa akiba na kusitisha/kuendelea; kipande kidogo hakitoi huo.
Hesabu baiti, si herufi zinazoonyeshwa. Data inaweza kuwa binary au sehemu ya mfuatano wa maandishi wa baiti nyingi. Callback moja si lazima iwe mstari mmoja, hati moja ya JSON au ujumbe mmoja kutoka kwa huduma.
Uchanganuzi wa hatua kwa hatua unahitaji hali yake mwenyewe kati ya callbacks. Kinyume chake, kukusanya kila kipande hadi kukamilika kunaweza kuwa sahihi kwa jibu dogo lenye mipaka, lakini si sera ya kumbukumbu kwa mkondo mkubwa au usio na mwisho.
Hifadhi matokeo ya uhamishaji na ushahidi wa kushindwa kwa callback. Hitilafu ya diski ya ndani au kusimama kwa parser inaweza kutokea baada ya njia halali ya proksi kuanzishwa. Ikiwa unakusudia kusimama baada ya kiambishi, weka alama kando kwa kusimama hilo la kusudi la callback. Kubadilisha anwani ya proksi hakuwezi kurekebisha sinki iliyoacha kupokea data.