PHP cURL uzatishni tana prefiksidan keyin to'xtatish
Yozish callbackida cheklangan prefiksni saqlang va faqat shu callback ataylab keltirib chiqargan yozish xatosini tan oling.
cURL yozish callbacki tana cheklangan prefiksini saqlab, shu chegaraga yetganda uzatishni to'xtatishi mumkin. Bu ataylab to'xtatishni boshqa yozish xatosidan ajratish uchun o'z bayrog'ingizdan foydalaning.
Maqsadli URL allaqachon sozlangan yangi handle uchun:
$limit = 32768;
$prefix = '';
$limitReached = false;
curl_setopt_array($ch, [
CURLOPT_PROXY => 'socks5h://proxy.example.net:1080',
CURLOPT_HEADER => false,
CURLOPT_WRITEFUNCTION => function ($handle, $chunk)
use (&$prefix, &$limitReached, $limit) {
$remaining = $limit - strlen($prefix);
$prefix .= substr($chunk, 0, $remaining);
if (strlen($prefix) >= $limit) {
$limitReached = true;
return 0;
}
return strlen($chunk);
},
]);
$result = curl_exec($ch);
$error = curl_errno($ch);
$expectedStop = $limitReached && $error === CURLE_WRITE_ERROR;
if ($result === false && !$expectedStop) {
throw new RuntimeException(curl_error($ch), $error);
}
Proxy URL ning socks5h sxemasi proxydan maqsadli host nomini hal qilishni so'raydi. Ko'rsatilgan yangi handle da ruxsat etilgan ommaviy maqsad sinovi uchun SOCKS5 proxy ro'yxatidagi hisobsiz yozuv shu endpointni taqdim etishi mumkin. TLS sertifikat tekshiruvi odatdagi sozlamalarini saqlaydi.
Bo'sh bo'lmagan bo'lak uchun nol qaytarish libcurlga callback berilgan ma'lumotlarni qabul qilmaganini aytadi. U CURLE_WRITE_ERROR bilan to'xtaydi. Bu yerda faqat shu xato va callbackning limitReached bayrog'i birgalikda kelishi kutilgan deb hisoblanadi.
Chegaradan qisqa javob odatdagidek tugaydi. Chegarada yoki undan yuqori bo'lsa, oxirgi callback kattaroq bo'lak olsa ham prefix ko'pi bilan 32 KiB saqlaydi. Bo'lak o'lchamlari turlicha; so'ralgan buffer o'lchami qat'iy uzunlikdagi chaqiruvlarga va'da emas.
Bu saqlangan tanani cheklaydi, ulanishda allaqachon buferlangan yoki uzatilgan har bir baytni emas. Prefiks ko'p baytli belgi, JSON qiymati yoki HTML elementi ichida tugashi mumkin, shuning uchun uni to'liq tahlil qilinadigan hujjat deb o'ylamang.