คอลแบ็กการเขียนของ 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 หนึ่งฉบับ หรือข้อความหนึ่งจากบริการ
การแยกวิเคราะห์แบบเพิ่มขึ้นต้องมีสถานะของตัวเองระหว่างคอลแบ็ก ในทางกลับกัน การสะสมทุกชิ้นจนเสร็จอาจถูกต้องสำหรับคำตอบขนาดเล็กที่มีขอบเขต แต่ไม่ใช่นโยบายหน่วยความจำสำหรับสตรีมขนาดใหญ่หรือไม่มีที่สิ้นสุด
เก็บผลลัพธ์ของการถ่ายโอนและหลักฐานความล้มเหลวของคอลแบ็ก ข้อผิดพลาดของดิสก์ภายในหรือการหยุดของตัวแยกวิเคราะห์อาจเกิดขึ้นหลังจากสร้างเส้นทางพร็อกซีที่ถูกต้องแล้ว หากคุณต้องการหยุดหลังจากคำนำหน้า ให้ทำเครื่องหมายการหยุดคอลแบ็กโดยเจตนานั้นแยกต่างหาก การเปลี่ยนที่อยู่พร็อกซีไม่สามารถซ่อมแซมปลายทางที่หยุดรับข้อมูลได้