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;
}
);यह मानता है कि मौजूदा एप्लिकेशन के पास हैंडल और लेखन सिंक है। विफल या छोटा लेखन पूरे टुकड़े के सहेजे जाने का चुपचाप दावा करने के बजाय रद्द कर देता है। गैर-ब्लॉकिंग सिंक को उपयुक्त बफ़रिंग और विराम/पुनःप्रारंभ डिज़ाइन चाहिए; छोटा टुकड़ा ऐसा नहीं देता।
बाइट गिनें, प्रदर्शित अक्षर नहीं। डेटा बाइनरी या बहु-बाइट टेक्स्ट अनुक्रम का भाग हो सकता है। एक कॉलबैक ज़रूरी नहीं कि एक पंक्ति, एक JSON दस्तावेज़ या सेवा से एक संदेश हो।
इंक्रीमेंटल पार्सिंग को कॉलबैक के बीच अपनी स्थिति चाहिए। इसके विपरीत, पूरा होने तक हर टुकड़ा जमा करना छोटी सीमित प्रतिक्रिया के लिए सही हो सकता है, पर बड़ी या अंतहीन स्ट्रीम के लिए मेमोरी नीति नहीं है।
स्थानांतरण का परिणाम और कॉलबैक विफलता का प्रमाण रखें। वैध प्रॉक्सी मार्ग स्थापित होने के बाद स्थानीय डिस्क त्रुटि या पार्सर रुकावट हो सकती है। यदि आप किसी प्रीफ़िक्स के बाद रुकना चाहते हैं, उस जानबूझकर कॉलबैक रोक को अलग से चिह्नित करें। प्रॉक्सी पता बदलने से ऐसा सिंक ठीक नहीं हो सकता जिसने डेटा स्वीकार करना बंद कर दिया है।