توابع فراخوان نوشتن PHP cURL باید تعداد بایتهای پردازششده را برگردانند
هنگام مصرف قطعههای پاسخ پروکسی، قرارداد شمارش بایت را رعایت کنید و خطای نوشتن محلی را از اتصال ناموفق پروکسی تشخیص دهید.
پروکسی داده را تحویل میدهد. تابع فراخوان نوشتن شما مقدار اشتباه برمیگرداند. سپس libcurl لغو میکند و کد اطراف یک «خطای دیگر بارگیری از طریق پروکسی» گزارش میدهد.
تابع فراخوان باید گزارش دهد که واقعاً چند بایت دریافتشده را پردازش کرده است. برگرداندن شمار دیگر نشانه خطاست. برای یک مقصد نوشتن که آگاهانه مسدود میکند، قطعه میتواند چنین باشد:
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;
}
);این فرض میکند که برنامه موجود مالک handle و مقصد نوشتن است. نوشتن ناموفق یا کوتاه لغو میکند، نه اینکه بیصدا ادعا کند کل قطعه ذخیره شده است. مقصد غیرمسدودکننده به طراحی مناسب بافر و توقف/ازسرگیری نیاز دارد؛ قطعه کوچک چنین چیزی را فراهم نمیکند.
بایتها را بشمارید، نه نویسههای نمایشدادهشده. داده میتواند دودویی یا بخشی از یک توالی متنی چندبایتی باشد. یک فراخوان لزوماً یک خط، یک سند JSON یا یک پیام از سرویس نیست.
تجزیه افزایشی به وضعیت خودش میان فراخوانها نیاز دارد. در مقابل، انباشتن هر قطعه تا تکمیل برای یک پاسخ کوچک و کراندار ممکن است درست باشد، اما سیاست حافظه برای جریانی بزرگ یا بیپایان نیست.
نتیجه انتقال و شواهد خطای فراخوان را نگه دارید. خطای دیسک محلی یا لغو تجزیهگر میتواند پس از برقراری یک مسیر معتبر پروکسی رخ دهد. اگر میخواهید پس از یک پیشوند متوقف شوید، آن توقف عامدانه فراخوان را جداگانه علامت بزنید. جایگزینی نشانی پروکسی نمیتواند مقصدی را که پذیرش داده را متوقف کرده تعمیر کند.